天天看點

Oracle 異構服務實踐

近期公司準備開發一個計費項目,資料庫當然還是選用我最信賴的Oracle了。由于一部分基礎資料在一台Win2000 Server的SQL Server 7.0資料庫中,需要考慮靈活、可靠的方法實作從Or 

acle資料庫端通路SQL Server中的資料。于是我有機會真正體驗Oracle 9I 中的新增強功能“異構服務”(Heterogeneous Services)并為此痛苦了近兩天。

先簡單介紹一下Oracle異構服務。它是包含在Oracle資料庫中的一個子產品,通過使用透明網關(Transparent Gateway)或通用連接配接(Generic Connectivity)來通路其它非Oracle系統的資料。異構服務的主要結構如下:

各子產品簡要說明如下:

異構服務子產品:屬于Oracle資料庫的核心部分,負責大部分異構連接配接的處理;

代理通用代碼:對所有基于異構服務産品的通用代碼;

驅動:是與非Oracle系統直接互動的子產品,實作從異構服務API到特定非Oracle系統API的映射。

代理:是Oracle Server連接配接非Oracle系統的程序,包括兩部分即代理通用代碼和針對特定非Oracle系統的驅動。代理的位置可以與非Oracle系統在同一台機器上,或與Oracle Server在同一台機器上,或者單獨在一台機器上。我這次實踐的環境采用的是最後一種。

Oracle 異構服務實踐

我們所說的透明網關和通用連接配接實際是異構服務中代理的兩種類型。其中透明網關是功能較強的,它通過代理程序從Oracle Server通路各地的異構分布式資料庫,而提供給使用者的感覺是這些資料庫仍然是Oracle資料庫,Oracle公司提供對大多數商業資料庫的透明網關。通用連接配接則有較多限制,它使用使用者自己提供的ODBC或OLE DB驅動程式作為異構服務的代理驅動,并且要求這些驅動必須要安裝在Oracle Server的$ORACLE_HOME目錄下。

好了,讓我們開始親自動手吧!我的實驗環境如下:

主機

作業系統

軟體環境

ORADB

Redhat linux 7.2

Oracle 9.0.1 Database Standard Edition

GATEWAY

windows 2000 Professional

SQL Server 2000 (安裝類型“僅連接配接”)

SQLDB

Windows 2000 Server

SQL Server 7.0(通路的資料庫是CDR)

注意:Transparent Gateway for Microsoft SQL Server目前隻有NT版本,是以網關程式tg4msql僅包含在Oracle Database for windows中。

系統結構:

Oracle 異構服務實踐

配置過程:

從SQLDB開始:

1. 在SQLDB上建立将要從Oracle資料庫通路SQL Server的使用者testuser/testuser,并授予可通路CDR的權限;

接下來是GATEWAY:

1.安裝好Oracle 9.0.1 Database for Windows後,會發現在%ORACLE_HOME%下有目錄tg4msql,以及網關程式$ORACLE_HOME\BIN\tg4msql;

2. 確定在c:\winnt\system32下有ntwdblib.dll,若沒有則安裝SQL Server2000(安裝類型選擇“僅連接配接”)。此檔案是通路SQL Server的DB-Library;

3. ping SQLDB看是否通,若不通則在\winnt\system32\drivers\etc\hosts檔案中增加一行,用來解析SQLDB的IP位址,很簡單不多說了。

4. 修改%ORACLE_HOME%\tg4msql\inittg4msql.ora,這是網關程序啟動時需要的初始化檔案。隻需改下面這一行即可:

HS_FDS_CONNECT_INFO=SQLDB.CDR

5.修改%ORACLE_HOME%\network\admin\listener.ora如下:

LISTENER =

(ADDRESS_LIST=

(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))

)

SID_LIST_LISTENER=

(SID_LIST=

(SID_DESC=

(SID_NAME=tg4msql)

(ORACLE_HOME=e:\Oracle\OraHome_9I) #用你的%ORACLE_HOME%

(PROGRAM=tg4msql)

)

最後是ORADB:

1.修改tnsnames.ora

CDR = #CDR是我起的,你可以選用其它

(DESCRIPTION =

(ADDRESS = 

(PROTOCOL = TCP)

(HOST= GATEWAY)

(PORT = 1521)

(CONNECT_DATA =

(SID = tg4msql) #tg4msql必須要和GATEWAY上listener.ora中的SID一緻

(HS = OK) #這很重要,告訴Oracle Server要調用異構服務子產品來處理

2.修改initora9i.ora(資料庫初始化檔案)

global_names=true,重新開機資料庫。

否則會在執行sql時報錯:ORA-02085: 資料庫連結CDR與HO.WORLD相連結

原因如下:The GLOBAL_NAMES parameter when set to TRUE implies that database link name should be similar to the Global database name to which you are trying to connect.

3.建立通路SQLDB.CDR的資料庫連結

SQL>create public database link cdr connect to testuser identified by testuser using ‘CDR’;