引言
一個(gè)中型或大型公司往往由地理上分散的部門(mén)所組成,這些部門(mén)通常需要進(jìn)行數據共享。針對這些共享數據,可以將其存儲在某個(gè)站點(diǎn)上,需要的用戶(hù)都從這個(gè)站點(diǎn)上存取。這種方案的優(yōu)點(diǎn)是數據的一致性容易保證,但其缺點(diǎn)也是很突出的,那就是該站點(diǎn)的負載大、網(wǎng)絡(luò )負載大,遠程用戶(hù)的數據響應遲緩。數據復制技術(shù)可以有效地解決這個(gè)問(wèn)題,它通過(guò)將這些共享數據復制到位于不同地點(diǎn)的多個(gè)數據庫中,從而實(shí)現數據的本地訪(fǎng)問(wèn),減少了網(wǎng)絡(luò )負荷,并提高了數據訪(fǎng)問(wèn)的性能,而且通過(guò)對數據庫中的數據定期同步(通常是每天晚上),從而確保了所有的用戶(hù)使用同樣的、最新的數據。該技術(shù)適用于用戶(hù)數量較大、地理分布較廣、而且需要實(shí)時(shí)地訪(fǎng)問(wèn)相同數據的應用模式。
數據復制的概念及特點(diǎn)
1、數據復制的概念及分類(lèi)
數據復制,就是將數據庫中的數據拷貝到另外一個(gè)或多個(gè)不同的物理站點(diǎn)上,從而保持源數據庫與目標數據庫中指定數據的一致性。
按照數據復制的實(shí)時(shí)性,數據復制可分為同步數據復制和異步數據復制。同步數據復制是指將本地生產(chǎn)數據以完全同步的方式復制到異地,每一本地IO交易均需等待遠程復制的完成方予以釋放。異步數據復制則是指將本地生產(chǎn)數據以后臺同步的方式復制到異地,每一本地IO交易均正常釋放,無(wú)需等待遠程復制的完成。同步復制實(shí)時(shí)性強,遠端數據與本地數據完全同步。但這種方式受帶寬影響較大,數據傳輸距離較短。異步復制不影響本地交易,傳輸距離長(cháng),但其數據比本地數據略有延遲。在異步復制環(huán)境中,對于所有應用最關(guān)鍵的就是要確保數據的一致性。
按照復制站點(diǎn)的類(lèi)型,數據復制可分為多主控站點(diǎn)復制、物化視圖復制及混合復制。多主控站點(diǎn)復制也稱(chēng)為對等站點(diǎn)復制,其中每個(gè)站點(diǎn)都是主控站點(diǎn),都需要與其他站點(diǎn)進(jìn)行信息交流,各站點(diǎn)之間是平等的。物化視圖復制包含一個(gè)主控站點(diǎn)、一個(gè)或多個(gè)物化視圖站點(diǎn),
物化視圖中的內容可以為目標主對象在某個(gè)時(shí)間點(diǎn)的全部拷貝或部分拷貝,其中目標主對象既可以是主控站點(diǎn)上的表也可以是物化視圖站點(diǎn)上的主物化視圖?;旌蠌椭瓢鄠€(gè)主控站點(diǎn)和多個(gè)物化視圖站點(diǎn),是主控站點(diǎn)復制和物化視圖復制的結合體,適合于復雜的業(yè)務(wù)情況。
2、數據復制的特點(diǎn)
數據復制通過(guò)在多個(gè)站點(diǎn)上建立備份,能夠提高數據的安全性,同時(shí)也提高了數據的可用性,這是因為如果一個(gè)站點(diǎn)出現了問(wèn)題,用戶(hù)可以選擇其他站點(diǎn)繼續進(jìn)行操作,應用系統還可繼續運行,從而數據復制提供了容錯保護機制。
然而數據復制最基本的功能是提高數據庫的性能。它通過(guò)將遠程數據庫中的數據復制到本地,使得應用能夠就近訪(fǎng)問(wèn)數據,從而降低網(wǎng)絡(luò )傳輸負載,提高效率。而且在數據復制系統中,可以提供多個(gè)站點(diǎn)之間的負載平衡,讓這幾個(gè)用戶(hù)使用這個(gè)服務(wù)器,另外幾個(gè)用戶(hù)可以
使用其他的服務(wù)器,以避免某些站點(diǎn)負載過(guò)重。
物化視圖還提供了按子集進(jìn)行復制,這樣各站點(diǎn)就可只復制自己需要的數據,也能減輕網(wǎng)絡(luò )的傳輸量。
數據復制的實(shí)現方法
在具體的實(shí)現之前,首先要做好設計與規劃。這就需要細致分析具體的業(yè)務(wù)情況,設計出一套能夠滿(mǎn)足業(yè)務(wù)需要的方案。通常在設計過(guò)程中,需要確定出要建立的數據庫站點(diǎn),各站點(diǎn)的類(lèi)型,需要復制的數據對象,以及同步方式、沖突解決方案等內容。
在設計完成之后,就可具體來(lái)實(shí)現數據復制,數據復制實(shí)現過(guò)程如下圖所示:

