Oracle高級複製

Oracle高級複製

在開始之前,需要簡單說明一下,目前公司有幾個項目都採用Oracle作爲數據庫平臺,並且有的項目使用到了Oracle的數據庫複製技術,其中也遇到了一些問題,因此在這裏,我對Oracle的複製技術談一下我個人的理解,希望能夠對採用Oracle數據庫的項目組有所幫助。其中在文中使用到的SQL腳本都是經過檢驗可以運行的。

首先簡單介紹和數據庫複製有關的基本概念,然後探討Oracle數據複製技術中的幾個重要模型,最後介紹Oracle的數據複製管理器以及如何利用它來配置和維護複製環境。

在文章的開頭,我想首先簡單談一下複製的基本概念,也就是什麼是複製?複製簡單地說就是在由兩個或者多個數據庫系統構成的一個分佈式數據庫環境中拷貝數據的過程。Oracle高級複製,也稱爲對稱複製,第一次是在Oracle

7.1.6版本中出現的,在這之前的Oracle版本中,Oracle數據複製方法僅有隻讀快照形式的基本複製一種方法。隨着Oracle版本的每一次升級,數據複製的功能、管理以及速度等方面都得到了很大的改進和完善。目前,由於對分佈式數據環境需求的不斷增長,越來越多的應用提出了數據複製的需求。

1.基本概念

1. 分佈式數據庫技術

分佈式數據庫技術是目前我們經常提及的分佈式計算的一個重要組成部分,該技術允許數據在多個服務器端共享。採用分佈式數據庫技術,一個本地服務器可以存取不同物理地點的遠程服務器上的數據;也可以使所有的服務器均可以持有數據的拷貝/複製,這樣分佈式系統中的所有服務器均可進行本地存取。

設計一個分佈式計算解決方案首先需要考慮的問題就是應用的完整性、複雜性、性能和可用性以及響應時間等,同時還需要考慮的是對於不同的應用需求是採用實時存取遠程數據還是採用延遲存取遠程數據。這對於數據複製來講就是採取實時更新複製方案還是延遲數據複製方案。

2. 同步和異步的概念

同步分發數據庫技術是一種實時遠程存取和實時更新數據的技術。這種技術可以保證應用的完整性降低了應用的複雜性,但是如果系統存在網絡存取速度很慢這樣的問題,相應響應時間就會很慢。

異步分發數據庫技術是一種延遲遠程存取和延遲傳播對數據更新的技術。這種技術具有很高的可用性和很短的響應時間。相比同步分發數據庫技術就顯得複雜一些,爲了確保應用的完整性需要仔細考慮和設計。

對於實際的商業問題,必須權衡這兩種技術的利弊最終選擇最佳的解決方案,有些問題選用同步技術比較適合,也有一些問題採用異步技術是比較好的解決方案,還有一些問題必須綜合這兩種技術。

3. 複製的概念

複製,顧名思義就是將數據庫中的數據拷貝到不同物理地點的數據庫中以支持分佈式應用,它是整個分佈式計算解決方案的一個重要組成部分。上面介紹了同步和異步的概念,這裏針對複製也存在同步複製和異步複製的問題。

同步複製,複製數據在任何時間在任何複製節點均保持一致。如果複製環境中的任何一個節點的複製數據發生了更新操作,這種變化會立刻反映到其他所有的複製節點。這種技術適用於那些對於實時性要求較高的商業應用中。

異步複製,所有複製節點的數據在一定時間內是不同步的。如果複製環境中的其中的一個節點的複製數據發生了更新操作,這種改變將在不同的事務中被傳播和應用到其他所有複製節點。這些不同的事務間可以間隔幾秒,幾分種,幾小時,也可以是幾天之後。複製節點之間的數據臨時是不同步的,但傳播最終將保證所有複製節點間的數據一致。

4. 更新衝突

在異步複製環境中,對於所有應用最關鍵的就是要確保數據的一致性。我們來看下面這種情況會有什麼後果發生呢?在同一時間對同一個表的同一行數據的同一列在兩個不同的地點作更新。這種情況就會發生稱之爲更新衝突的錯誤。爲保證數據的一致性,更新衝突必須被檢測到並且處理以確保在不同地點的數據元素保持同樣的值。更新衝突可以通過限制"所有權"

到單一節點或者將更新某個特定數據元素的權利限制到某一具體節點的方法來避免。

2.Oracle數據複製應用模型

