SQL SERVER與ORACLE的資料共享

guyeh發表於2007-11-12

SQL SERVERORACLE的資料共享

[@more@]

在當前的應用中SQL SERVER資料庫伺服器和ORACLE資料庫伺服器佔據了極大的份額,在中小型應用中由於SQL SERVERWINDOWS的良好匹配,管理、使用簡便,而使得在這個領域的應用極其廣泛如企事業人事管理系統、考勤系統、小型收費系統等;而ORACLE一直以來以其強大的資料庫管理、資料安全、資料庫完整性檢查、空間管理、資料備份與恢復等功能,以及其與UNIX/LINUX平臺的良好間日,使得在大型應用中具有不可動搖的地位,如學校一卡通系統、大型資料交換平臺、金融管理系統等。

隨著資訊化的發展,資訊交換平臺的建立在許多企事業單位變的迫切重要。而由於各種歷史的原因當前的系統整合主要是整合現有的應用系統實現資料共享,而當前的應用系統更是SQL SERVERORACLESYBASELOTUS等等資料庫共存的局面,為此實現他們之間的資料共享與交換是必不可少的過程。下面介紹一種透過SQL SERVERORACLE資料庫伺服器自身攜帶的工具實現他們之間的資料共享交換的方法,其他資料庫系統也有類似的工具可以輕鬆實現我們的需求。

一、系統實現方案:

1、 ORACLE共享SQL SERVER的資料:ORACLE自身為需要訪問異類資料庫的使用者提供了一個稱為“透明閘道器”的工具,預設不安裝。它除了提供針對SQL SERVER的外還有針對SYBASEDB2等的透明閘道器服務,安裝此元件並進行相關的配置即可達到我們的要求。

需要說明的是由於SQL SERVER不支援UNIX/LNIUX平臺,所以ORACLE FOR UNIX/LINUX版本不支援此功能。所以如果ORACLE伺服器是安裝在UNIX/LNIUX平臺上的則透明閘道器需要安裝在另外一臺WINDOWS平臺的電腦上。

2、 SQL SERVER訪問ORACLE則相對較為簡單一些,可以透過配置SQL SERVER連結伺服器的方式完成。SQL SERVER的連結伺服器的一個主要功能即是對整個企業內的異類資料來源執行分散式查詢、更新、命令和事務。所以我們利用它來完成我們的需求。

二、平臺:

ORACLE資料庫伺服器:oracle 9i+lniux dc4.1(IP:192.168.0.2)

SQL SERVER 資料庫伺服器:windows 2000 server+sql server 2000(IP:192.168.0.3)

ORACLE閘道器伺服器:windows 2000 +oracle 9i+sql server 2000(安裝型別選擇“僅連線”)(IP:192.168.0.4)

三、系統實現完全配置

1ORACLE透過透明閘道器實現訪問SQL SERVER中的資料

1)、安裝ORACLE資料庫伺服器和SQL SERVER資料庫伺服器(包括作業系統和資料庫軟體);

2)、安裝ORACLE閘道器伺服器。(此處僅介紹ORACLE閘道器的安裝,其他安裝請參考相關文件)ORACLE的安裝選擇透明閘道器(Oracle Transparent Gateway)產品。如圖所示

透明閘道器安裝好了以後會在Oracle主目錄下生成一個tg4msql資料夾。

3)、安裝ORACLE閘道器伺服器的SQL SERVER部分。只需在安裝時選擇“僅連線”即可,其他可參考SQL SERVER的安裝文件。這一步很重要,如果不安裝ORACLE透明閘道器將不能生效,安裝完後winntsystem32下有ntwdblib.dll其作用是提供訪問SQL SERVER DB_LIBARAY

4)、配置具體的透明閘道器配置檔案。此配置在閘道器伺服器(192.168.0.4)

$ORACLE9I_HOMEtg4msqladmin下新建檔案initpubs.ora,(也可以直接在inittg4msql.ora中修改)新增以下內容:

HS_FDS_CONNECT_INFO="SERVER=192.168.0.3;DATABASE=pubs"

HS_DB_NAME=pubs

HS_FDS_TRACE_LEVEL=OFF

HS_FDS_RECOVERY_ACCOUNT=RECOVER

HS_FDS_RECOVERY_PWD=RECOVER

5)、配置Listener.ora增加如圖黑體部分內容,如果訪問多個資料庫,則不同的資料庫使用不同的SID_NAME即可(如圖即是訪問SQL SERVER中的PUBS資料庫)。PROGRAM=tg4msql不能更改。此配置在閘道器伺服器(192.168.0.4)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = C:oracleora92)

(PROGRAM = extproc)

)

(SID_DESC =

(GLOBAL_DBNAME = jw)

(ORACLE_HOME = C:oracleora92)

(SID_NAME = jw)

)

(SID_DESC=

(SID_NAME=pubs)

(ORACLE_HOME=C:oracleora92)

(PROGRAM=tg4msql)

)

)

