一、在SQLServer中連接另一個SQLServer庫數據
在SQL中,要想在本地庫中查詢另一個數據庫中的數據表時,可以創建一個鏈接服務器:
EXEC master.dbo.sp_addlinkedserver @server = N'別名', @srvproduct=N'庫名',@provider=N'SQLOLEDB', @datasrc=N'服務器地址'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'別名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'用戶名', @rmtpassword = N'密碼'
創建完后,就可以通過“Select * from別名.庫名.dbo.表名”來查詢了。
或者也可以手工創建:
二、在Oracle中連接另一個Oracle庫數據
在Oracle中,其實也類似,要連接到其他庫時,也需要創建一個類似這樣的連接:
create database link 別名 connect to 模式名(用戶名) identified by "密碼" using 'TNS名';
注意:這里面的TNS名就是你需要連接的另一個庫的TNS名,而且是必需是在你當前連接的庫的服務器端所配置的TNS名。
創建完后,我們也就可以訪問了:“Select * from表名@別名”
如果使用的是PL/SQL開發工具,那么我們也可以直接在工具里創建:
三、在SQL Server中連接Oracle數據
同樣,也創建一個數據庫連接即可,這時我們采用Ole DB方式連接數據庫:
EXEC master.dbo.sp_addlinkedserver @server = N'別名', @srvproduct=N'庫名',@provider=N'MSDAORA', @datasrc=N'TNS名'
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'別名', @locallogin = NULL ,@useself = N'False', @rmtuser = N'模式名', @rmtpassword = N'密碼'
注意:這里面的TNS名,是在該SQL Server器端所配置的TNS名,不是在客戶端本地哦。
創建好了后,使用“select * from openquery(別名,'select * from模式名.表名”來執行查詢。
要連接到其他類型的數據庫時,其實方式也類同,只要用相應的provider來連接即可。
四、在Oracle中連接SQL Server數據
在oracle中連接SQLServer也很類似,創建一個DBLink,但問題是,創建DBLink里,里面用的TNS名稱都是連接到Oracle的,沒有配置連接到SQL Server中的。
於是想到采用Oracle中的透明網關來實現,首先在Oracle的安裝名中裝上,Oracle Net Services和Oracle Transparent Gateways, 並在此項下選擇Oracle Transparent Gateway for Microsoft SQL Server。
配置透明網關,編輯%ORACLE_HOME%/tg4msql/admin/init%ORACLE_SID%.ora, 該文件包含了TG for SQL Server的配置信息, 其中%ORACLE_SID%是給TG的"SID", 默認為tg4msql. 修改文件中的行HS_FDS_CONNECT_INFO="SERVER=SQL服務器地址;DATABASE=庫名"。
然后創建監聽器:編輯%ORACLE_HOME%/network/admin/listener.ora, 編輯對應listener的SID_LIST:
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=%ORACLE_SID%)
(ORACLE_HOME=oracle_home_directory)
(PROGRAM=tg4msql)
)
)
其中%ORACLE_SID%為第二布中設置的SID, 默認值為tg4msql. 修改listener.ora文件后需重啟listener使修改生效.
最后就可以配置TNS名了,如果直接修改Tnsname.ora文件的話,添加的格式是:
TNS名=
(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=sqlserver)(PORT=1521))
(CONNECT_DATA=(SID=網關ID))
(HS=OK))
這樣,TNS名后就可以創建DB Links,然后查詢的方式與前面一至。