爲確保實際應用數據的一致性,必須在異步複製應用模型中考慮衝突避免或者衝突檢測和消除的方法。例如,對於一個實際商業應用,首先必須在邏輯上了解該商業應用採取的衝突避免方法和在某個節點有那些數據以及這些數據中那些是可更新的,而那些又是不可更新的。在下面的這一部分中,我們首先將詳細討論兩種常用的衝突避免方法:主站點所有權模型和動態所有權模型。然後,討論共享所有權模型以及這種模型引起的衝突檢測和處理問題,最後,討論針對Fail-over的複製配置,這種複製方案同時考慮了衝突避免和衝突檢測與消除兩種情況。

1. 主站點所有權

主站點所有權,異步複製數據被一個單一節點"所有",這些要複製的數據僅能被該節點更新,其他節點向擁有該數據的主節點訂閱(subscribe)數據,這意味着他們在本地系統上只能夠存取這些複製數據的只讀拷貝。下面是一些這樣的例子。

(1) 決策支持系統(DSS)的聯機事務處理數據的卸載。來自一個或者多個OLTP系統的數據可以被卸載到一個獨立的局部DSS中,用於只讀分析

(2) 中央信息的分發。產品信息,如價格列表等在總部節點上維護,然後將這些信息複製到遠程銷售辦事處的只讀產品目錄系統中

(3) 遠程信息的集中。許多遠程節點上的產品目錄數據複製到總部節點,這裏總部節點只需要有數據只讀的權限

一個主節點擁有一個表的完全所有權,而其他節點只能訂閱這個表的只讀拷貝。也可以是多個主節點擁有同一個表的截然不同子集或者劃分,而另一些節點則訂閱這些子集或者劃分的只讀拷貝。如,一個分佈的產品目錄系統可以讓不同的銷售辦事處擁有一個表的屬於自己的一個"水平"部分,如在客戶(CUSTOMERS)表,

訂單(ORDERS)表和目錄(ITEMS)這些表中含有每個銷售辦事處爲之服務的客戶和產品信息。中心總部節點可以通過訂閱每個辦事處擁有的數據來保持一個完整的所有產品和客戶信息的只讀拷貝。

2. 動態所有權

動態所有權,異步更新將複製數據從一個節點移到另一個節點,而在該過程中,必須保證在同一時刻只有一個特定的節點可以對數據進行更新。一個典型實際應用就是"海關訂單處理系統",訂單處理的典型步驟是,報關→同意→裝運→開單→收單→入帳等。應用模型可以執行其中的任何步驟,但必須保證各個不同模塊的同一個數據應該在一個綜合數據庫中。在該系統中,當且僅當訂單的狀態表明前一個步驟已經完成時,下一個應用模塊纔可以執行更新訂單數據的操作。例如,"裝運"應用模塊僅能在"報關"並且得到"同意"後才能被執行。

(Delphi中的DEMO程序中提供了一個簡化版本演示程序)

通過使用動態所有權複製模型,可以將一個系統分佈在多個節點和數據庫上,也就是說應用模型可以建立在不同的系統上。我們還是來看上面的例子,"報關"和"批准"這兩部分可以運行在一個系統上,"裝運"在另一個系統上,"開單"和"收單"等又可在一個系統上。在這個分佈式系統中,數據可以被複制到不同的節點上,這些節點對複製的數據只要具有隻讀的權限即可。如,利用複製,"報關"節點可以監視已經報關的訂單處理過程。

前面討論的主節點所有權和動態所有權複製模型具有一個共同的特徵:在任何一個給定的時間點,只允許一個節點有更新數據的權利,而其餘節點對於複製的數據拷貝僅有隻讀權限。然而,還存在這樣的情況,允許多個節點可以更新同一個數據,在極端情況下可以是在同一時刻,這就是所說的共享所有權。

3. 共享所有權

共享所有權使用異步複製,這對於主節點和動態所有權模型來講存在一些限制。在共享所有權情況下,整個系統可以存在暫時的不一致,同時必須使用衝突檢測和消除。共享所有權模型相對於前面兩種模型具有一些新的特點。

例如,對於前面我們討論的那個採用具有水平劃分主節點複製方案來的分佈式"訂單處理系統"的例子。採用共享所有權模型,每個銷售辦事處都有庫表中不同的水平劃分,該庫表含有每一個辦事處爲之服務的一些訂單信息和與消費者有關的顧客信息。每一個銷售辦事處只輸入與自己有關的顧客訂單情況,而不管其餘顧客信息。

