來 羽
(鄭州廣播電視大學(xué),鄭州 450007)
數(shù)據(jù)復(fù)制是指將數(shù)據(jù)庫中的數(shù)據(jù)拷貝到另外一個或多個不同的物理站點上,從而保持源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫中指定數(shù)據(jù)的一致性。
按照數(shù)據(jù)復(fù)制的實時性,數(shù)據(jù)復(fù)制可分為同步數(shù)據(jù)復(fù)制和異步數(shù)據(jù)復(fù)制。同步數(shù)據(jù)復(fù)制是指將本地生產(chǎn)數(shù)據(jù)以完全同步的方式復(fù)制到異地,每一本地 IO交易均需等待遠程復(fù)制的完成方予以釋放。異步數(shù)據(jù)復(fù)制則是指將本地生產(chǎn)數(shù)據(jù)以后臺同步的方式復(fù)制到異地,每一本地 IO交易均正常釋放,無需等待遠程復(fù)制的完成。
數(shù)據(jù)復(fù)制通過在多個站點上建立備份,能夠提高數(shù)據(jù)的安全性,同時也提高了數(shù)據(jù)的可用性,這是因為如果一個站點出現(xiàn)了問題,用戶可以選擇其他站點繼續(xù)進行操作,應(yīng)用系統(tǒng)還可繼續(xù)運行,從而數(shù)據(jù)復(fù)制提供了容錯保護機制。
然而數(shù)據(jù)復(fù)制最基本的功能是提高數(shù)據(jù)庫的性能。它通過將遠程數(shù)據(jù)庫中的數(shù)據(jù)復(fù)制到本地,使得應(yīng)用能夠就近訪問數(shù)據(jù),從而降低網(wǎng)絡(luò)傳輸負載,提高效率。而且在數(shù)據(jù)復(fù)制系統(tǒng)中,可以提供多個站點之間的負載平衡,讓這幾個用戶使用這個服務(wù)器,另外幾個用戶可以使用其他的服務(wù)器,以避免某些站點負載過重。
物化視圖還提供了按子集進行復(fù)制,這樣各站點就可只復(fù)制自己需要的數(shù)據(jù),也能減輕網(wǎng)絡(luò)的傳輸量。
在具體的實現(xiàn)之前,需要做好設(shè)計與規(guī)劃。這就需要細致分析具體的業(yè)務(wù)情況,設(shè)計出一套能夠滿足業(yè)務(wù)需要的方案。通常在設(shè)計過程中,需要確定出要建立的數(shù)據(jù)庫站點,各站點的類型,需要復(fù)制的數(shù)據(jù)對象,以及同步方式、沖突解決方案等內(nèi)容。
在設(shè)計完成之后,就可具體來實現(xiàn)數(shù)據(jù)復(fù)制,數(shù)據(jù)復(fù)制的實現(xiàn)主要包括以下幾步:
1.創(chuàng)建復(fù)制站點;
2.創(chuàng)建組對象;
3.配置沖突解決方案。
下面我們舉一個例子來說明各步具體需要完成的工作。在這個例子中我們采用多主控站點復(fù)制方式,設(shè)有兩個主控站點和兩個共享數(shù)據(jù)表。兩個主控站點分別為:處理站點(cl.world)和解釋站點 (js.wo rld);兩個數(shù)據(jù)表為測區(qū) (survey)和測線 (line)。
STEP1創(chuàng)建復(fù)制站點
(1)首先以 SYSTEM身份登陸主站點數(shù)據(jù)庫 cl.world CONNECT system/manager@cl.world。
(2)創(chuàng)建用戶 -復(fù)制管理員,并為該用戶授權(quán)復(fù)制管理員負責(zé)復(fù)制站點的創(chuàng)建和管理,每個復(fù)制站點都必須創(chuàng)建復(fù)制管理員。
(3)為本站點指定傳播者
傳播者負責(zé)將本地最新更新的數(shù)據(jù)傳播到其他站點上:
BEG IN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR(username= >‘repadmin’);
END。
(4)為本站點指定接收者
接收者負責(zé)接收其他站點上的傳播者傳送過來的數(shù)據(jù):
BEG IN
username= >‘repadmin’,
privilege_type= >‘receiver’,
list_of_gnames=>NULL;
END。
(5)確定清除時間
為了使傳送過來事務(wù)隊列不致過大,需要將成功加載的事務(wù)從事物隊列里清除掉,這里設(shè)定每小時清除一次。
CONNECT repadmin/repadmin@cl.world
BEG IN
DBMS_DEFER_SYS.SCHEDULE_PURGE(
next_date=>SYSDATE,
interval= >‘SYSDATE+1/24’,
delay_seconds=>0);
END。
(6)創(chuàng)建各主控站點之間的調(diào)度鏈接
創(chuàng)建各主控站點之間的調(diào)度鏈接需要先在各主控站點間建立數(shù)據(jù)庫鏈接,之后為每個數(shù)據(jù)庫鏈接定義調(diào)度時間。
首先,在處理站點上建立與解釋站點的數(shù)據(jù)庫鏈接,這里需要先建立一個公用數(shù)據(jù)庫鏈接,供其他私有數(shù)據(jù)庫鏈接來使用。
同樣,在解釋站點上建立與處理站點的數(shù)據(jù)庫鏈接
以下為引用的內(nèi)容:
CONNECT SYSTEM/MANAGER@js.world
CREATE PUBL IC DATABASEL INK cl.world US ING‘cl.world’;
CONNECT repadmin/repadmin@js.world
CREATE DATABASE L INK cl.world CONNECT TO repadmin
DENTIFIED BY repadmin。
在解釋站點上做相同的工作 STEP2創(chuàng)建主控組在復(fù)制環(huán)境中,Oracle用組來管理復(fù)制對象。通過將相關(guān)的復(fù)制對象放在一個組里,從而方便對大量數(shù)據(jù)對象的管理。
這里我們假設(shè)用戶模式 integr ation在處理站點和解釋站點都已存在,而且表測區(qū) (survey)和測線 (line)也已經(jīng)創(chuàng)建。
(1)創(chuàng)建主控組對象
CONNECT repadmin/repadmin@cl.world
BEG IN
DBMS_REPCAT.CREATE_MASTER_REPGROUP(
gname= >‘inte_repg’);
END。
(2)向主控組中添加數(shù)據(jù)對象,將測區(qū)表 survey加入到組inte_repg中
BEG IN
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)在主控組中添加其他參與復(fù)制的站點,數(shù)據(jù)庫之間的同步方式在此指定
BEG IN
DBMS_REPCAT.ADD_MASTER_DATABASE(
gname= >‘inte_repg’,
master= >‘js.world’,
use_existing_objects=>TRUE,
copy_rows=>FALSE,
propagation_mode= >‘ASYNCHRONOUS’);
END。
(4)如果可能出現(xiàn)沖突,則需要配置沖突解決方案。沖突解決方案將在后面介紹。
(5)為每個對象生成復(fù)制支持
設(shè)置成功后,數(shù)據(jù)復(fù)制過程就宣告完畢,庫中的數(shù)據(jù)就可進行復(fù)制。
在復(fù)制環(huán)境中,盡管在數(shù)據(jù)庫和應(yīng)用程序設(shè)計過程中,會盡量避免各站點間沖突的發(fā)生,但完全避免沖突的可能性還是比較小的,那么一旦沖突發(fā)生,就需要一個按照具體業(yè)務(wù)規(guī)則的沖突解決機制,來使得各站點的數(shù)據(jù)保持一致。首先需要分析哪些對象容易出現(xiàn)沖突。通常來說,靜態(tài)的數(shù)據(jù)變化少,沖突出現(xiàn)的可能性也小;而有些數(shù)據(jù)變化非常大,沖突出現(xiàn)的可能性也大。確定了沖突易發(fā)的對象后,需要確定怎樣解決沖突,比如在各站點之間建立優(yōu)先次序,在數(shù)據(jù)不一致時,以某個站點上的為準(zhǔn);或以某個站點上最新的修改為準(zhǔn)。Oracle提供了多種沖突解決方案,具體包括:針對更新沖突的方案、針對唯一性沖突的方案、針對刪除沖突的方案。除了這些方案以外,用戶還可以自定義沖突解決方法。每種方案都有自己的適用情況,那么我們需要根據(jù)具體的業(yè)務(wù)來選擇合適的沖突解決方案。
[1]王瑛.Oracle數(shù)據(jù)庫基礎(chǔ)教程 [M].北京:人民郵電出版社,2008.
[2]劉甫迎,王道學(xué),黨晉蓉.數(shù)據(jù)庫原理及應(yīng)用 [M].北京:清華大學(xué)出版社,2004.
[3]格里沃爾德.Oracle高級編程 [M].北京:清華大學(xué)出版社,2007.
[4]劉國.數(shù)據(jù)庫技術(shù)基礎(chǔ)及應(yīng)用[M].2版.北京:電子工業(yè)出版社,2008.