DB2與Oracle資料庫之間遠程複製

一、背景
db2 聯合資料庫是分散式資料庫管理的特殊形式。在聯合資料庫系統中,可以通過一個 sql 命令來發出對多個數據源的命令請求。db2 與非 db2 資料庫之間進行複製之前,首先需要保證非 db2 數據源可以被 db2 ese version 8 federated database訪問。對於db2 replication version 8 所需的聯合資料庫功能可以在現有發布的 db2 ese version 8 和 db2 connect enterprise edition version 8 中提供。

"sql複製"又稱為"db2複製",是為 db2 開發的兩種數據複製類型中的一種,它是通過 sql 進行的複製。在這裡簡單提一下,db2 複製中的另一種"q複製"是通過 websphere mq 訊息佇列進行的。在進行 sql 複製時,capture 程式讀取 db2 恢復日誌以獲取對指定源表的更改。該程式將更改保存到傳輸表格中,也稱作變化數據表(changed data table),apply 程式並行讀取更改並套用於目標事務,見圖1。




圖1:sql複製的結構

websphere ii 全球信息集成複製,通過不同資料庫之間的複製,有效的利用了數據資源,為提高效率提供了良好的平台。

db2 與非 db2 資料庫之間的複製需要用到 websphere ii。本文力爭通過複製實例讓讀者對不同資料庫之間的複製有一個整體的概念。

二、動機

商業上出於很多原因使用複製,可以歸納為:

分散:把數據分散到各個位置;
整合:把其他位置的數據聯合起來;
交換:與其他位置進行雙向的數據交換;
靈活套用:對上面提到的方式進行一些改變或者結合。

聯合 (federated) 資料庫系統的誕生,利用了現有的數據資源,把不同商業資料庫軟體的數據整合到一起,很大程度的提高了數據利用率。聯合資料庫可以用一個sql語句對分布在不同地點的多種數據源發出請求。聯合資料庫系統可以把本地表和遠程數據源聯接起來,就像數據都在本地一樣,並且可以通過對數據源進行分布請求來提高數據源處理能力,還可以通過在聯合伺服器處理部分分布請求來補充數據源的 sql 限制。

聯合資料庫具有兩個與其他套用伺服器不同的特點:

聯合伺服器可以被配置為接收全部或接收部分針對數據源的請求。聯合伺服器把這些請求分散到數據源。
與其他套用伺服器一樣,一個聯合伺服器用 drda 通信協定(例如 sna 和 tcp/ip)與 db2 家族實例通信。然而,與其他套用伺服器不同的是,與非 db2 家族實例通信時用其他協定。

圖2描述了聯合資料庫系統的設定流程:


圖2:聯合資料庫系統的設定流程


websphere ii 包括兩種包裝器(wrapper),一種為關係型包裝器,負責db2 udb, informix, oracle, microsoft sql server, sybase, odbc, ole db 等數據的複製。另一種為非關係型包裝器,負責 flatfile, excel, xml 等非關係型數據的複製。

包裝器定義了一個負責本地資料庫與遠程資料庫通信的庫。包裝器執行很多任務,比如:它可以連線到數據源,包裝器套用了數據源的標準連線api。它還可以給數據源提交請求。聯合資料庫系統可以操作遠程聯合系統的表。遠程表在本地聯合資料庫中虛擬存在,客戶應用程式可以操作這些虛擬表,但是它們真正存在於遠端資料庫中。每個遠程虛擬資料庫,把聯合資料庫當作資料庫客戶端,他們只對資料庫客戶端的請求有回應。因此聯合資料庫需要下載各種遠程資料庫的客戶端。
一個聯合系統的構造,需要一個作為聯合伺服器的 db2 實例,一個作為聯合資料庫的資料庫,一個或多個數據源,和可以存取資料庫和數據源的客戶(用戶和套用)。如果要完成遠程不同資料庫之間的複製,還需要套用db2的數據複製功能。

ibm db2 複製(在一些平台上被稱為數據傳播)是一個從一個位置到另一個位置複製 db2 和/或其他資料庫廠商數據的強大的,靈活的工具。ibm的複製支持數據轉換,數據連線和過濾數據。可以在不同的平台之間搬運數據,也可以把數據分散到不同的地點或從分散的地方把數據聚合到一個地方。可以在不同的系統之間交換數據。

ibm複製由四個主要部分組成:管理 (administrator),capture,apply,警報監視器 (alert monitor)。

管理的部分主要通過複製中心的圖形界面來實現。通過複製中心可以定義複製源,定義從數據源到目標數據的地圖。它也用來管理和監控本地和遠程的 capture 和 apply 進程。從圖3中可以看出複製中心圖形界面對其他幾個部分的支持關係。


圖3:複製中心的套用


在源數據伺服器上運行的 capture 程式可以獲取 db2 源數據表中的變化。db2 的源數據伺服器可以為 db2 在 z/os, os/390 上的版本 6,7和8,也可以是 iseries 在 os/400 v5r2,或 db2 在 windows, unix 系統中的版本 8。當定義數據源的時候會自動生成相應的觸發器 (triggers),可以用來捕獲數據源的變化。要複製的數據可以在 capture 進程中通過選擇列來進行過濾。被捕獲的更改信息首先存放到本地的源數據所在的資料庫的表中並且當更改套用到目標數據中之後會自動刪除。

當對源表進行改動時,db2 把相關的記錄寫入日誌。這些日誌服務於資料庫發現和複製。capture 程式通過資料庫自動連線並獲取日誌記錄。每個源表都有相應的 cd (change data) 表來獲取數據的變化。當定義一個複製數據源時,複製中心自動生成 cd 表。

對於 apply 部分,捕獲的改變通過 apply 程式套用到目標表中。apply 程式可以在任何伺服器上運行並且必須對所用到的源伺服器和目標伺服器都有連通性。數據可以通過列,行進行過濾,可以進行合併(例如通過視圖),也可以在 apply 過程中通過 sql 表達式進行傳送。db2 與其他相關的數據間進行複製的時候,必須通過聯合資料庫系統來進行暱稱的創建。在本地機器上需要安裝關係型包裝器和非關係型包裝器。對於本例中db2<->oracle之間的複製,需要安裝關係型包裝器。見圖4。

圖4:進行遠程複製關係圖



報警監視器用來進行對capture和apply部分的錯誤監控。