異質資料庫鍊
1、安裝 Microsoft Data Access Components (MDAC)SDK ODBC driver
2、test whether CATHS has run.connect to the Oracle server
as schema "SYSTEM" and do "DESCRIBE SYS.HS_FDS_CLASS".
If it does not exist, connect as SYS (or internal) and run
the CATHS script. (ORACLE_HOMERDBMSADMINCATHS.SQL)
3、建立 SQL SERVER 資料來源
TEST_SQLSERVER
4、配置tnsnames.ora. (ORACLE_HOMENETWORKADMIN)
TEST_SQLSERVER =
(DESCRIPTION=
(ADDRESS=
(PROTOCOL=tcp)
(HOST=
(PORT=1521)
)
(CONNECT_DATA=
(SID=TEST_SQLSERVER)
)
(HS=)
)
5、配置listener.ora. (ORACLE_HOMENETWORKADMIN)
(SID_DESC=
(SID_NAME=TEST_SQLSERVER)
(ORACLE_HOME=D:OracleiSuites)
(PROGRAM=hsodbc)
)
6、重啟ORACLE監聽.
CMD
LSNRCTL STOP
LSNRCTL START
LSNRCTL STATUS
7、新增閘道器配置檔案. (ORACLE_HOMEHSADMIN)
檔名為:initTEST_SQLSERVER.ora
檔案內容:
#
# HS init parameters
#
HS_FDS_CONNECT_INFO = TEST_SQLSERVER
HS_FDS_TRACE_LEVEL = 0
#HS_FDS_TRACE_FILE_NAME = TEST_SQLSERVER.trc
#
# Environment variables required for the non-Oracle system
#
#set
8、進入ORACLE SQL*PLUS,建立資料庫鏈.
CREATE DATABASE LINK TOSQL USING 'TEST_SQLSERVER';
[@more@]響應此篇文章 引言響應 |
象SQL SERVER的LINKED SERVER一樣,ORACLE也能訪問非ORACLE資料庫,這是透過ORACLE異類服務(HS)實現的。從ORACLE開始引入並在ORACLE8I版本中得到進一步擴充。ORACLE異類服務整合在ORACLE8I資料庫伺服器中,實現對非ORACLE系統的訪問。根據訪問非ORACLE資料庫方式的不同,ORACLE提供了兩種不同的服務:
1. ORACLE開放互聯(Generic Connectivity):是一個輕量級的互聯方案,透過ODBC或OLE DB實現對非ORACLE資料庫的訪問。
2. ORACLE透明閘道器(Transparent Gateway):提供更健壯的互聯方式,包括分佈查詢和分散式事務支援。
對希望訪問的每一個非ORACLE資料庫系統,都要求有一個異類服務代理(Heterogeneous Services Agent),它在ORACLE伺服器和遠端資料庫間進行通訊,他包含了訪問資料庫時需要的特定資料庫資訊。
在與非ORACLE系統進行通訊時,ORACLE捕獲和儲存SQL命令,並針對每一個遠端資料原的特徵轉換資訊。無論何時向遠端資料庫傳送一個請求,ORACLE都要查詢儲存的資訊(該資訊存在於ORACLE中以HS開頭的資料字典中,詳細請參照ORACLE HELP <
一. ORACLE8I通用互聯
ORACLE8I通用互聯在ORACLE8I伺服器版本8.1.6中提供,他使用ODBC或OLD DB實現開放互聯並與遠端資料來源通訊。ORACLE8I伺服器中同時提供ODBC 和OLE DB異類代理,不需再使用其他網路產品。
同時通用互聯工作方式和編寫ODBC, OLE DB客戶端程式相似。主要區別似ORACLE伺服器要先發起連線操作然後在與遠端資料來源通訊,因此應用程式不需做任何修改。這種遠端資料訪問的優點是:
1. 很容易實現,客戶應用不需做任何改變
2. 使用標準介面(ODBC,OLE DB)進行資訊訪問
3. 異類服務提供ORACLE資料型別到標準介面的資料型別轉換
4. 支援SQL語言和內建函式
缺點是:不能執行遠端儲存過程,也不支援分佈應用,只支援單節點事務,對有些資料型別的支援存在一些問題,譬如,SQL SERVER中image資料型別。不過對於一個不需要閘道器的資料來源進行查詢,採用通用互聯還是有優勢的。
二.ORACLE8I透明閘道器
針對通用互聯存在的限制,ORACLE8I透明閘道器對訪問的非ORACLE資料來源提供了更多特性支援。目前HS代理支援DB2,SYBASE,SQL SERVER和INFORMIX.。值得注意的是,通用互聯以整合到ORACLE8I資料庫伺服器中併成為其中的一部分,而每個透明網管都必須單獨購買(ORACLE9I中包含透明網管元件)。
透明閘道器提供的功能:
1. 分散式事務:他允許一個事務跨越ORACLE和非ORACLE系統,保證事務要麼完全提交要麼完全會滾。
2. 透明SQL訪問:整合兩種不同的資料來源使他們看上去一樣,實際上,開發者不必擔心兩個系統間的語法差異,因為網管代理會將所用的SQL命令轉換為目標資料庫能夠接受的語法格式。
3. 資料字典轉換:與透明SQL訪問一樣,閘道器代理也將任意資料字典查詢轉換為非透明SQL訪問系統的資料字典。
4. 直接傳送SQL:給予程式設計師直接訪問遠端系統的能力。他能使開發者直接利用資料庫特有的功能,但是此功能需要開發者瞭解目標資料庫的語法,因為閘道器代理不對他進行轉化。
5. 訪問儲存過程:允許程式執行儲存過程,就像他是PL/SQL遠端過程一樣。
下面介紹透明閘道器提供的服務:
事務服務:連線到遠端系統時,事務服務要完成兩個任務。第一,首次進行訪問時在兩個系統間建立一個身份確認Session,Session結束時斷開此連線,第二,事務服務扮演各個分散式事務間協調器的角色,它使用兩階段提交協議維護全域性一致。為了實現分散式事務處理,需要使用MS DTC(MICROSOFT 分佈事務協調器)在多個資料庫之間協調兩階段提交過程。
SQL服務:SQL服務對映並轉換ORACLE請求為遠端系統對應的語句。它使用異類服務資料字典表中儲存的資訊決定如何轉換SQL請求才能使非ORACLE系統能夠理解,其中包括將ORACLE系統函式轉換為對應的目標資料庫函式,將ORACLE資料型別對映為相應的目標資料庫的資料型別,以及資料字典的轉換等。
過程服務:將儲存過程對映為等價的目標資料庫的過程,另外也使用儲存在異類服務資料字典中的資訊將ORACLE功能對映為目標資料庫的功能。
三.建立異類服務代理環境
無論是使用通用互聯還是透明閘道器,建立代理的步驟都是相同的。包括
1. 安裝異類服務資料字典
該步驟完成在ORACLE資料庫中建立資料字典表、檢視和包。建立這些資料庫物件的指令碼是%ORACLE_HOME%RDBMSADMINCATHS.SQL檔案。需要記住的是,執行該指令碼必須以SYS或INTERNAL使用者登陸。
建立這些物件的目的是儲存遠端系統的資訊,這些資訊包括功能翻譯,SQL翻譯和資料字典翻譯。將資訊儲存在資料字典使訪問數度加快,不必每次都查詢目標資料庫,這些資訊相對來說是靜態的。下面是異類服務使用的幾個資料字典檢視:
檢視名稱 描 述
HS_FDS_CLASS 允許訪問的遠端系統的型別資訊
HS_FDS_INST 允許訪問的遠端系統中一個特殊類的每個例項資訊
HS_CLASS_INIT 每個類的初始化引數資訊
HS_INST_INIT 每個例項的初始化引數資訊
HS_BASE_DD 異類服務能夠翻譯的所有ORACLE資料字典資訊
HS_CLASS_DD 每個類的資料字典翻譯內容資訊
HS_INST_DD 每個例項的資料字典翻譯內容資訊
HS_BASE_CAPS 異類服務支援的功能資訊
HS_CLASS_CAPS 每個類支援的功能資訊
HS_INST_CAPS 每個例項支援的功能資訊
HS_EXTERNAL_OBJECTS 分散式外部過程需要的資訊
除了這些表和檢視外,ORACLE還提供了DBMS_HS包,他完成對類、例項、初始化引數和異類服務支援的功能進行維護。詳細請參考ORACLE ONLINE HELP<
2. 配置異類服務代理
配置異類服務比較簡單,我個人認為理解異類服務的概念、架構和其提供的服務相對比較重要,因為只有瞭解了異類服務,才能對配置有深刻的理解。
對於通用互聯,必須告訴異類服務將如何連線到非ORACLE系統,是使用ODBC 還是OLE DB。ORACLE提供了兩個示例引數檔案(位於%ORACLE_HOME%NETWORK
ADMIN目錄下)inithsodbc.ora和inithsoledb.ora.
1).將inithsoledb.ora 檔案複製為initGCSQL2000檔案,引數檔名必須按照initGSID.ora進行命名轉換,GSID是tnsnames.ora和listener.ora檔案指定的閘道器係統識別符號名稱。
2).編輯initGCSQL2000.ora檔案並更新以下內容:
HS_FDS_CONNECT_INFO=”UDLFILE=%ORACLE_HOME%ORA81HSADMINGCSQL2000.UDL”
#HS_FDS_TRACE_LEVEL=16
#HS_FDS_TRACE_FILE_NAME=
3).在%ORACLE_HOME%ORA81HSADMIN中建立GCSQL2000.UDL,最簡單的方法是建立GCSQL2000.txt文字檔案,將其檔名改為GCSQL2000..UDL,然後右擊該檔案,設定其屬性,在屬性對話方塊中選擇正確的驅動程式並設定資料庫連線屬性,測試成功後退出。
4).重新啟動監聽器。
對於不同的資料庫ORACLE提供了不同的透明閘道器,如下表所列,在這些目錄下ORACLE提供了一些預設的引數檔案,只要做簡單的修改即可完成配置,下面以SQL SERVER為例進行配置,對於其他資料庫的配置大同小異,讀者可自己動手試試。
資料庫型別 對應的ORACLE目錄
SQL SERVER %ORACLE_HOME%ORA8TG4MSQL
DB2 %ORACLE_HOME%ORA8TG4DRDA
SYBASE %ORACLE_HOME%ORA8TG4SYBS
1). 將inittg4msql.ora 檔案複製為initTGSQL2000檔案,引數檔名必須按照initGSID.ora進行命名轉換,GSID是tnsnames.ora和listener.ora檔案指定的閘道器係統識別符號名稱。
2). 編輯initTGSQL2000.ora檔案並更新SQL條目HS_FDS_CONNECT_INFO,用SERVER_NAME.DATABASE_NAME指定為你想要連線的SQLSERVER資料庫,例如,為了連線YLQ伺服器上的Products資料庫,指定HS_FDS_CONNECT_INFO = YLQ.products即可。需要說明的是,對每個希望透過透明伺服器代理進行訪問的資料庫,都需要一個獨立的引數檔案來包含正確的連線資訊。
SQLSERVER透明閘道器目前還不支援SQL SERVER2000,並且不能連線到有例項名的SQLSERVER資料庫上。
3. 配置監聽器和Net8服務名
為了ORACLE資料庫能夠與SQL SERVER資料庫進行通訊,首先必須配置NET8服務名,使ORACLE伺服器能夠與監聽器程式識別的代理進行互動,需要注意的是服務名必須與異類服務引數檔案中指定的閘道器係統識別符號(GSID)一致,另外NET8服務名中還必須包括HS=OK子句,以確保該連線能使用異類服務,下面是使用OLE DB和透明閘道器進行互聯的TNSNAMES.ORA檔案的例子:
MSOLEDB=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=GCSQL2000))
(HS=OK)
)
TGMSQL=(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
(CONNECT_DATA=(SID=TGSQL2000))
(HS=OK)
)
接下來便是配置監聽器,使他能以指定的系統識別符號監聽異類服務的連線請求,當監聽器收到請求後,把它傳送給PROGRAM條目指定的代理程式,以下是配置的例子:
LISTENER=(ADDRESS=(PROTOCOL=TCP)(HOST=YLQ)(PORT=1521))
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(SID_NAME=GCSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=HSOLESQL)
)
(SID_DESC=
(SID_NAME=TGSQL2000)
(ORACLE_HOME=C:ORACLEORA81)
(PROGRAM=TG4MSQL)
)
)
記住要使你的配置立即生效,必須重新啟動監聽器
4. 建立資料庫連線(DATABASE LINK)
建立異類服務資料庫連線和建立普通的資料庫連線沒有任何區別,這裡我就不想贅述了,詳細請參考<
5. 測試資料庫連線
查詢資料
SELECT * FROM “dbo”.”SYS_DB_INFO”@MSOLEDB;
建立同義詞
CREATE SYNONYM L_SYS_DB_INFO FOR “dbo”.”SYS_DB_INFO”@MSOLEDB;
執行儲存過程
exec check_money@TGSQLSERVER(par1,par2)
利用DBMS_HS_PASSTHROUGH包直接傳送SQL.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/95530/viewspace-813479/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 異構資料庫訪問資料庫
- 靜默安裝資料庫介質和建立資料庫資料庫
- 異構資料庫之間資料作業資料庫
- 資料倉儲之拉鍊表
- Oracle異地資料庫恢復Oracle資料庫
- RMAN 異機複製資料庫資料庫
- 資料泵實現資料遷移到異地庫
- 讀資料質量管理:資料可靠性與資料質量問題解決之道07異常檢測
- 配置ORACLE資料庫到達夢資料庫的異構DBLINKOracle資料庫
- 資料庫學習優質站點資料庫
- 資料庫異常hang住解決資料庫
- 資料庫異機冷備恢復資料庫
- 不同資料庫SQL語法差異資料庫SQL
- 摩杜雲資料庫MySQL,破解異構資料庫遷移難題資料庫MySql
- mssql資料庫異地進行異地備份的方法SQL資料庫
- 資料倉儲之拉鍊表設計
- 【YashanDB知識庫】資料庫審計shutdown immediate操作導致資料庫異常退出資料庫
- 讀資料質量管理:資料可靠性與資料質量問題解決之道08擴充套件異常檢測套件
- 資料庫異常智慧分析與診斷資料庫
- 資料庫連線異常故障報告資料庫
- 資料庫連線異常處理思路資料庫
- 使用RMAN遷移資料庫到異機資料庫
- 比較兩個資料庫的差異資料庫
- 今晚遷移資料庫異常順利資料庫
- 保證資料庫質量安全:從0開始的資料庫測試資料庫
- 臨時表在Oracle資料庫與SQL Server資料庫中的異同Oracle資料庫SQLServer
- DataIntegrityViolationException異常:java利用mymatis連線資料庫異常AIExceptionJava資料庫
- MapReduce之----往hbase資料庫寫入資料時, 出現資料異常資料庫
- 資料庫和資料湖的關鍵概念性差異資料庫
- SQLServer 異構資料庫之間資料的匯入匯出SQLServer資料庫
- RAC資料庫的RMAN備份異機恢復到單節點資料庫資料庫
- 資料倉儲之拉鍊演算法(轉)演算法
- 資料庫建表-表中列的性質資料庫
- 用.NET完成Lotus與異質系統的資料互動 (轉)
- 異構資料庫間批量表快速複製資料庫
- 執行jivejdon報資料庫URL “NULL”異常資料庫Null
- 資料庫異常崩潰的元凶--OOM killer資料庫OOM
- oracle 9I 資料庫異機恢復( Catalog 庫 )Oracle資料庫