最近公司有跨DBserver訪問Table的需求,感受linkserver仍是比較好用的,分享一下體會。
首先linked server 能夠把不一樣的數據服務器的數據整合在一塊兒,這樣你能夠在一臺服務器上訪問全部其餘服務器的數據,而且能夠在表的級別上進行相互的JOIN,函數和存儲過程均可以訪問其餘的服務器,這簡直太強大了。
不過網上的問題和答案多不少,好多東西須要靠摸索,這也符合微軟的一向風格,幫助文檔說的模棱兩可,沒有具體實例,錯誤提示信息不明確,非要本身苦心鑽研才行,好多人都中途放棄了。
假設你有一臺ms sql 2005 的服務器,首先說說如何鏈接Oracle (10g,8i都經過了),首先須要在這臺服務器上安裝oracle的客戶端軟件,這樣才能夠經過oracle的 tnsnames.ora 配置文件裏面的 tnsnames 訪問其餘的oracle服務器。你還須要有oracle 的用戶名和口令,這個事固然的了。
創建鏈接服務器:
EXEC sp_addlinkedserver 'linkedservername', 'Oracle', 'OraOLEDB.Oracle', 'oracleservername'
linkedservername 是鏈接服務器的名字,隨便起名
oracleservername 是Oracle服務器的 tns 名字
輸入用戶信息:
EXEC sp_addlinkedsrvlogin 'linkedservername', 'FALSE', NULL, 'username', 'password'
具體使用語法以下
SELECT TOP 10 * FROM linkedservername..schemaname.tablename
注意,鏈接服務器的名字和schema name之間是兩個點,schema name 和 table name 區分大小寫!SQL語句的語法是ms sql 語法,而不是oracle的語法。
========================================================================================
接下來再看看如何鏈接其餘的ms sql 服務器。
鏈接微軟自家的服務器更加容易,導航到:
server name --> Server Objects --> Linked Servers
點擊右鍵選擇 new linked server
General 頁面:
Linked Server: 輸入 你的另一臺ms sql server的服務器名字,機器名或者域名
server type 選擇 sql server
Security 頁面:這一步比較複雜!
你若是使用的是 NT賬號設置這個,只有你用這個賬號登錄你這臺服務器,這個鏈接纔有效,若是你不是用相同的賬號登錄,就沒辦法訪問,我以爲這個限制比較多,不建議採用。具體設置方法是:
Local Login: nt user name
impersonate: YES
Be made using this security context: check
remote login: nt user name
with password: nt user password
你可使用ms sql認證的用戶名來創建鏈接,這個比較實用,還省事
不用管上面的那個 local server login to remote server login mappings 部分,直接跳到下邊輸入
Be made using this security context: check
remote login: sql user name
with password: sql user passwordsql