原文地址:http://zzh.javaeye.com/blog/278847
問題描述:
日本資料庫伺服器中有兩個資料庫A,B
現在要將B資料庫遷移到中國,
但是A,B之間有表的關聯。
實現結果:
A,B之間的資料庫實現同時更新。
解決方案:
採用SQLServer中的link server
實現步驟:
1 建立與日本方的link server,日方伺服器為:172.18.1.6;取別名:linkServerJP
文法為
sp_addlinkedserver N'linkServerJP', ' ', N'SQLOLEDB', N'172.18.1.6'
2 將本機使用者sa 存取權限映射到名為 linkServerJP 的連結的伺服器上的 SQL Server 授權登入 Visitor。
假設 使用者名稱為:develop 密碼為:password
文法為
sp_addlinkedsrvlogin N'linkServerJP', false, N'sa', N'develop', N'pssword'
3 遠端資料庫訪問方式: 伺服器名.資料庫名.dbo.表名
例如 linkServerJP.test.dbo.student
簡單舉例:
查詢日本伺服器上的student表
select username from linkServerJP.test.dbo.student;
其他動作類同
參考資料:
http://topic.csdn.net/t/20021101/10/1138996.html
建立連結的伺服器以訪問 SQL Server 資料庫
執行 sp_addlinkedserver 建立連結的伺服器,指定 SQLOLEDB 作為 provider_name,指定運行 SQL Server 遠程執行個體的伺服器的網路名稱作為 data_source。
例如,若要建立一個名為 LinkSQLSrvr 的連結的伺服器,以便對運行於網路名稱為 NetSQLSrvr 的伺服器上的 SQL Server 執行個體進行操作,請執行:
sp_addlinkedserver N'LinkSQLSrvr', ' ', N'SQLOLEDB', N'NetSQLSrvr'
將每個需要訪問連結的伺服器的本地 SQL Server 登入映射為連結的伺服器上的 SQL Server 授權登入。
下例將本地登入 Joe 的存取權限映射到名為 LinkedSQLSrvr 的連結的伺服器上的 SQL Server 授權登入 Visitor。
sp_addlinkedsrvlogin N'LinkSQLSrvr', false, N'Joe', N'Visitor', N'VisitorPwd'
對運行 SQL Server 7.0 版或更早版本的伺服器執行分散式查詢時,必須升級早期版本上的目錄存放過程,以確保分散式查詢可以正常運行。例如,如果伺服器啟動並執行是 SQL Server 7.0 版執行個體,則在可以從運行 SQL Server 2000 執行個體的伺服器中的分散式查詢內引用目錄存放過程之前,必須將它升級到 SQL Server 2000。有關更多資訊,請參見升級目錄存放過程 (OLE DB)。
更新遠程 SQL Server 表時,本機伺服器或用戶端不接收為該更新而激發的觸發器所產生的任何結果集或訊息。
當使用四部分的名稱時,一定要指定架構名稱。沒有在分散式查詢中指定架構名稱將會禁止 OLE DB 尋找表。當引用本地表時,如果未指定所有者姓名,SQL Server 將使用預設值。下列 SELECT 語句將產生 7314 號錯誤,即使連結的伺服器登入映射為連結的伺服器上 Northwind 資料庫中的使用者 dbo。
sp_addlinkedserver @server = N'LinkServer',
@srvproduct = N' ',
@provider = N'SQLOLEDB',
@datasrc = N'ServerNetName',
@catalog = N'Northwind'
GO
SELECT *
FROM LinkServer.Northwind..Shippers
下面的樣本定義了連結的伺服器和遠程伺服器,它們都訪問網路名稱為 othersite 的同一台電腦。連結的伺服器定義使用與遠程伺服器的網路名稱相同的名稱;而遠程伺服器定義則使用其它名稱。
/* Create a linked server definition to othersite. */
EXEC sp_addlinkedserver 'othersite', N'SQL Server'
/* Create a remote server definition using a
fictitious name. */
EXEC sp_addserver 'RPCothersite'
/* Set the fictitious nameto the network name faraway. */
EXEC sp_setnetname 'RPCothersite', 'othersite'
然後,就可以在分散式查詢或者遠端程序呼叫中引用這兩個名稱。
/* A distributed query referencing othersite. */
SELECT *
FROM othersite.Northwind.dbo.Employees
/* A remote procedure call to the same server. */
EXEC RPCothersite.master.dbo.sp_who
/* Distributed queries can be used to execute
stored procedures on the other server. */
EXEC othersite.master.dbo.sp_who
通過連結的伺服器執行的預存程序和通過遠程伺服器執行的預存程序之間的登入映射機制不同。
連結 SQL Server 中的事務考慮事項
用於 SQL Server 的 Microsoft OLE DB 提供者不支援嵌套事務。因此,對於隱性或明確交易的內部資料修改操作和分散式資料分割檢視上的資料修改操作,應將 XACT_ABORT 設定為 ON。
在隱性或明確交易或分散式資料分割檢視內部,不支援對同一 SQL Server 執行個體的環回串連。