從圖中可以看出,數據復制的實(shí)現主要包括以下幾步:
(1)創(chuàng )建復制站點(diǎn)
(2)創(chuàng )建組對象
(3)配置沖突解決方案
下面我們舉一個(gè)例子來(lái)說(shuō)明各步具體需要完成的工作。在這個(gè)例子中我們采用多主控站點(diǎn)復制方式,設有兩個(gè)主控站點(diǎn)和兩個(gè)共享數據表。兩個(gè)主控站點(diǎn)分別為:處理站點(diǎn)(cl.world)和解釋站點(diǎn)(js.wo rld);兩個(gè)數據表為測區( survey)和測線(xiàn)( line)。
STEP1 創(chuàng )建復制站點(diǎn)
(1)首先以SYSTEM身份登陸主站點(diǎn)數據庫cl.worldCONNECT system/manager@cl.world
(2)創(chuàng )建用戶(hù)—復制管理員,并為該用戶(hù)授權復制管理員負責復制站點(diǎn)的創(chuàng )建和管理,每個(gè)復制站點(diǎn)都必須創(chuàng )建復制管理員:
CREATE USER repadmin IDENTIFIED BY repadmin;
BEGIN
DBMS_REPCAT_ADMIN.GRANT_ADMIN_ANY_SCHEMA (username => ’repadmin’);
END; BEGIN
DBMS_DEFER_SYS.REGISTER_PROPAGATOR (username => ’repadmin’);
END; BEGIN
DBMS_REPCAT_ADMIN.REGISTER_USER_REPGROUP (
username => ’repadmin’,
privilege_type => ’receiver’,
list_of_gnames => NULL);
END; CONNECT repadmin/repadmin@cl.world
BEGIN
DBMS_DEFER_SYS.SCHEDULE_PURGE (
next_date => SYSDATE,
interval => ’SYSDATE + 1/24’,
delay_seconds => 0);
END;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; 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;CONNECT repadmin/repadmin@cl.world
BEGIN
DBMS_REPCAT.CREATE_MASTER_REPGROUP (
gname => ’inte_repg’);
END; BEGIN
DBMS_REPCAT.CREATE_MASTER_REPOBJECT (
gname => ’inte_repg’,
type => ’TABLE’,
oname => ’survey’,
sname => ’integration’,
use_existing_object => TRUE,
copy_rows => FALSE);
END;BEGIN
DBMS_REPCAT.ADD_MASTER_DATABASE (
gname => ’inte_repg’,
master => ’js.world’,
use_existing_objects => TRUE,
copy_rows => FALSE,
propagation_mode => ’ASYNCHRONOUS’);
END; BEGIN
DBMS_REPCAT.GENERATE_REPLICATION_SUPPORT (
sname => ’integration’,
oname => ’survey’,
type => ’TABLE’,
min_communication => TRUE);
END;BEGIN
DBMS_REPCAT.RESUME_MASTER_ACTIVITY (
gname => ’inte_repg’);
END;聯(lián)系客服