Oracle與SQL Server的互連

不同數據庫平臺的互連一般稱之爲數據庫的異構服務,現在各大數據庫之間都可以實現這樣的異構互連,只是各廠商的具體實現技術不一樣,如:在SQL SERVER裏面叫做LINKED SERVER,通過ODBC實現與其它數據庫的互聯。

而ORACLE實現異構服務的技術叫做透明網關(Transparent Gateway),當然之前ORACLE還採用過通用連接技術。目前ORACLE利用透明網關可以實現和SQL SERVER、SYBASE、DB2等多種數據庫的互聯。

透明網關的體系結構也很簡單,在ORACLE和SQL SERVER之間使用ORACLE透明網關服務器實現互連互通,其中透明網關服務器可以與ORACLE或SQL SERVER數據庫在同一臺主機上,也可以是在獨立的一臺主機上。

下面是具體步驟,如有疑問歡迎和我聯繫,MSN: [email protected]

1、在SQL SERVER數據庫上創建測試賬號和表

這裏我用的是10.16.74.140的PUBS數據庫,賬號cyx,

create table t (c char(10));

2、我測試所用數據庫和透明網關是在同一臺機器上,在我本機:10.16.98.16,透明網關在oracle默認安裝時是不安裝的,所以如果你想用需要選擇這一選項。

3、安裝透明網關for sql server的軟件後,可以在$ORACLE_HOME下看到tg4msql目錄,編輯$ORACLE_HOME/tg4msql/admin/inittg4msql.sql文件確認這一行正確:

HS_FDS_CONNECT_INFO="SERVER=10.16.74.140;DATABASE=pubs"

4、修改透明網關server上的listener.ora,在SID_LIST中加入以下內容:

(SID_NAME = tg4msql) # SID自己命名

(ORACLE_HOME = c:)

(PROGRAM = tg4msql)

5、在oracle server上的tnsnames.ora中加入到透明網關的tnsname,內容如下:

sql2k =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 10.16.98.16)(PORT = 1521)) #此處HOST填的是透明網關SERVER的地址

)

(CONNECT_DATA = (SID = tg4msql) ) #此SID應和透明網關SERVER上設定的SID相同

(HS=OK)

)

6、修改ORACLE SERVER的初始化參數,將global_names設爲false,因爲我們並不使用GLOBAL NAME。然後重起數據庫。

7、現在在ORACLE SERVER上創建DB LINK就可以了。下面實驗數據:


C:>sqlplus /nolog

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 6月 25 13:29:41 2003

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

SQL> conn sys/change_on_install as sysdba

已連接。

SQL> create user cyx identified by cyx default tablespace users;

用戶已創建

SQL> grant connect to cyx;

授權成功。

SQL> grant resource to cyx;

授權成功。

SQL> conn cyx/cyx

已連接。

SQL> create database link tosql2k connect to cyx identified by cyx using

2 'sql2k';

數據庫鏈接已創建。

SQL> select * from t@tosql2k;

c

----------

abc

aaa

bbb

cyx

gototop

ncn

11111

已選擇7行。

SQL> insert into t@tosql2k values('ncn.cn');

已創建 1 行。

SQL> commit;

提交完成。

SQL> select * from t@tosql2k;

c

----------

abc

aaa

bbb

cyx

gototop

ncn

11111

ncn.cn

已選擇8行。

------------ www.ncn.cn ------------- gototop --------------

以上示例,oracle server和透明網關server都是在同一臺機器上,像在開始說明的那樣,我們同樣可以在其他下面oracle server中通過透明網關來訪問sql server的數據。下面是示例:

現在這個oracle server上添加tnsname。

------------ www.ncn.cn ------------- gototop --------------

hawk3$sqlplus cyx

SQL*Plus: Release 8.1.7.0.0 - Production on Wed Jun 25 14:00:34 2003

(c) Copyright 2000 Oracle Corporation. All rights reserved.

Enter password:

Connected to:

Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production

With the Partitioning option

JServer Release 8.1.7.0.0 - Production

SQL> create database link hawk3_sql2k connect to cyx identified by cyx

2 using 'sql2k';

Database link created.

SQL> select * from t@hawk3_sql2k;

c

--------------------

abc

aaa

bbb

cyx

gototop

ncn

11111

ncn.cn

8 rows selected.

 

很多朋友問到關於透明網關的一些問題,在此加以說明如下:

1、Oracle For SQL Server的透明網關在UNIX下無法實現,目前只支持WIN; 原因很簡單,SQL Server本身不支持UNIX,所以Oracle也無法直接在UNIX下訪問SQL Server。 

2、Oracle For其它數據庫的透明網關,如SYBASE等有UNIX本版本的數據庫在UNIX可以實現。 

3、Oracle透明網關軟件在Oracle 8i時是需要花錢另買的,大約1萬$;到Oracle 9i時是作爲數據庫的一個組件免費發佈的。安裝時在組件種選擇即可。 

4、針對我們的實際應用,如果有需要實現Oracle 到SQL Server的互連,我們需要另外用一臺WIN下的Oracle 9i來做透明網關服務器,其它UNIX下的Oracle通過這個透明網關來訪問SQL Server。 

5、不同數據庫間的數據處理需使用標準SQL來實現。 

6、各數據庫中特殊的數據類型,需要在程序中實現轉換,應儘量避免使用無法轉換的數據類型。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章