詳解 Oracle 分散式系統資料複製技術

tonywi888發表於2007-05-14

一箇中型或大型公司往往由地理上分散的部門所組成,這些部門通常需要進行資料共享。針對這些共享資料,可以將其儲存在某個站點上,需要的使用者都從這個站點上存取。這種方案的優點是資料的一致性容易保證,但其缺點也是很突出的,那就是該站點的負載大、網路負載大,遠端使用者的資料響應遲緩。資料複製技術可以有效地解決這個問題,它透過將這些共享資料複製到位於不同地點的多個資料庫中,從而實現資料的本地訪問,減少了網路負荷,並提高了資料訪問的效能,而且透過對資料庫中的資料定期同步(通常是每天晚上),從而確保了所有的使用者使用同樣的、最新的資料。該技術適用於使用者數量較大、地理分佈較廣、而且需要實時地訪問相同資料的應用模式。

資料複製的概念及特點

1、資料複製的概念及分類:

資料複製,就是將資料庫中的資料複製到另外一個或多個不同的物理站點上,從而保持源資料庫與目標資料庫中指定資料的一致性。

按照資料複製的實時性,資料複製可分為同步資料複製和非同步資料複製。同步資料複製是指將本地生產資料以完全同步的方式複製到異地,每一本地IO交易均需等待遠端複製的完成方予以釋放。非同步資料複製則是指將本地生產資料以後臺同步的方式複製到異地,每一本地IO交易均正常釋放,無需等待遠端複製的完成。同步複製實時性強,遠端資料與本地資料完全同步。但這種方式受頻寬影響較大,資料傳輸距離較短。非同步複製不影響本地交易,傳輸距離長,但其資料比本地資料略有延遲。在非同步複製環境中,對於所有應用最關鍵的就是要確保資料的一致性。

按照複製站點的型別,資料複製可分為多主控站點複製、物化檢視複製及混合複製。多主控站點複製也稱為對等站點複製,其中每個站點都是主控站點,都需要與其他站點進行資訊交流,各站點之間是平等的。物化檢視複製包含一個主控站點、一個或多個物化檢視站點,

物化檢視中的內容可以為目標主物件在某個時間點的全部複製或部分複製,其中目標主物件既可以是主控站點上的表也可以是物化檢視站點上的主物化檢視。混合複製包含多個主控站點和多個物化檢視站點,是主控站點複製和物化檢視複製的結合體,適合於複雜的業務情況。

2、資料複製的特點:

資料複製透過在多個站點上建立備份,能夠提高資料的安全性,同時也提高了資料的可用性,這是因為如果一個站點出現了問題,使用者可以選擇其他站點繼續進行操作,應用系統還可繼續執行,從而資料複製提供了容錯保護機制。

然而資料複製最基本的功能是提高資料庫的效能。它透過將遠端資料庫中的資料複製到本地,使得應用能夠就近訪問資料,從而降低網路傳輸負載,提高效率。而且在資料複製系統中,可以提供多個站點之間的負載平衡,讓這幾個使用者使用這個伺服器,另外幾個使用者可以使用其他的伺服器,以避免某些站點負載過重。

物化檢視還提供了按子集進行復制,這樣各站點就可只複製自己需要的資料,也能減輕網路的傳輸量。

資料複製的實現方法

在具體的實現之前,首先要做好設計與規劃。這就需要細緻分析具體的業務情況,設計出一套能夠滿足業務需要的方案。通常在設計過程中,需要確定出要建立的資料庫站點,各站點的型別,需要複製的資料物件,以及同步方式、衝突解決方案等內容。

在設計完成之後,就可具體來實現資料複製,資料複製的實現主要包括以下幾步:

(1)建立複製站點;

(2)建立組物件;

(3)配置衝突解決方案。

下面我們舉一個例子來說明各步具體需要完成的工作。在這個例子中我們採用多主控站點複製方式,設有兩個主控站點和兩個共享資料表。兩個主控站點分別為:處理站點(cl.world)和解釋站點(js.wo rld);兩個資料表為測區( survey)和測線( line)。

STEP1 建立複製站點:

(1)首先以SYSTEM身份登陸主站點資料庫cl.worldCONNECT system/manager@cl.world;

(2)建立使用者—複製管理員,併為該使用者授權複製管理員負責複製站點的建立和管理,每個複製站點都必須建立複製管理員以下為引用的內容:

 CREATE USER repadmin IDENTIFIED BY repadmin; 
BEGIN 
 DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’); 
END;

(3)為本站點指定傳播者(傳播者負責將本地最新更新的資料傳播到其他站點上):

BEGIN 
 DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’); 
END;

(4)為本站點指定接收者(接收者負責接收其他站點上的傳播者傳送過來的資料):

BEGIN 
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP ( 
 username => ’repadmin’, 
 privilege_type => ’receiver’, 
 list_of_gnames => NULL); 
END;

(5)確定清除時間:

為了使傳送過來事務佇列不致過大,需要將成功載入的事務從事物佇列裡清除掉,這裡設定每小時清除一次:

CONNECT repadmin/repadmin@cl.world 
BEGIN 
 DBMS_DEFER_SYS.SCHEDULE_PURGE ( 
next_date => SYSDATE, 
interval => ’SYSDATE + 1/24’, 
delay_seconds => 0); 
END;

