Oracle DBLink跨資料庫訪問SQL server資料同步 踩坑實錄

陳彥斌發表於2019-08-02

  專案需求:這裡暫且叫A公司吧,A公司有一套人事管理軟體,需要與我們公司的軟體做人員資訊同步,A公司用的是SQL server資料庫,我們公司用的Oracle,介面都不會開發(一萬句“fuck you”),就單單給我們公司提供了一個SQL server的賬戶和密碼,還有一個檢視。後來百度一番,可以通過DBLink跨資料庫訪問,然後做資料資訊同步功能。

  安裝過程中,踩了不少的坑,需要配置很多的東西,QQ群裡也請教不少人,都很少人聽說還有這玩意,現在做資料對接,都是走到介面,傳JSON字串過來,回答我的人,也是寥寥無幾,一萬句“fuck you”,真的是坑啊,最終花了一天的時間把搗鼓出來,所以把整個安裝步驟記錄下來。

  第一步:需要去下載一個透明網管,相當於一箇中介軟體(我們用的Oracle 11g,可能不同的資料庫版本要安裝不同的透明網管)

需要的朋友請到我的百度雲盤上下載

連結:https://pan.baidu.com/s/1pLsPI8jw7e5JiTazPJpFwQ
提取碼:m7od   

  第二步:安裝透明閘道器

1、解壓安裝包後,點選setup.exe安裝

2、下一步(注:貌似一定要和Oracle資料庫安裝目錄一致,第一次安裝的時候,就和Oracle安裝在不同地方了,最終百度很久發現,要和Oracle安裝同一個位置)

3、選擇組建,選擇SQL Server

4、填寫SQL SERVER的主機名和資料庫名稱

 

5、開始安裝

 

6、安裝完成後就退出,然後開始配置監聽,下面是重點!!!!

   第三步:透明閘道器配置

 配置說明:

本地Oracle安裝目錄:D:\Oracle\product\11.2.0\dbhome_1

本地DBLink安裝目錄:D:\Oracle\product\11.2.0\dbhome_1

SQL Server:賬號:sa;密碼:password;IP地址:127.0.0.1

1、來到:D:\Oracle\product\11.2.0\dbhome_1\dg4msql\admin;開啟initdg4msql.ora

1 這個目錄下可以看到以下initdg4msql.ora檔案,上面在安裝透明閘道器的時候有配置的要連結SQL SERVER資料的地址和資料庫名稱,在這裡都可以體現:

配置檔案:initdg4msql.ora

 1 # This is a customized agent init file that contains the HS parameters
 2 # that are needed for the Database Gateway for Microsoft SQL Server
 3 
 4 #
 5 # HS init parameters
 6 #
 7 HS_FDS_CONNECT_INFO=[127.0.0.1]:1433//DEMO   注:連線其他的SQL Server可修改此處
 8 HS_FDS_TRACE_LEVEL=OFF
 9 HS_FDS_RECOVERY_ACCOUNT=RECOVER
10 HS_FDS_RECOVERY_PWD=RECOVER

檢查一下HS_FDS_CONNECT_INFO是否是我們想要連結的地址,格式為:目標資料庫的IP地址:埠//資料庫名。SQL SERVER的預設埠是1433。

配置檔案:listener.ora.sample(localhost是監聽的IP地址,這裡我們連的是本地,127.0.0.1也是可以的)

 1 # This is a sample listener.ora that contains the NET8 parameters that are
 2 # needed to connect to an HS Agent
 3 
 4 LISTENER =
 5  (ADDRESS_LIST=
 6       (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
 7  )
 8 
 9 SID_LIST_LISTENER=
10   (SID_LIST=
11       (SID_DESC=
12          (SID_NAME=dg4msql)
13          (ORACLE_HOME=D:\Oracle\product\11.2.0\dbhome_1)
14          (PROGRAM=dg4msql)
15       )
16   )
17 
18 #CONNECT_TIMEOUT_LISTENER = 0 

配置檔案:tnsnames.ora.sample

1 # This is a sample tnsnames.ora that contains the NET8 parameters that are
2 # needed to connect to an HS Agent
3 
4 dg4msql  =
5   (DESCRIPTION=
6     (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))
7     (CONNECT_DATA=(SID=dg4msql))
8     (HS=OK)
9   ) 

 2、配置透明閘道器的監聽,來到:D:\Oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN(開始配置這3個檔案)

 

