sqlserver 多庫查詢 sp_addlinkedserver使用方法(添加鏈接服務器)


我們日常使用SQL Server數據庫時,經常遇到需要在實例Instance01中跨實例訪問Instance02中的數據。例如在做數據遷移時,如下語句:

insert into Instance01.DB01.dbo.Table01

          select * from Instance02.DB01.dbo.Table01

普通情況下,這樣做是不允許的,因為SQL Server默認不可以跨實例訪問數據。解決方案是使用存儲過程sp_addlinkedserver進行實例注冊。

sp_addlinkedserver在MSDN中的定義為:

sp_addlinkedserver [ @server= ] 'server' [ , [ @srvproduct= ] 'product_name' ]     

      [ , [ @provider= ] 'provider_name' ]    

      [ , [ @datasrc= ] 'data_source' ]

      [ , [ @location= ] 'location' ]

      [ , [ @provstr= ] 'provider_string' ]

      [ , [ @catalog= ] 'catalog' ]

例如:在Instance01實例中,執行如下SQL語句EXEC sp_addlinkedserver ‘Instance02’ //只寫第一個參數即可,默認情況下,注冊的是SQL Server數據庫,其他參數用法詳見MSDN。

如果你的兩個實例在同一個域中,且Instance01與Instance02有共同的域登陸帳號,那么經過上面的注冊后,前面的insert語句就可以執行了。否則,還需要對注冊的遠程實例進行登陸帳號注冊,在Instance01實例中,執行如下SQL語句

EXEC sp_addlinkedsrvlogin 'InstanceName','true'  //使用集成認證訪問遠程實例

或者 EXEC sp_addlinkedsrvlogin 'InstanceName','false','TJVictor,'sa','Password1' //使用Windows認證訪問遠程實例,當用戶以TJVictor用戶登陸Instance01實例訪問Instance02時,默認把TJVictor映射成sa,且密碼為Password1

經過 sp_addlinkedserver實例注冊和sp_addlinkedsrvlogin登陸帳戶注冊后,就可以在Instance01中直接訪問Instance02中的數據庫數據了。

如果還無法訪問,請檢查本機DNS是否可以解析遠程數據庫的實例名。如果無法解析,可以在EXEC sp_addlinkedserver ‘Instance02’中把Instance02換為IP,或者在hosts文件中,自己建立相應DNS映射。

下面列舉幾個跨實例數據庫訪問的存儲過程和視圖。

存儲過程名/視圖名 作用 舉例
sp_addlinkedserver 注冊遠程數據庫實例 exec sp_addlinkedserver ‘InstanceName’
sp_dropserver 刪除遠程數據庫實例 exec sp_dropserver ‘InstanceName’
sp_addlinkedsrvlogin 注冊遠程實例登陸訪問帳戶 exec sp_addlinkedsrvlogin ‘InstanceName’, null
sp_droplinkedsrvlogin 刪除遠程實例登陸訪問帳戶 EXEC sp_droplinkedsrvlogin 'InstanceName','UserName'
sp_helpserver 當前實例已注冊的可訪問的實例(即查看使用sp_addlinkedserver已注冊過的實例) sp_helpserver
sys.sysservers 功能同sp_helpserver select * from sys.sysservers
sys.linked_logins 查看已注冊的登陸訪問帳戶(即查看使用sp_addlinkedsrvlogin已注冊過的帳戶) select * from sys.linked_logins
sys.remote_logins 查看已注冊的遠端訪問帳戶 select * from sys.remote_logins

 

Exec sp_droplinkedsrvlogin ZYB,Null --刪除映射(錄與鏈接服務器上遠程登錄之間的映射)
Exec sp_dropserver ZYB --刪除遠程服務器鏈接

EXEC sp_addlinkedserver
@server='ZYB',--被訪問的服務器別名
@srvproduct='',
@provider='SQLOLEDB',
@datasrc="/Server2" --要訪問的服務器


EXEC sp_addlinkedsrvlogin
'ZYB', --被訪問的服務器別名
'false',
NULL,
'sa', --帳號
'sa' --密碼

使用實例:
Select * from ZYB.CDCenter20110822.dbo.cardbase


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM