Oracle 異構服務實踐

近期公司準備開發一個計費項目,數據庫固然仍是選用我最信賴的Oracle了。因爲一部分基礎數據在一臺Win2000 Server的SQL Server 7.0數據庫中,須要考慮靈活、可靠的方法實現從Or 
acle數據庫端訪問SQL Server中的數據。因而我有機會真正體驗Oracle 9I 中的新加強功能「異構服務」(Heterogeneous Services)併爲此痛苦了近兩天。linux

先簡單介紹一下Oracle異構服務。它是包含在Oracle數據庫中的一個模塊,經過使用透明網關(Transparent Gateway)或通用鏈接(Generic Connectivity)來訪問其它非Oracle系統的數據。異構服務的主要結構以下:sql

各模塊簡要說明以下:數據庫

異構服務模塊:屬於Oracle數據庫的內核部分,負責大部分異構鏈接的處理;windows

代理通用代碼:對全部基於異構服務產品的通用代碼;tcp

驅動:是與非Oracle系統直接交互的模塊,實現從異構服務API到特定非Oracle系統API的映射。分佈式

代理:是Oracle Server鏈接非Oracle系統的進程,包括兩部分即代理通用代碼和針對特定非Oracle系統的驅動。代理的位置能夠與非Oracle系統在同一臺機器上,或與Oracle Server在同一臺機器上,或者單獨在一臺機器上。我此次實踐的環境採用的是最後一種。ide

咱們所說的透明網關和通用鏈接實際是異構服務中代理的兩種類型。其中透明網關是功能較強的,它經過代理進程從Oracle Server訪問各地的異構分佈式數據庫,而提供給用戶的感受是這些數據庫仍然是Oracle數據庫,Oracle公司提供對大多數商業數據庫的透明網關。通用鏈接則有較多限制,它使用用戶本身提供的ODBC或OLE DB驅動程序做爲異構服務的代理驅動,而且要求這些驅動必需要安裝在Oracle Server的$ORACLE_HOME目錄下。測試

好了,讓咱們開始親自動手吧!個人實驗環境以下:this

主機 spa

操做系統

軟件環境

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的技術文檔吧!祝開心、順利

相關文章
相關標籤/搜索