然而,在實際商業應用中,這個模型不是最佳的選擇。例如,這種情況,一個零售集團在一個大城市中可以有好幾個商場。顧客可能經常去離他們住的最近的那個商場,但是偶爾也可能到其他商場去購物。這時,如果多家商場執行更新同一個顧客和其訂單數據的信息,更新衝突就會發生。所以在這種情況下必須要採用衝突檢測和消除方案。

Oracle高級複製支持同時既考慮衝突避免又考慮衝突檢測和消除的複製模型。Oracle高級複製之所以又稱爲對稱複製,其原因之一就是支持對稱複製模型,也就是可以在任何地方更新,即所有的複製節點都可以進行更新處理。爲了避免衝突,一種方法就是將應用設計爲將更新限制在一些特定的節點。對於共享所有權,Oracle提供了自動衝突檢測和消除方案。

4. 備用數據庫(Fail-Over)

異步複製通過將一個主系統數據複製到另一系統,可以起到對主系統的崩潰提供保護的作用,這也就是所說的Fail-Over系統,如果主系統出現問題,業務依舊可以通過複製數據庫進行。

Oracle高級複製支持這種Fail-Over配置。同時,Oracle也針對Fail-Over提供了另外兩個可選的解決方案:Oracle並行服務器和備用數據庫配置。用戶可以根據吞吐量、可用性、事務損失的可能性和其他一些如數據一致性、方法的侷限性等參考指標來權衡選擇合適的Fail-Over方案。

3.Oracle 高級複製配置

Oracle高級複製即可支持基於整個表的複製也可支持基於部分表的複製兩種複製方案。這兩種複製方案主要是通過Oracle的兩種複製機制來完成的,即多主複製和可更新快照複製,同時還可以將這兩種複製機制結合起來以滿足不斷變化的業務需求。

1. 多主複製

多主複製方案支持全表在各個主節點間的對稱複製,允許所有主節點對主表都有更新操作的權利。任何一個主節點上的複製表的更新都會被傳播並被直接應用到其他所有主表。一個主節點出現問題,不會對其他主節點之間變化的傳播造成影響。

多主複製採用一種稱爲"延遲遠程過程調用(deferred

remote procedure calls

RPCs)"的機制作爲主要的傳播和應用變化的機制。各節點之間變化的傳播,既可以以基於事件的方式立即傳播,也可以在某個特定的時間點,如在網絡空閒時(如晚上)傳播。在傳播變化時,如果其中的一個遠端系統沒有準備好,傳播變化的延遲遠程過程調用(RPCs)就會保存在其本地隊列中,等到系統準備好以後再執行。

2. 可更新快照

Oracle將最早Oracle 7上的只讀快照機制擴展爲一種允許快照可更新的對稱複製機制。快照更新的傳播方式和如何應用到快照主節點採用了和多主複製一樣的延遲遠程過程調用機制。

對於快照的定義,既可以是包含一個主表的完全拷貝,也可以是爲滿足基於值的選擇標準的主表中行的子集。快照在主節點的刷新是按照一定的時間間隔或用戶單獨請求進行的。最後一次刷新後主表的任何變化也同樣被傳播並應用到快照。多個快照的刷新是在一個一致的事務中完成的,這就確保了數據和引用的完整性。

3. 混合配置

可以將多主複製和可更新快照複製結合在一起,構成一種新的混合配置,這種配置可以完成對全表或者子表的複製。例如下面這種應用就是一個典型的混合配置方案,一個系統具有兩個位於不同地理區域的中心節點,這兩個不同的地理區域下面還有一些分支機構,兩個中心節點可以彼此看做是自己的備份節點。採用多主複製方法在兩個中心站點之間複製數據,同時採用只讀或者可更新快照複製方法在每個區域範圍中的主節點之間複製全表或者子表。這種配置的一個顯著好處就是當其中的一箇中心節點發生問題時,這些快照的主節點可以被重新定義到另一個運行良好的中心節點,從而提高了系統的可靠性。

4. 其他複製機制

Oracle除了前面討論的三種複製機制以外,還提供了另外兩種複製機制:過程級複製和同步複製。

(1)

