今天測試了Oracle透明網關訪問SQLServer2000. 過程中步步為艱.特寫出詳細的配置過程,請大家參考.希望可以讓大家少走彎路.
Oracle透明網關是直接訪問異構資料庫的利器, 例如訪問Sybase,SQLServer等資料庫. 在9i版本中,oracle gateway 是和資料庫軟體整合在一起的.在Oracle10g版本中,gateway被獨立出來. 並且在9i和10g中, gateway只能支持windows版本的SQLServer訪問, 從11g開始, gateway可以安裝在Unix 和 Linux 上,極大的方便了Oracle和異構資料庫之間的數據訪問.
注意: 在安裝過程中要注意透明網關主機和SQLServer主機打開相應端口.1521和1433端口
確保外部可以通過命令telnet IP Port連通.
1. 準備: 一台SQLServer主機 OS :Linux AS4.5 + Oracle 10g ip: 10.86.16.27
一台透明網關主機 OS : windows2003 ip: 10.86.184.250
一台Oracle10g資料庫 OS: windows2003 + SqlServer2000 ip:10.86.17.100
2. 在透明網關主機上安裝10201_gateways_win32.zip 軟體:
運行Setup進行安裝, 選擇oracle transparent gateway for microsoft sql server .并完成安裝.
在安裝目錄下D:\oracle\product\10.2.0\tg_1\tg4msql\admin 新建名稱為init
的文件 ,
10.86.16.27為SQlServer主機IP .Smartit為SQLServer資料庫名稱:
HS_FDS_CONNECT_INFO="SERVER=10.86.16.27;DATABASE=SmartIT"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER
3. 在透明網關主機上配置listener.ora , 所在位置如下: D:\oracle\product\10.2.0\tg_1\NETWORK\ADMIN 內容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = D:\oracle\product\10.2.0\tg_1)
(PROGRAM = extproc)
)
(SID_DESC=
(SID_NAME=howey)
(ORACLE_HOME=D:\oracle\product\10.2.0\tg_1)
(PROGRAM=tg4msql)
)
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.86.184.250)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
4. 啟動windows透明網關監聽
D:\oracle\product\10.2.0\tg_1\BIN>lsnrctl start
LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 31-3月 -2009 15:50:14
Copyright (c) 1991, 2005, Oracle. All rights reserved.
正在啟動 tnslsnr: 請稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系統參數檔案是 D:\oracle\product\10.2.0\tg_1\network\admin\listener.ora
日誌訊息寫入 D:\oracle\product\10.2.0\tg_1\network\log\listener.log
監聽之處: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.86.184.250)(PORT=1521)))
監聽之處: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
連線至 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.86.184.250)(PORT=1521)))
監聽器的狀態
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produc
tion
啟動日期 31-3月 -2009 15:50:15
正常運作時間 0 days 0 hr. 0 min. 1 sec
追蹤層次 off
安管 ON: Local OS Authentication
SNMP OFF
監聽器參數檔案 D:\oracle\product\10.2.0\tg_1\network\admin\listener.ora
監聽器日誌檔 D:\oracle\product\10.2.0\tg_1\network\log\listener.log
監聽終止點摘要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.86.184.250)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服務摘要...
服務 "PLSExtProc" 有 1 個執行處理.
執行處理 "PLSExtProc", 狀態 UNKNOWN, 有 1 個此服務的處理程式...
服務 "howey" 有 1 個執行處理.
執行處理 "howey", 狀態 UNKNOWN, 有 1 個此服務的處理程式...
命令順利完成
5在Oracle數據庫上配置tnsname.ora文件:
HOWEY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.86.184.250)(PORT = 1521))
(CONNECT_DATA = (SID = howey)) (HS = OK)
)
測試聯通性:
[oracle@qhdtest admin]$ tnsping howey
TNS Ping Utility for Linux: Version 10.2.0.1.0 - Production on 31-MAR-2009 16:54:20
Copyright (c) 1997, 2005, Oracle. All rights reserved.
Used parameter files:
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.86.184.250)(PORT = 1521)) (CONNECT_DATA = (SID = howey)) (HS = OK))
OK (0 msec)
6.創建資料庫連接
SYS@qhdtest:SQL> create database link smart connect to sa identified by sasa using 'howey';
7. 在Oracle上測試資料庫連接:
SYS@qhdtest:SQL> select count(*) from dbo.sysobjects@smart;
COUNT(*)
----------
624
測試成功.
附過程中出現的一些錯誤總結:
問題
SYS@qhdtest:SQL> select count(*) from dbo.sysobjects@smart_link;
select count(*) from dbo.sysobjects@smart_link
*
ERROR at line 1:
ORA-28545: error diagnosed by Net8 when connecting to an agent
Unable to retrieve text of NETWORK/NCR message 65535
ORA-02063: preceding 2 lines from SMART_LINK
答案
其實此錯誤是由於Oracle和透明網關通信出現錯誤.可打開透明網關1521端口解決.
并使用tnsping命令驗證.如果三者都裝在一台機器上,也一定要保證網路連通,因為這樣的訪問必須要通過網關.
網上很多關於此錯誤的解決方式:用如下語句建立DBlink, 注:用戶名和密碼要用””雙引號
SYS@qhdtest:SQL> create database link smart_link connect to "sa" identified by
2 "sasa" using 'howey'; 其實只有訪問SQLServer2005時,密碼必須要用雙引號.用戶名不用
在訪問SQLServer2000中用戶名,密碼加不加雙引號沒有任何關係.
問題:
SYS@qhdtest:SQL> select count(*) from dbo.sysobjects@smart_link;
select count(*) from dbo.sysobjects@smart_link
*
ERROR at line 1:
ORA-02068: following severe error from SMART_LINK
ORA-03135: connection lost contact
這個問題困擾了足足2天時間.因為使用tnsping howey也沒有任何錯誤出現.為找出問題點添加了很大的難度.(眼睛都瞅腫了……LLL)
最終解決:
資料庫的tnsname.ora修改為:
HOWEY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.86.184.250)(PORT = 1521))
(CONNECT_DATA = (SID = howey))
(HS = OK)
) )
由於以上tnsname.ora文件是手工編寫,所以以上紅色右括弧錯誤的寫到了下麵藍色處,導致出現ora-02068 和 03135這2個找不到原因的ora錯誤.
至此圓滿解決Oracle10g訪問sqlserver2000的問題.
補充問題:在訪問SQLServer2005的時候出現了一個問題,就是在oracle執行查詢SQLServer過程中沒有結果返回,就是錯誤信息也沒有.解決方式為運行$ORACLE_HOME/rdbms/admin/caths.sql 腳本. 此腳本為創建HS所需表及視圖表
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/13023909/viewspace-584312/ ,如需转载,请注明出处,否则将追究法律责任。