ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 通過透明網關使Oracle10g訪問SQLServer

通過透明網關使Oracle10g訪問SQLServer

原创 Linux操作系统 作者:janeting 时间:2009-04-02 08:31:51 0 删除 编辑

今天測試了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.ora

   的文件 , 可以隨便起名.這裡我起名為:inithowey.ora 內容如下:

   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博客 ” ,链接:http://blog.itpub.net/13023909/viewspace-584312/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 庫備份及設置
请登录后发表评论 登录
全部评论

注册时间:2008-09-12

  • 博文量
    22
  • 访问量
    49412