配置檔案:listener.ora

 1 # This is a sample listener.ora that contains the NET8 parameters that are
 2 # needed to connect to an HS Agent
 3 SID_LIST_LISTENER =
 4   (SID_LIST =
 5     (SID_DESC =
 6       (SID_NAME = CLRExtProc)
 7       (ORACLE_HOME = D:\Oracle\product\11.2.0\dbhome_1)
 8       (PROGRAM = extproc)
 9       (ENVS = "EXTPROC_DLLS=ONLY:D:\Oracle\product\11.2.0\dbhome_1\bin\oraclr11.dll")
10     )
11     (SID_DESC=
12          (SID_NAME=dg4msql)
13          (ORACLE_HOME=D:\Oracle\product\11.2.0\dbhome_1)
14          (PROGRAM=dg4msql)
15     )
16   )
17 
18 LISTENER =
19   (DESCRIPTION_LIST =
20     (DESCRIPTION =
21       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
22       (ADDRESS = (PROTOCOL = TCP)(HOST = YRDLG5GS4G3ODYI)(PORT = 1521))
23       (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))
24     )
25   )
26 
27 ADR_BASE_LISTENER = D:\Oracle
28 
29 #CONNECT_TIMEOUT_LISTENER = 0 
1 這裡需要注意的主要是一下幾點:
2 PROGRAM為dg4msql:因為例項的配置檔案在dg4msql目錄下,就是上面的initdg4msql.ora檔案所在的目錄
3 SID_NAME為dg4msql:這個sid就是上面的檔名中的sid,initdg4msql.ora的sid為dg4msql
4 ORACLE_HOME就是我們透明閘道器的安裝目錄
5 ORACLE的監聽埠是1521,我的oracle和透明閘道器是安裝在同一臺機器上的,所以透明閘道器的監聽埠設定為1522。
6 一個initSID.ora檔案就對應一個SID_DESC,可以根據想要連結的資料庫來配置。

配置檔案:sqlnet.ora

 1 # sqlnet.ora Network Configuration File: D:\Oracle\product\11.2.0\dbhome_1\network\admin\sqlnet.ora
 2 # Generated by Oracle configuration tools.
 3 
 4 # This file is actually generated by netca. But if customers choose to 
 5 # install "Software Only", this file wont exist and without the native 
 6 # authentication, they will not be able to connect to the database on NT.
 7 
 8 SQLNET.AUTHENTICATION_SERVICES= (NONE)
 9 
10 NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

配置檔案:tnsnames.ora

 1 # This is a sample tnsnames.ora that contains the NET8 parameters that are
 2 # needed to connect to an HS Agent
 3 ORCL =
 4   (DESCRIPTION =
 5     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
 6     (CONNECT_DATA =
 7       (SERVER = DEDICATED)
 8       (SERVICE_NAME = orcl)
 9     )
10   )
11 
12 dg4msql  =
13   (DESCRIPTION=
14     (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521))
15     (CONNECT_DATA=(SID=dg4msql))
16     (HS=OK)
17   ) 

配置完之後,一定不要忘記重啟監聽!!!!!!一定不要忘記重啟監聽!!!!!!一定不要忘記重啟監聽!!!!!!

1 命令:lsnrctl reload

檢視監聽狀態:

  第四步:Oracle配置DBLink

 1、先檢視哪些使用者可以使用DBLink,沒有則建立許可權

 

賦許可權配置命令

1 如:grant create public database link to system ;
2 格式:grant create public database link to 使用者名稱 ;

2、建立DBLink(使用者要一定要許可權才可以繼續往下執行哦!沒有的往上看,給使用者配置許可權)

 1 create database link DBTEST1
 2   connect to SA identified by "password"
 3   using 'dg4msql';
 4 
 5 
 6 
 7 格式:
 8 create database link DBLink名稱
 9   connect to SQL Server賬戶 identified by "SQL Server密碼"
10   using 'SID';

搞定!!!!

 下面這個報錯資訊,QQ群問一個遍,很少人知道DBLink這玩意,百度上資料也很少,搗鼓一下午,終於搞定了

出現這個問題是因為這6個檔案導致的!!!!!!

 搗鼓一下午,問題找到是因為這6個檔案配置出問題了,這次就不再敘述了,修改那個配置檔案了,配置檔案因人而異,剩下的自己百度去查吧~~~~好了,搗鼓一天了,洗洗睡了,拜~~

 

相關文章