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 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

Oracle 9.0.1 Database Standard Edition

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

SQLDB

Windows 2000 Server

SQL Server 7.0(訪問的數據庫是CDR)

注意:Transparent Gateway for Microsoft SQL Server目前只有NT版本,因此網關程序tg4msql僅包含在Oracle Database for windows中。

系統結構:

配置過程:

從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’;

 

4. OK!最後執行SQL測試看是否能正常訪問SQL Server

SQL>select count(*) from all_tables@cdr;

  看上去並不複雜,但這些內容是我在查閱若干文檔和多次的失敗後的精華所在呀!這其中獲得的很多東西必須靠自己親自實踐才能牢記於心和融會貫通,所以你可不要僅僅滿足於最後的結果,繼續去啃Oracle的技術文檔吧!祝開心、順利

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章