在建立好站點cl.world後,以同樣的方法建立站點js. world。

(6)建立各主控站點之間的排程連結:

建立各主控站點之間的排程連結需要先在各主控站點間建立資料庫連結,之後為每個資料庫連結定義排程時間。

首先,在處理站點上建立與解釋站點的資料庫連結,這裡需要先建立一個公用資料庫連結,供其他私有資料庫連結來使用。

以下為引用的內容:

CONNECT SYSTEM/MANAGER@cl.world 
CREATE PUBLIC DATABASE LINK js.world USING ’js.world’; 
CONNECT repadmin/repadmin@cl.world 
CREATE DATABASE LINK js.world CONNECT TO repadmin 
IDENTIFIED BY repadmin;

同樣,在解釋站點上建立與處理站點的資料庫連結。

以下為引用的內容:

CONNECT SYSTEM/MANAGER@js.world 
CREATE PUBLIC DATABASE LINK cl.world USING ’cl.world’; 
CONNECT repadmin/repadmin@js.world 
CREATE DATABASE LINK cl.world CONNECT TO repadmin 
IDENTIFIED BY repadmin;

排程連結確定本站點上的事務向其他站點傳送的頻度,下面的程式碼為10分鐘一次:

以下為引用的內容:

CONNECT repadmin/repadmin@cl.world 
BEGIN 
DBMS_DEFER_SYS.SCHEDULE_PUSH ( 
destination => ’js.world’, 
interval => ’SYSDATE + (1/144)’, 
next_date => SYSDATE, 
parallelism => 1, 
execution_seconds => 1500, 
delay_seconds => 1200); 
END;

在解釋站點上做相同的工作STEP2 建立主控組在複製環境中,Oracle用組來管理複製物件。透過將相關的複製物件放在一個組裡,從而方便對大量資料物件的管理。

這裡我們假設使用者模式integr ation 在處理站點和解釋站點都已存在,而且表測區(survey )和測線(line)也已經建立。

(1)建立主控組物件 以下為引用的內容:

CONNECT repadmin/repadmin@cl.world 
BEGIN 
DBMS_REPCAT.CREATE_MASTER_REPGROUP ( 
gname => ’inte_repg’); 
END;
 

(2)向主控組中新增資料物件,將測區表survey加入到組inte_repg中以下為引用的內容:

BEGIN 
DBMS_REPCAT.CREATE_MASTER_REPOBJECT ( 
gname => ’inte_repg’, 
type => ’TABLE’, 
oname => ’survey’, 
sname => ’integration’, 
use_existing_object => TRUE, 
copy_rows => FALSE); 
END;
以同樣的方法將測線表line加入到組inte_repg中。

(3)在主控組中新增其他參與複製的站點,資料庫之間的同步方式在此指定以下為引用的內容:

BEGIN 
DBMS_REPCAT.ADD_MASTER_DATABASE ( 
gname => ’inte_repg’, 
master => ’js.world’, 
use_existing_objects => TRUE, 
copy_rows => FALSE, 
propagation_mode => ’ASYNCHRONOUS’); 
END;

(4)如果可能出現衝突,則需要配置衝突解決方案。

(5)為每個物件生成複製支援,以下為引用的內容:

BEGIN 
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT ( 
sname => ’integration’, 
oname => ’survey’, 
type => ’TABLE’, 
min_communication => TRUE); 
END;
測線表line也一樣。

(6)重新開始複製以下為引用的內容:

BEGIN 
DBMS_REPCAT.RESUME_MASTER_ACTIVITY ( 
gname => ’inte_repg’); 
END;

以同樣的方式設定解釋站點。設定成功後,資料複製過程就宣告完畢,庫中的資料就可進行復制。

資料複製中衝突的解決方案

在複製環境中,儘管在資料庫和應用程式設計過程中,會盡量避免各站點間衝突的發生,但完全避免衝突的可能性還是比較小的,那麼一旦衝突發生,就需要一個按照具體業務規則的衝突解決機制,來使得各站點的資料保持一致。

首先需要分析哪些物件容易出現衝突。通常來說,靜態的資料變化少,衝突出現的可能性也小;而有些資料變化非常大,衝突出現的可能性也大。確定了衝突易發的物件後,需要確定怎樣解決衝突,比如在各站點之間建立優先次序,在資料不一致時,以某個站點上的為準;或以某個站點上最新的修改為準。

Oracle提供了多中衝突解決方案,具體包括:針對更新衝突的方案、針對唯一性衝突的方案、針對刪除衝突的方案。除了這些方案以外,使用者還可以自定義衝突解決方法。每種方案都有自己的適用情況,那麼我們需要根據具體的業務來選擇合適的衝突解決方案。

結束語

本文詳細介紹了分散式系統Oracle中的資料複製技術,在具體應用中,還有許多比較複雜的問題需要解決,比如主控組中如果包含迴圈依賴的表或自相關的表時如何處理;如何利用模版機制來建立物化檢視站點;如何對資料複製環境進行管理與維護。這些問題需要在實際應用中逐步探索,深入研究。

[@more@]

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

相關文章