10g透明閘道器訪問sqlserver

space6212發表於2019-06-25
老話題了。
最近一個專案用到了透明閘道器,這裡把配置過程簡單記錄下來,供大家參考。

oracle的透明閘道器是oracle直接訪問異構資料庫的利器。在9i中,透明閘道器是包含在資料庫安裝程式中的,在安裝資料庫軟體過程中可以選擇;10g中,oracle把透明閘道器獨立出來,需要單獨下載安裝。

本文主要討論在oracle下如何配置透明閘道器去訪問sqlserver資料庫。在11g之前,for sqlserver的透明閘道器只能安裝在windows作業系統上,從11g開始,for sqlserver的透明閘道器也可以安裝在linux/unix系統中。
本文討論的是10g下的透明閘道器,所以,首先要準備一個安裝有windows作業系統的伺服器。

在本例中,涉及到三個伺服器:

ORACLE DB伺服器:
OS: LINUX AS 4 + ORACLE 10203
IP: 10.10.10.1
透明閘道器伺服器:
OS: WINDOWS XP SP2
IP: 10.10.10.2
SQLSERVER伺服器1:
OS: WINDOWS XP + SQLSERVER 2000
IP: 10.10.10.3
PORT: 1433
SQLSERVER伺服器2:
OS: WINDOWS XP + SQLSERVER 2000
IP: 10.10.10.4
PORT: 1422

如果ORACLE DB伺服器作業系統是WINDOWS的話,可以把透明閘道器安裝在ORACLE資料伺服器上。

下面是詳細步驟:
一、透明閘道器連線到一個sqlserver上

1、下載透明閘道器
10g下,透明網管是一個單獨的元件,需要單獨下載安裝。

這個安裝包有200多m。

2、安裝
在10.10.10.2安裝透明閘道器:
解壓後,進入目錄,點選setup.exe,啟動安裝介面,安裝oracle transparent gateway for microsoft sql server;
下一步,輸入sqlserver地址和sqlserver 資料庫名,這裡你可以輸入正確的,也可以隨便輸入,或者留空,我們可以安裝完成後再配置。
安裝完後,會彈出配置監聽介面,因為我們要手工配置,點選取消即可。

3、在10.10.10.2配置透明閘道器引數檔案

預設情況下,安裝透明閘道器時會生成一個預設的引數檔案:inittg4msql.ora,它的sid是tg4mssql,你可以使用這個檔案,也可以新建一個檔案。本例選擇新建檔案。
進入$GATEWAY_HOMEtg_1tg4msqladmin目錄我這裡是:($GATEWAY_HOME是指透明閘道器的安裝主目錄)
F:oracleproduct10.2.0tg_1tg4msqladmin

新建一個檔案:initjss.ora
這個名字隨便取,但要注意格式:init.ora,把它理解為oracle的引數檔案就可以。
# This is a sample agent init file that contains the HS parameters that are
# needed for the Transparent Gateway for SQL Server

#
# HS init parameters
#
HS_FDS_CONNECT_INFO="SERVER=10.10.10.3;DATABASE=jss"
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER

HS_FDS_CONNECT_INFO的設定有多種格式,如:
HS_FDS_CONNECT_INFO=server_name.db_name,但這種寫法server_name不能為IP,且埠必須為預設的1433,如:
HS_FDS_CONNECT_INFO=sqlserver.jss

4、在10.10.10.2配置監聽
進入$GATEWAY_HOMEnetworkadmin下,編輯listener.ora檔案:
注意:下面的ORACLE_HOME實際上指的是安裝透明閘道器的主目錄,sid_name要與上一步配置的引數檔案的名稱相對應:

SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:oracleproduct10.2.0tg_1)
(PROGRAM = extproc)
)
(SID_DESC=
(SID_NAME=jss)
(ORACLE_HOME=F:oracleproduct10.2.0tg_1)
(PROGRAM=tg4msql)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = suk)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

5、啟動監聽
進入$GATEWAY_HOMEBINlsnrctl start
F:oracleproduct10.2.0tg_1binlsnrctl start

C:>F:oracleproduct10.2.0tg_1binlsnrctl start

LSNRCTL for 32-bit Windows: Version 10.2.0.1.0 - Production on 06-12月-2007 14:5
0:36

Copyright (c) 1991, 2005, Oracle. All rights reserved.

啟動tnslsnr: 請稍候...

Failed to open service , error 1060.
TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Production
系統引數檔案為F:oracleproduct10.2.0tg_1networkadminlistener.ora
寫入F:oracleproduct10.2.0tg_1networkloglistener.log的日誌資訊
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=suk)(PORT=1521)))
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc)))

正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=suk)(PORT=1521)))
LISTENER 的 STATUS
------------------------
別名 LISTENER
版本 TNSLSNR for 32-bit Windows: Version 10.2.0.1.0 - Produ
ction
啟動日期 06-12月-2007 14:50:38
正常執行時間 0 天 0 小時 0 分 1 秒
跟蹤級別 off
安全性 ON: Local OS Authentication
SNMP OFF
監聽程式引數檔案 F:oracleproduct10.2.0tg_1networkadminlistener.o
ra
監聽程式日誌檔案 F:oracleproduct10.2.0tg_1networkloglistener.log

監聽端點概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=suk)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=.pipeEXTPROC0ipc)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "jss" 包含 1 個例程。
例程 "jss", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功

