Oracle 11g透明網關連接Sqlserver
oracle 透明網關是oracle連接異構數據庫提供的一種技術。通過Gateway,可以在Oracle里透明的訪問其他不同的數據庫,如SQL Server, DB2, Sybase等等,就像遠程Oracle數據庫一樣。配置后的sql查詢的處理流程
一、環境信息
Oracle11g
IP地址 | 172.17.84.29 |
Oracle根目錄 | /u01/oracle/app/product/11.2.0/dbhome_1 |
Oracle端口 | 1521 |
Oracle gateway11
IP地址 | 172.17.22.230 |
gateway11根目錄 | D:\product\11.1.0\tg_1 |
gateway端口 | 1521 |
SID | HR |
Sqlserver2012
IP地址 | 172.17.22.230 |
數據庫名 | HR |
用戶名 | sa |
密碼 | admin_123 |
Oracle透明網關下載地址: http://download.oracle.com/otn/linux/oracle11g/R2/linux.x64_11gR2_gateways.zip
二、Oracle透明網關配置
2.1. gateway安裝
解壓linux.x64_11gR2_gateways.zip,運行setup安裝即可,這里我們將透明網關和SQLServer數據庫安在了一台服務器上。
下一步,填寫SQLServer數據庫服務器主機名,如:172.17.22.230;數據庫名稱:HR
安裝完后,會彈出配置監聽界面,因為我們要手工配置,點擊取消即可。
安裝完Gateway軟件后,在ORACLE_HOME目錄(D:\product\11.2.0\tg_1)下有一下dg4msql的目錄,這就是Gateway軟件的目錄了。
2.2. 透明網關層配置的SID信息,指明要訪問的MSSQL數據庫
在D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora目錄下有一個initdg4msql.ora的文件。該文件是Gateway的初始參數文件,描述連接的是哪個SQL Server數據庫。該文件的格式是initSID.ora,這里的SID在后面需要用到,系統默認的是dg4msql,一般情況這樣就可以了。如果改名,如使用HR作為SID,則文件名變成initHR.ora。文件內容如下
# This is a customized agent init file that contains the HS parameters
# that are needed for the Database Gateway for Microsoft SQL Server
#
# HS init parameters
#
HS_FDS_CONNECT_INFO=[172.17.22.230]//HR
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
只要修改HS_FDS_CONNECT_INFO參數就可以了。格式是:[hostname:port]/serverinstance/databasename,其中hostname是機器名稱或IP,PORT是SQL Server的端口號,SQL Server2005默認為1433.serverinstance是SQL Server的實例名,一般空着就行。Databasename是SQL Server的數據庫名。因為我們在安裝過程中指定了主機名和數據庫名,這里已經有信息了。
2.3. 透明網關層配置監聽器,處理oracle的查詢請求
透明網關層的監聽配置文件: D:\Oracle\product\11.2.0\tg_1\NETWORK\ADMIN\listener.ora
這里PROGRAM指定應用程序名稱,因為實例配置文件在D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora,所以PROGRAM不能改變, SID_NAME就是前面init.ora文件名里指定的SID
# listener.ora Network Configuration File: D:\product\11.2.0\tg_1\network\admin\listener.ora
# Generated by Oracle configuration tools.
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = HR)
(PROGRAM = dg4msql)
(SID_NAME = HR)
(ORACLE_HOME = D:\product\11.2.0\tg_1)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.17.22.230)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = D:\product\11.2.0\tg_1
啟動監聽
C:\Users\Administrator>lsnrctl start LSNRCTL for 64-bit Windows: Version 11.2.0.1.0 - Production on 20-7月 -2016 15:0 8:31 Copyright (c) 1991, 2010, Oracle. All rights reserved. 啟動tnslsnr: 請稍候... TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Production 系統參數文件為D:\product\11.2.0\tg_1\network\admin\listener.ora 寫入d:\product\11.2.0\tg_1\diag\tnslsnr\WIN-158KFV5FSBR\listener\alert\log.xml的 日志信息 監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.17.22.230)(PORT=1521))) 監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) 正在連接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=172.17.22.230)(PORT=1521))) LISTENER 的 STATUS ------------------------ 別名 LISTENER 版本 TNSLSNR for 64-bit Windows: Version 11.2.0.1.0 - Produ ction 啟動日期 20-7月 -2016 15:08:47 正常運行時間 0 天 0 小時 0 分 3 秒 跟蹤級別 off 安全性 ON: Local OS Authentication SNMP OFF 監聽程序參數文件 D:\product\11.2.0\tg_1\network\admin\listener.ora 監聽程序日志文件 d:\product\11.2.0\tg_1\diag\tnslsnr\WIN-158KFV5FSBR\li stener\alert\log.xml 監聽端點概要... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=172.17.22.230)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc))) 服務摘要.. 服務 "HR" 包含 1 個實例。 實例 "HR", 狀態 UNKNOWN, 包含此服務的 1 個處理程序... 命令執行成功 C:\Users\Administrator>
也可以去windows的服務中查看OracleOraGtw11g_home1TNSListener是否已經啟動
2.4 Oracle服務器配置tns
在需要建立dblink的Oracle數據庫所在服務器,配置/u01/oracle/app/product/11.2.0/dbhome_1/network/admin/tnsnames.ora
HR =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST =172.17.22.230)(PORT = 1521))
(CONNECT_DATA=(SID=HR))
(HS=OK)
)
測試tns
[oracle@elearningtest admin]$ tnsping HR TNS Ping Utility for Linux: Version 11.2.0.4.0 - Production on 20-JUL-2016 15:14:22 Copyright (c) 1997, 2013, Oracle. All rights reserved. Used parameter files: /u01/oracle/app/product/11.2.0/dbhome_1/network/admin/sqlnet.ora Used TNSNAMES adapter to resolve the alias Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST =172.17.22.230)(PORT = 1521)) (CONNECT_DATA=(SID=HR)) (HS=OK)) OK (10 msec)
2.5.建立DB link
create public database link HRdbLink connect to sa identified by "admin_123" using 'HR';
2.6 測試
SQL> select 1 from dual@HRdbLink; 1 ---------- 1
三、遇到的錯誤
錯誤1:initdg4msql.ora錯誤
[SQL]Select 1 from dual@HRdbLink
[Err] ORA-28545: 連接代理時 Net8 診斷到錯誤
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: 緊接着 2 lines (起自 HRDBLINK)
原因:
D:\Oracle\product\11.2.0\tg_1\dg4msql\admin\initdg4msql.ora的HS_FDS_CONNECT_INFO值配置錯誤
錯誤2.透明網關的監聽卡住,無法重啟
相關進程沒有徹底關閉,殺掉相關進程 如dg4msql.exe
參考:
https://docs.oracle.com/cd/B28359_01/gateways.111/b31043/conf_sql.htm