1、扯扯前奏
記的2017年的五一假期,在享受假期的同時突發奇想,Oracle中怎么能查到SQL Server的數據,當時也百度了好多,搞了應該也有一天的時間吧,安裝了Oracle透明網關以后卻沒能連上SQL Server,后來也就擱淺了,現在是2018年12月4日,在這個項目了支援了快兩個月了,感覺可能會用到這塊,今天就湊時間了測試了下;不得不說今天的運氣還是挺好的。
2、不得不說的來龍去脈
oracle 透明網關是oracle連接異構數據庫提供的一種技術。通過Gateways,可以在Oracle里透明的訪問其他不同的數據庫,如SQL Server, DB2, Sybase等等,就像遠程Oracle數據庫一樣。
3、按圖就辦
備注:當時安裝時沒有截圖,圖片是在網上找的,不過內容是對的。
3.1 解壓透明網關的壓縮包,點擊setup.exe安裝
3.2 安裝目錄選擇和ORACLE一致
3.3 選擇組件,因為要鏈接到SQL SERVER
3.4 填寫SQL SERVER的主機名和數據庫名稱
3.5 開始安裝
3.6 安裝完成后就退出了,因為監聽要手動配置。
4、配置透明網關
4.1 在D:\app\product\11.2.0\tg_2\dg4msql\admin目錄下,個人安裝的路徑,因人而異。這個目錄下可以看到以下initdg4msql.ora文件,上面在安裝透明網關時有配置鏈接SQL SERVER數據的地址和數據庫名稱,在這里都可以體現。
HS_FDS_CONNECT_INFO=127.0.0.1:1433//Test HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER
檢查一下HS_FDS_CONNECT_INFO是否是我們想要鏈接的地址,格式為:目標數據庫的IP地址:端口//數據庫名。SQL SERVER的默認端口是1433。這個文件名也比較有講究。格式為initSID.ora。現在這個文件名是initdg4msql.ora。
4.2 配置透明網關的監聽,D:\app\product\11.2.0\tg_2\NETWORK\ADMIN\listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522)) ) ) SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SID_NAME=dg4msql) (ORACLE_HOME=D:\app\product\11.2.0\tg_2) (PROGRAM=dg4msql) ) ) ADR_BASE_LISTENER = D:\app\product\11.2.0\tg_2
這里需要注意的主要是一下幾點:
PROGRAM為dg4msql:因為實例的配置文件在dg4msql目錄下,就是上面的initdg4msql.ora文件所在的目錄
SID_NAME為dg4msql:這個sid就是上面的文件名中的sid,initdg4msql.ora的sid為dg4msql
ORACLE_HOME就是我們透明網關的安裝目錄
ORACLE的監聽端口是1522,我的oracle和透明網關是安裝在自己的電腦上,所以透明網關的監聽端口設置為1522。
一個initSID.ora文件就對應一個SID_DESC,可以根據想要鏈接的數據庫來配置。
4.3 啟動透明網關的監聽
在命令行執行lsnrctl start,或者直接去服務那啟動監聽OracleOraGtw11g_home1TNSListener,這個服務名根據具體而定,每人可能不太一樣。服務啟動好了就OK。
4.4 配置tns信息,來到D:\app\Administrator\Home\product\11.2.0\dbhome_1\NETWORK\ADMIN
#透明網關 dg4msql = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522)) ) (CONNECT_DATA = (sid = dg4msql) ) (HS = OK) )
4.5 測試tns
重啟oracle監聽服務和透明網關服務后在命令行輸入:tnsping dg4msql。
4.6 建立DBLINK
create database link LOCALSQL connect to "sa" identified by "qweasd" using '( DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1433)) (CONNECT_DATA = ( SID = Test ) ) (HS=OK ))';
4.7 查詢實例