配置完畢需要重啟ORACLETNSListener服務。

6)、配置tnsnames.ora,此配置在ORACLE伺服器上完成(192.168.0.2)增加以下內容

pubs = /*可以隨便取,建議和資料庫名相同以方便識別*/

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.4)(PORT = 1521))

) /*HOST必須是閘道器的IP或主機名*/

(CONNECT_DATA =

(SID = pubs) /*必須和Listener.ora中的SID_NAME相同*/

)

(HS=ok) /*必須加上此行*/

)

在命令列輸入tnsping pubs 出現以下提示說明配置成功

C:Documents and SettingsAdministrator>tnsping pubs

TNS Ping Utility for 32-bit Windows: Version 9.2.0.1.0 - Production on 04-10-2

005 12:00:27

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

已使用的引數檔案:

C:oracleora92networkadminsqlnet.ora

已使用 TNSNAMES 介面卡來解析別名

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)

(HOST = 192.168.0.130)(PORT = 1521))) (CONNECT_DATA = (SID = pubs)) (HS=pubs))

OK10毫秒)

7)、設定資料庫引數global_names=false。此配置在ORACLE伺服器上完成(192.168.0.2)。

設定global_names=false不要求建立的資料庫連結和目的資料庫的全域性名稱一致。global_names=true則要求。

alter system set global_names=false;

8)、建立公有的資料庫連結。此配置在ORACLE伺服器上完成(192.168.0.2)。

create public database link pubs connect to sa

identified by sa1234

using ‘pubs’; /* 必須有單引號 */

其中saSQL SERVER登陸使用者名稱,sa1234為其密碼,因為ORACLE不允許全數字的密碼格式而SQL SERVER允許,所以如果有這種情況就要修改sa密碼,或者增加一個滿足要求的使用者,修改密碼方法如下:

SQL SERVER的企業管理器中選擇“安全性/登陸/sa,右擊選擇屬性修改下圖的密碼框即可。

新增使用者的方法如下:

在如下圖所示的介面右擊“登陸”,選擇“新建登陸”,

開啟如下所示介面,輸入登陸名稱,密碼,設定伺服器角色等,確認即可。

9)、訪問SQL Server下資料庫裡的資料(192.168.0.2)。

select * from ;

注意:ORACLE訪問SQL Server的資料庫連結時,用select 的時候欄位名是用雙引號引起來的。

select "zip" from stores@pubs;

2、 SQL SERVER透過連結伺服器訪問ORACLE資料庫

此功能的實現需要在SQL SERVER伺服器上安裝ORACLE客戶端,以連線ORACLE伺服器。因而在此設定中ORACLE伺服器不需要了。

1)、安裝ORACLE資料庫伺服器和SQL SERVER資料庫伺服器(包括作業系統和資料庫軟體);

2)、在SQL SERVER伺服器中安裝ORACLE客戶端;

在此需要說明的是SQL SERVER的文件中說安裝ORACLE客戶端就可以,但是在實際安裝中客戶端需要執行的幾個ORACLE客戶端登錄檔檔案老是不能安裝上,所以我選擇的是安裝伺服器端,各位可以自己測試安裝ORACLE客戶端。

需要的幾個登錄檔檔案存在於C:Program FilesCommon FilesSystem FilesOLE DB 中,如果ORACLE安裝完後此目錄中沒有mtxoci81x_win2k.reg檔案,此功能將不能成功實現。

3)、開啟SQL SERVER查詢分析器並登陸;

4)、在編輯視窗執行下列SQL語句,執行 sp_addlinkedserver 建立連結伺服器;

exec sp_addlinkedserver

'urp_server', /* 建立的連結伺服器名 */

'oracle', /* 固定 */

'msdaora', /* 固定 */

'urp' /* ORACLE例項別名 */

5)、在編輯視窗執行下列SQL語句,使用 sp_addlinkedsrvlogin 建立從 SQL Server 登入到 Oracle 登入的登入對映;

exec sp_addlinkedsrvlogin

'urp_server', /* 已建立的連結伺服器名 */

false, /* 固定 */

null, /*為每個登陸SQL SERVER的使用者使用此連結伺服器,否則寫使用者名稱 */

'THNSV2', / * ORACLE使用者名稱 */

'THNSV2_456' /*ORACLE使用者密碼 */

如此則在SQL SERVER中就可以訪問ORACLE的資料了。

建立的連結伺服器可以在企業管理器中看見,如圖所示

6)、SQL SERVER中訪問ORACLE資料

Select * from urp_serever..THNSV2.TABLE

說明:資料庫的格式必須是連結伺服器名..ORACLE使用者名稱.表名.

3、 補充說明

ORACLE訪問SQL SERVER的透明閘道器元件在8i時是需要另外購買的,而9i是隨WINDOWS版攜帶的。而SQL SERVER訪問ORACLE的方式比較多,連結伺服器只是其中一種,有興趣的朋友可以參閱相關文件實現。

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

相關文章