经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
通过存储过程(SP)实现SQL Server链接服务器(LinkServer)的添加
来源:cnblogs  作者:东山絮柳仔  时间:2019/7/8 8:46:33  对本文有异议

1. 背景

当系统的微服务化做的不是很高的时候,部分功能要通过DB LinkServer 来实现跨 Server 查询,当然,有时候BI抽数据、DBA数据库维护可能也会创建LinkServer。

特别是当 DB迁移的时候,我们需要检查、创建 DB LinkServer。

 

2.脚本实现

下面是我们创建的一个存储过程,通过这个存储过程来实现简单、快速的添加链接服务器。

 

  1. USE [DBA_Manager]
  2. GO
  3.  
  4. /****** Object: StoredProcedure [dbo].[USP_Create_DBLink] Script Date: 2019/7/5 13:52:50 ******/
  5. SET ANSI_NULLS ON
  6. GO
  7.  
  8. SET QUOTED_IDENTIFIER ON
  9. GO
  10.  
  11.  
  12. -- =============================================
  13. -- Author: <Author,,Carson>
  14. -- Create date: <Create Date,2018-06-18,>
  15. -- Description: <Description,实现创建DB LinkServer的脚本化,>
  16. -- =============================================
  17. CREATE PROCEDURE [dbo].[USP_Create_DBLink]
  18. -- Add the parameters for the stored procedure here
  19. @ServerIP varchar(20),@SQLUserName varchar(20)='',@PassW varchar(20)='',@DelCurLinks varchar(10)='N', @Result nvarchar(3000)='' output
  20. AS
  21. BEGIN
  22.  
  23. SET NOCOUNT ON;
  24. declare @OriginalSQL nvarchar(3000)
  25. declare @sSQL nvarchar(3000)
  26. ----------------------------------------------
  27.  
  28. ---判断指定的ServerIP是否已存在DBLinkServer,结合@DelCurLinks输入参数判断是否删除重建
  29.  
  30. if @DelCurLinks='Y' and exists(select srvname from master.dbo.sysservers where srvname <> SERVERPROPERTY('servername') and srvname=@ServerIP)
  31. begin
  32. set @sSQL=' EXEC master.dbo.sp_dropserver @server=N'''+@ServerIP+''', @droplogins=''droplogins'''
  33. Print @sSQL
  34. exec sp_executesql @sSQL
  35. end
  36.  
  37. if not exists(select srvname from master.dbo.sysservers where srvname <> SERVERPROPERTY('servername') and srvname=@ServerIP) or @DelCurLinks='Y'
  38. begin
  39. --create script
  40. set @OriginalSQL='/****** Object: LinkedServer [<ServerIP>] ******/
  41. EXEC master.dbo.sp_addlinkedserver @server = N''<ServerIP>'', @srvproduct=N''SQL Server''
  42. /* For security reasons the linked server remote logins password is changed with ######## */
  43. EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N''<ServerIP>'',@useself=N''False'',@locallogin=NULL,@rmtuser=N''<UserName>'',@rmtpassword=''<PWD>''
  44. --GO
  45. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''collation compatible'', @optvalue=N''true''
  46. --GO
  47. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''data access'', @optvalue=N''true''
  48. --GO
  49. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''rpc'', @optvalue=N''true''
  50. --GO
  51. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''rpc out'', @optvalue=N''true''
  52. --GO
  53. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''use remote collation'', @optvalue=N''true''
  54. --GO
  55. EXEC master.dbo.sp_serveroption @server=N''<ServerIP>'', @optname=N''remote proc transaction promotion'', @optvalue=N''true''
  56. --GO
  57. '
  58. set @sSQL=REPLACE( @OriginalSQL, '<ServerIP>',@ServerIP )
  59. set @sSQL=REPLACE( @sSQL, '<UserName>',@SQLUserName )
  60. set @sSQL=REPLACE( @sSQL, '<PWD>',@PassW )
  61. begin try
  62. exec sp_executesql @sSQL
  63. print @sSQL
  64. print 'Create Link Server['+ @ServerIP +'] successfully!'
  65. end try
  66. begin catch
  67. print 'Create Link Server ['+ @ServerIP +'] fail! ErrMsg: '+ERROR_MESSAGE()
  68. end catch
  69. end
  70.  
  71. if @DelCurLinks='N' and exists(select srvname from master.dbo.sysservers where srvname <> SERVERPROPERTY('servername') and srvname=@ServerIP)
  72. begin
  73. print 'Create Link Server ['+ @ServerIP +'] fail! ErrMsg: Find DBLinkserver of the Same Name ,Please Check it.'
  74. end
  75.  
  76. END
  77.  
  78.  
  79. GO

 

3.方法使用

方法 1: 只输入IP、UID、PWD三个参数,@DelCurLinks不显示输入【此时,@DelCurLinks默认为 N,指明当存在相同的LinkServer时,不删除直接退出。】

  1. Exec USP_Create_DBLink '172.XXX.XXX.XXX','UID','PWD'

方法 2:输入IP、UID、PWD、DelCurLinks 四个参数,显示指明当存在相同的LinkServer时,不删除直接退出。

  1. Exec USP_Create_DBLink '172.XXX.XXX.XXX','UID','PWD','N'

方法 3:输入IP、UID、PWD、DelCurLinks 四个参数,显示指明当存在相同的LinkServer时,删除重新创建

  1. Exec USP_Create_DBLink '172.XXX.XXX.XXX','UID','PWD','Y'

 

4. 其它知识

 (1) 查询本SQL Server 已创建的所有实例

  1. select srvname as '链接服务器' from master.dbo.sysservers where srvname <> SERVERPROPERTY('servername')

(2)删除已建立的链接服务器(LinkServer)

  1. EXEC master.dbo.sp_dropserver @server=N'172.XXX.XXX.XXX', @droplogins='droplogins'

 

原文链接:http://www.cnblogs.com/xuliuzai/p/11137961.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号