過程級複製:這種複製方案主要應用在存在大量數據更新以及採取批處理方式操作數據時需要複製數據的情況。例如,下面這個應用,一個以年爲單位管理客戶訂單的公司,對於老的訂單數據不再需要在線保存,而需要卸載到某存儲介質中。這時,如果在多個節點間複製每一獨立的行級變化效率將是非常低的。對於這種情況,可以直接在每個複製節點執行一個過程來直接進行這種更新操作。Oracle高級複製提供的分佈式模式管理功能(將在下面詳細討論)可以非常方便地在多個節點上設置和維護過程級複製的遠程過程。

(2) 同步複製:一個採用同步複製方案的表發生變化時,Oracle會確保這種變化能夠成功地作用在本地表和其他節點的複製表,如果失敗則整個事務會被成功回滾。同步複製在網絡的穩定性比較高的情況下是可行的,可以保證複製節點之間的複製數據一直保持同步。

4.Oracle管理工具

很顯然,有效的管理工具對於成功的分佈式應用是非常關鍵的,如果沒有能力去操作它,再專業的複製功能也不能發揮很好的作用。Oracle高級複製提供了幾個功能強大的管理工具,諸如複製目錄,分佈式模式管理以及其他的一些Oracle 複製管理工具。

1. 複製目錄

複製目錄是一個包含定義複製環境原數據的一個單一綜合庫。複製目錄本身也被複制到多個節點以確保高可用性和授權用戶可以簡單地實現本地存取管理。

複製目錄定義了被複制的數據庫對象,複製的節點以及用於複製的機制。數據庫對象有需要複製的庫表和其他一些相關的對象,如索引,視圖,過程,觸發器和同義詞等等。這些原數據是開放的,用戶可以通過標準SQL語句進行檢索和查詢。

2. 分佈式模式管理

Oracle高級複製的分佈式模式管理功能允許在一個控制點就可進行復制環境的定義和改變。對複製環境的任何改變,都將自動複製並且應用這些數據定義語言(DDL)命令到其他複製環境節點,同時也利用數據庫觸發器和複製相關過程自動生成複製所需要的一些支持對象。

分佈式模式管理在一個被稱爲主定義節點的地方進行控制。它自動將DDL推向其他所有主節點並且也允許快照節點"拉"回並且執行這些DDL命令。由於主定義節點使用並且維護着整個複製目錄,該複製目錄本身也被複制到其他節點,所以該主定義節點一旦出現問題,就必須用其他節點來代替。分佈式模式管理可以通過一個圖形用戶界面管理工具(GUI)來配置。

3. Oracle複製管理器

Oracle複製管理器是Oracle提供的一個圖形界面的複製管理工具,通過該工具可以配置,定時和通過一個節點來管理整個的複製環境。該管理工具可以單獨運行也可以在Oracle企業管理器中通過一個applet來激活。

採用Oracle複製管理器,用於複製的對象組可以通過一些鼠標操作非常簡單地定義。複製組可以包含表和其他相關的對象,如觸發器,存儲過程,索引,視圖,同義詞以及序列等。Oracle除了可以複製每個複製組的全部拷貝以外,還可以選擇複製數據的子集。複製組的配置可以在任何時候修改,這種變化將自動應用到其他所有的複製節點。

一旦定義了對象組,可以通過Oracle複製管理器,簡單進行拖拉操作,就可自動部署複製組到一個新的節點。這些快照節點既可以是隻讀的也可以是可更新的。複製節點配置完成以後,用戶可以配置定時以使複製環境中的變化傳播到其他節點,當然也可以選擇採用同步複製。

4. 選擇衝突解決方案

如果選擇採用一種可以在任何地方更新的複製方案,Oracle複製管理器提供了幾個內建的衝突解決方案,諸如"最近時間戳"和"站點優先"等來解決潛在的衝突。對於不同的表可以選擇不同的方法,甚至可以對一個表中的不同列選擇不同的衝突消除方案。用戶對於一些特殊的商業需求也可以創建自己的衝突解決方案。

5. 實時管理

通過Oracle的複製管理器,複製環境中任何地方發生的錯誤均可以非常快速和簡單地分離出來並且改正。通過一個單一的節點,用戶就可以看到每個節點的延遲事務隊列,也可以重新定時或者強制立即執行事務。另外,用戶也可以利用Oracle企業管理器的事件管理功能來對複製環境進行監視,該事件管理器提供了對多個站點間的複製狀態的主動監視功能,另外還提供了可以定義自動改正的選項等。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章