在實際應用中經常碰到要對兩個資料庫(不在同一台主機上)進行關聯操作,在Oracle中提供了這種機制,可以連結其他主機上的Oracle資料庫。
同樣的在SQL Server2005中也可以連結到其他的SQL Server資料庫,並且通過Ole DB還可以連結到Oracle、Sybase等其他不同的資料庫,方便使用者的操作和維護。
在Microsoft SQL Server Management Studio的工具中提供了圖形介面的操作:
不過其中的一些參數的填寫比較麻煩,我這裡就以連結SQL Server和Oracle為例說一下
(命令的方式,只列出最簡單的命令,對一些可有可無的屬性的設定我把它去掉了)
1、連結SQL Server 資料庫
這個是相對簡單的。參見如下的sql語句USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'DBSERVER', @srvproduct=N'SQL Server'
GO
USE [master]
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'DBSERVER', @locallogin = N'sa', @useself = N'False', @rmtuser = N'sa', @rmtpassword = N'1'
GO
主要就是調用了兩個預存程序:
sp_addlinkedserver是加入資料庫連結,其中server的參數是另外一台SQL Server伺服器的名稱
sp_addlinkedsrvlogin是加入對應的遠端資料庫的使用者名稱,rmtuser和rmtpassword是遠端資料庫的使用者名稱和密碼
下面就可以直接在本地查詢遠端資料庫的表了: select * from [DBSERVER].[helpdesk].[dbo].[Messages];
2、連結Oracle資料庫
要連結Oracle資料庫,首先要在本地安裝Oracle的用戶端,並且配置好Oracle的別名(別名的配置我這裡就不多說了,很簡單的)
然後同樣的調用上面的兩個預存程序:USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'GSPRING', @srvproduct=N'Oracle', @provider=N'MSDAORA', @datasrc=N'gspring'
GO
USE [master]
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'GSPRING', @locallogin = N'sa', @useself = N'False', @rmtuser = N'user1', @rmtpassword = N'1'
GO
其中server是連結資料庫的名稱,datasrc是本地配置的oracle的別名。
下面就可以直接在本地查詢遠程oracle資料庫的表了:select * from [GSPRING]..[user1].[table1];
其中user1是table1表的owner
要注意的就是SqlServer中訪問一張表的全路徑是四層,那麼訪問oracle時對於沒有的要用一個空的.代替
其他:
1、本地配置的所有連結可以在sysservers表中查到:select * from sys.sysservers;
2、訪問遠端資料庫表時也可以先在本地建一個同義字,然後就可以像在本地一樣的訪問了:USE [master]
GO
CREATE SYNONYM [dbo].[linktable] FOR [DBSERVER].[helpdesk].[dbo].[Messages];
GO
select * from linktable;
3、在配置oracle時如果出現其他錯誤,請參見微軟的解決方案(我配置過程中一個問題都沒有出現,難道是我RP太好了):http://support.microsoft.com/kb/280106/zh-cn