至此,在透明閘道器上的工作就算完成了。

6、在10.10.10.1上配置tnsname.ora

新增如下內容:
jss=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=10.10.10.2)
(PORT=1521)
)
(CONNECT_DATA=
(SID=jss))
(HS=OK) #這個很重要
)



7、在10.10.10.1建立資料庫連結

SQL> create database link dbjss connect to sa identified by "123456" using 'jss';

8、在10.10.10.1測試連線

SQL> select * from dbo.sysobjects@dbjss;

當從oracle資料庫上發出這個sql時,實際上透過tnsname.ora配置的jss資訊轉到10.10.10.2上,當10.10.10.2的監聽監聽到10.10.10.1的請求時,再次透過initjss.ora配置的HS_FDS_CONNECT_INFO資訊轉到sqlserver資料庫上,最終把使用者需要的資料返回。

如果這個sql有記錄返回,說明透明閘道器沒有問題。


oracle的透明閘道器向前相容做得不好,oracle 9i資料庫不能透過10g的透明閘道器方位sqlserver。


二、透明閘道器連線到多個sqlserver上,且埠非預設埠

連線非預設埠的sqlserver比較麻煩,HS_FDS_CONNECT_INFO的設定要藉助sqlserver別名來解析。(如果是11g的話就比較簡單,用HS_FDS_CONNECT_INFO=://語法即可)

1、生成sqlserver別名
生成sqlserver別名的方式有三種:

1)藉助sqlserver的網路客戶端配置
我本地沒有sqlserver環境,這種方法不介紹了。

2)設定sqlserver別名
由於透明閘道器中可以讀取HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClientConnectTo下的值作為sqlserver的別名,所以可以透過更新登錄檔的方式為sqlserver設定別名。
在登錄檔的HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClient下新建項ConnectTo,然後在新建的ConnectTo下新建字串值:
在數值名稱中輸入你的sqlserver別名,在數值資料中輸入:DBMSSOCN,10.10.10.4,1422
其中:DBMSSOCN是固定字串,不用修改;10.10.10.4是sqlserver伺服器的IP;1422為sqlserver的埠。

最簡單的方法是,生成一個.reg檔案,如hc.reg,包含如下內容:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClientConnectTo]
"hc"="DBMSSOCN,10.10.10.4,1422"

直接雙擊這個reg檔案就可以把資訊寫入登錄檔中。

3)odbc
用odbc的方式其實也是透過配置odbc來為sqlserver定義別名。具體步驟是:
開始選單->設定->控制皮膚->ODBC資料來源,點選新增,在彈出的介面上選擇[SQL Server],點選[完成],彈出在彈出介面中設定資料來源名稱,如hc;
點選下一步,在彈出介面中,點選[客戶端配置],在彈出介面中輸入伺服器別名,如hc,選擇TCP/IP協議,輸入伺服器名稱:10.10.10.4;取消選擇[動態決定埠],然後輸入非預設的埠號,如1422,點選確定返回到建立資料來源視窗中;
選擇[使用使用者輸入登入ID和密碼的SQL Server驗證],在介面的下方輸入登入ID和密碼;
之後一路下一步,最後點選完成,並測試資料來源,如果測試成功,odbc配置就完成了。
此時,在登錄檔的HKEY_LOCAL_MACHINESOFTWAREMicrosoftMSSQLServerClientConnectTo就有了sqlserver別名相關資訊了。

2、在10.10.10.2新建立一個引數檔案inithc.ora
引數路徑:F:oracleproduct10.2.0tg_1tg4msqladmin
配置如下:
#
# HS init parameters
HS_FDS_CONNECT_INFO=hc.STAT_CENTER
HS_FDS_TRACE_LEVEL=OFF
HS_FDS_RECOVERY_ACCOUNT=RECOVER
HS_FDS_RECOVERY_PWD=RECOVER


3、在10.10.10.2監聽上新增新資料庫的監聽

在$GATEWAY_HOMEnetworkadmin下,編輯listener.ora檔案,新增如下資訊:
(SID_DESC=
(SID_NAME=hc)
(ORACLE_HOME=F:oracleproduct10.2.0tg_1)
(PROGRAM=tg4msql)
)

此時透明閘道器的listen.ora內容如下:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:oracleproduct10.2.0tg_1)
(PROGRAM = extproc)
)
(SID_DESC=
(SID_NAME=jss)
(ORACLE_HOME=F:oracleproduct10.2.0tg_1)
(PROGRAM=tg4msql)
)
(SID_DESC=
(SID_NAME=hc)
(ORACLE_HOME=F:oracleproduct10.2.0tg_1)
(PROGRAM=tg4msql)
)
)

LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.10.10.2)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)

4、在10.10.10.1上配置tnsname.ora

新增如下內容:
hc=
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=10.10.10.2)
(PORT=1521)
)
(CONNECT_DATA=
(SID=hc))
(HS=OK)
)

5、10.10.10.1上建立執行Northwind的資料庫鏈


SQL> create database link hc connect to test identified by "123" using 'hc';

Database link created.

6、測試
SQL> select * from dbo.STAT_OrgMatch@hc where rownum=1;

Org_Name Org_TradeID Org_CenterID
------------------------------ ----------- ------------
汶川縣中醫醫院 64 0

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/231499/viewspace-63890/,如需轉載,請註明出處,否則將追究法律責任。

相關文章