標籤:
異構的資料來源同Oracle Database做互動原理。
圖1
是一張Oracle 異構串連處理的架構圖,其中我們可以看到主要的非資料來源模組包括有HS(Heterogeneous Service), Agent. 還有一個遠端資料庫,我們假設它是異構的資料來源。
可以看到,Oracle是不能直接同這些異構資料來源作互動,Oracle是需要通過Heterogeneous Services協同Agent才能和異構資料來源作資料互動。
Heterogeneous Services Component
HS是Oracle Database的一個組件,它用於同Non-Oracle System作資料互動。
HS的作用:它告訴Agent它要同異構資料來源作互動,並且讓他知道,它要什麼資料,什麼樣的資料,如何處理資料(如類型,方法等)。
HS主要包含兩個模組:
A. 事務服務(Transaction Service)
Transaction Service使異構資料來源儘可能的整合進Oracle資料庫伺服器裡的 事務和會話中。 所以當你訪問一個異構資料來源的時候,你使用Oracle 使用者當前的會話來通過資料庫連接(Database Link)在異構資料來源建立相應的認證會話(訪問異構資料來源的認證資訊由使用者提供或者Database Link已經指定)。同樣,當使用者關閉了當前Oracle的Session(會話),那麼異構資料來源上的相應會話也隨之關閉。 Oracle 另外支援Oracle分布式的訪問異構資料來源的事務。
B. 結構化查詢語言 (SQL)服務服務(SQL Service)
SQL Service用於處理所有的SQL相關的操作,包括有:
a) 使Oracle內部SQL相關的調用 映射成 HS 驅動的API. 這些會一次被驅動映射到異構資料來源的用戶端API.
b) 翻譯SQL語句。把Oracle的SQL語句翻譯成相關的異構資料來源的SQL語句。
c) 翻譯通過引用Oracle data dictionary的相關表的查詢語句,使之變成可以從異構資料來源的data dictionary裡擷取所需資訊的查詢語句
d) 轉換異構資料來源和Oracle資料庫之間的資料類型
e) 彌補在異構資料來源中不存在的函數方法等,使之變成多條產需語句來擷取相應的結果。
HS的組件裡有很多常見的編碼,並且它被配置用於同很多不同的異構資料來源一起協同工作。每個gateway都有這些配置資訊,並且存在在相應的驅動模組中(Driver module). 這些資訊會在HS和Gateway/Agent的串連建立後馬上被上傳到Oracle伺服器。這些配置資訊包括有:
a) Data Dictionary Translation Views
資料字典轉換視圖是以視圖的方式存在於異構資料來源的資料字典表裡。它協助HS像引用Oracle的Data dictionary表一樣來飲用異構資料來源的資料字典。
b) Heterogeneous Services Initialization Parameters
HS初始化參數主要提供兩個方面的功能:
1) 提供一個良好的調節gateway的手段,使gateway和HS組件的效能和記憶體的使用得到最佳化。
2) 配置異構資料來源的資訊. 例如配置了多少個異構資料來源,它們都運行了什麼語言,都有哪些屬性。
相關當前會話的這些參數的設定資訊,我們可以通過查詢表V$HS_PARAMETER來得到。可以在gateway的初始設定檔案裡進行設定更改。
c) Capabilities
功能性就是告訴HS異構資料來源中有哪些類型的SQL語句不支援,如何轉換映射這些SQL運算式到異構資料來源裡。
HS Data Dictionary
上面我們提到,配置資訊。配置資訊會在HS和Agent建立串連後,馬上被Agent上傳到HS 組件。那麼上傳後,它們都被儲存與HS Data Dictionary表中。並且直到Agent的變化,這些資訊才會被相應的覆蓋,修改。
下面我們講解下這些Data Dictionary的相關資訊:
使用HS,可以從同一個Oracle資料庫訪問多個異構資料來源,如所示:
圖2
兩個Agent都會把配置資訊上傳上去,各自存在到HS Data Dictionary table中.
那麼這些資訊是怎麼歸納起來的?HS把這些資訊按兩個層次來分:
a) Class
Class 是按照相互關聯類型的產品來分。例如Sybase database systems, SQL Server databases system各分到一類裡面。
b) Instance
執行個體是基於class來定義的。例如SQL Server資料庫這個class裡面有多個執行個體。
所以一個class被多個特定的instance所共用。所以假設oracle資料庫要訪問5個SQL Server的執行個體和2個MySQL的執行個體,那麼Oracle資料庫就需要兩個class定義來訪問他們。一個用於定義SQL Server,一個用於定義MySQL.同樣,在這兩個class中分別定義了5個和2個instance的定義。 同時這裡需要注意,instance 層的容量和資料字典的資訊都是會話資訊,所以它們不能存在在oracle資料庫中的HS資料字典中。但是,instance的初始化參數可以存在在資料庫中。在HS的資料字典視圖(Data Dictionary views)中都包含了一下資訊:
n 被上傳到Oracle data dictionary的instances和classes的名稱
n 功能性,包括為每個class和instance定義的SQL 事務
n 為每個class和instance定義的資料字典轉化關係
n 為每個class和instance定義的初始化參數
這些視圖又主要被分成三大類:
n 常規視圖
n Transaction Service 視圖
n SQL Service 視圖
Agent Component
Agent Component包括:
A. Agent Generic Code
Agent Generic Code用於在異構資料來源上執行資料操作或者檢索.它負責接收命令,執行命令,擷取執行結果。
B. Driver
Driver是Agent Generic Code和命令執行地互動的橋樑。沒有它,Agent Generic Code就不能和異構資料來源互動。
Agent Generic Code好比一個要到河對岸辦事的人,Driver就好比到對岸的交通工具,例如 橋。
從圖1中,我們可能會想到Agent是否可以單獨放在某個環境中?當然是可以的,
a) 它可以和異構資料來源安裝在同一台電腦上
b) 它可以同Oracle安裝在同一台電腦上
c) 它可以同Oracle和異構資料來源都分離開而安裝在單獨的一台電腦上
Oracle 為Agent提供了很多類型,因為不同的資料庫廠商所使用的標準不一樣,這些Agent通過Oracle產品主要封裝在以下兩種產品中:
A. Oracle Database
在Oracle Database中,預設安裝的是ODBC Agent.用於同當前系統的ODBC來做互動。從而由系統來負責Driver. 相應的Agent Generic Code是dg4odbc.exe ,這個程式可以在ORACLE_HOME/bin目錄下找到.
B. Oracle Database Gateways
由Oracle Database Gateways產品來選擇性的安裝針對於不同資料庫產品的Agent(Agent Generic Code, Driver).所以Driver也和Oracle Database Gateways安裝的時候一起安裝。例如,你安裝了Gateway for MS SQL Server的組件,那麼你可以在ORACLE_HOME/bin檔案下找到Agent Generic Code : dg4msql.exe, 在ORACLE_HOME/dg4msql檔案夾裡找到相關的Agent的Driver,在該檔案下同樣存放在一些配置相關的dg4msql的設定檔。
我們來整體看一下HS和Gateway是如何系統工作的:
圖3
(1) 用戶端從Oracle Database請求資料。使用者發送的是Oracle標準的SQL語句,在Oracle資料庫上建立了一個Session。
(2) HS和Gateway協同工作,HS把Oracle的SQL語句轉換成non-Oracle資料庫可以正確啟動並執行語句。
a) HS和Gateway建立串連
b) HS擷取相關的non-Oracle System的配置資訊,如它是什麼類型的資料庫產品(SQL Server或者MySql , Sybase)等等屬性
c) HS通過Data Dictionary View來識別該non-Oracle system的功能特徵等各項屬性,相應的轉化Oracle標準的SQL語句成non-Oracle system相容的語句
(3) Oracle資料庫把轉換後的SQL語句通過Oracle Net發送到Gateway。
(4) Gateway使用相關的使用者名稱密碼登陸到non-Oracle system,建立串連,執行SQL語句。
a) HS通過Gateway與Non-Oracle System建立串連,建立臨時的Database Link.
b) Gateway使用Database Link指定的使用者名稱及其密碼登陸non-Oracle system
c) Gateway登陸成功則建立Gateway與non-Oracle System之間的會話,並且Database Link Open
d) Gateway把SQL語句通過建立的會話發送給non-oracle system執行
(5) Non-Oracle System返回運行SQL語句後的結果給Gateway。
(6) Gateway翻譯/格式化返回的結果使其能被Oracle資料庫的所相容。
(7) 把Gateway執行後的結果通過Oracle Net Service返回給Oracle資料庫。
(8) Oracle資料庫伺服器通過Oracle Net把結果返回給用戶端。並且資料庫的database link一直開啟這,直到gateway的會話結束或者database link顯式的關閉它。
在上述步驟中,第(2)步,Gateway通過本地的配置來調用相關的HS服務程式和驅動與異構資料來源作互動。例如:
a) 在配置initXXX.ora的時候,裡面填寫的主要是異構資料來源的Address資訊,如 主機名稱/地址,連接埠,執行個體名稱,資料庫等等資訊。
b) 在配置listener.ora的時候,裡面就記錄了需要使用什麼Agent Generic Code程式,需要通過什麼使用到驅動。比如訪問MS SQL Server,需要用到的Agent Generic Code程式是dg4msql, 驅動在Oracle_Gateway_Home\dg4msql\driver\lib檔案夾下。(如果Gateway安裝在Windows下,預設不需要指定Driver的路徑)
Oracle HS (Heterogeneous Services)深入解析 及協同Gateway工作流程(轉)