數(shù)據(jù)庫的復(fù)制技術(shù),提供了一種機(jī)制,使對某一個站點上數(shù)據(jù)的修改操作能夠傳遞到其他站點,從而保證站點間數(shù)據(jù)的一致性。
復(fù)制:將數(shù)據(jù)庫中的數(shù)據(jù)拷貝到另外一個或多個不同的物理站點上,從而保持源數(shù)據(jù)庫與目標(biāo)數(shù)據(jù)庫中指定數(shù)據(jù)的一致性。
復(fù)制的方法
1. 同步復(fù)制
復(fù)制數(shù)據(jù)在任何時間在任何復(fù)制節(jié)點均保持一致。如果復(fù)制環(huán)境中的任何一個節(jié)點的復(fù)制數(shù)據(jù)發(fā)生了更新操作,這種變化會立刻反映到其他所有的復(fù)制節(jié)點。這種技術(shù)適用于那些對于實時性要求較高的商業(yè)應(yīng)用中。
2. 異步復(fù)制
所有復(fù)制節(jié)點的數(shù)據(jù)在一定時間內(nèi)是不同步的。如果復(fù)制環(huán)境中的其中的一個節(jié)點的復(fù)制數(shù)據(jù)發(fā)生了更新操作,這種改變將在不同的事務(wù)中被傳播和應(yīng)用到其他所有復(fù)制節(jié)點。這些不同的事務(wù)間可以間隔幾秒,幾分種,幾小時,也可以是幾天之后。復(fù)制節(jié)點之間的數(shù)據(jù)臨時是不同步的,但傳播最終將保證所有復(fù)制節(jié)點間的數(shù)據(jù)一致。
復(fù)制的對象
DM6支持以下對象的復(fù)制:
站點:將數(shù)據(jù)服務(wù)器看做一個站點,對其下所有數(shù)據(jù)庫中的表對象進(jìn)行復(fù)制;
數(shù)據(jù)庫:僅對某一個數(shù)據(jù)庫中的表對象進(jìn)行復(fù)制;
模式:僅對某一個數(shù)據(jù)庫中的某一個模式中的表對象進(jìn)行復(fù)制;
表:僅對某一個表對象進(jìn)行復(fù)制;
復(fù)制方式
DM6支持如下的復(fù)制方式:
一對一單向復(fù)制:單一數(shù)據(jù)對象到單一數(shù)據(jù)對象的復(fù)制過程。
例如:數(shù)據(jù)庫服務(wù)器A中的對象向數(shù)據(jù)庫服務(wù)器B中的對象進(jìn)行復(fù)制的過程;
一對多單向復(fù)制:單一數(shù)據(jù)對象到多個數(shù)據(jù)對象的復(fù)制過程。
例如:數(shù)據(jù)庫服務(wù)器A中的對象同時向數(shù)據(jù)庫服務(wù)器B、C、D(甚至更多數(shù)據(jù)庫服務(wù)器)中的對象進(jìn)行復(fù)制的過程;
多對一單向復(fù)制:多個數(shù)據(jù)對象到單一數(shù)據(jù)對象的復(fù)制過程。
例如:數(shù)據(jù)庫服務(wù)器A、B、C(甚至更多數(shù)據(jù)庫服務(wù)器)中的對象同時向數(shù)據(jù)庫服務(wù)器Z中的對象進(jìn)行的復(fù)制過程;
級聯(lián)復(fù)制:多個復(fù)制過程之間形成不交叉的復(fù)制鏈路的復(fù)制過程。
例如:數(shù)據(jù)庫服務(wù)器A中的對象向數(shù)據(jù)庫服務(wù)器B中的對象進(jìn)行復(fù)制,數(shù)據(jù)庫服務(wù)器B中的對象又向數(shù)據(jù)庫服務(wù)器C中的對象進(jìn)行復(fù)制,數(shù)據(jù)庫服務(wù)器C中的對象又向數(shù)據(jù)庫服務(wù)器D中的對象進(jìn)行復(fù)制,依次鏈接下去,形成一個復(fù)制的鏈路。
多主多從復(fù)制:多個服務(wù)器數(shù)據(jù)對象向多個服務(wù)器對象進(jìn)行復(fù)制的過程。
例如:數(shù)據(jù)庫服務(wù)器A中的對象同時向數(shù)據(jù)庫服務(wù)器X、Y、Z中的對象進(jìn)行復(fù)制;數(shù)據(jù)庫服務(wù)器B中對象同時向數(shù)據(jù)庫服務(wù)器X、Z中的對象進(jìn)行復(fù)制;數(shù)據(jù)庫服務(wù)器C中對象同時向數(shù)據(jù)庫服務(wù)器Y、Z中的對象進(jìn)行復(fù)制的過程。該過程有多個復(fù)制的起點,同時存在多個復(fù)制的終點,形成多個主服務(wù)器(復(fù)制的起點)和多個從服務(wù)器(復(fù)制的終點)的復(fù)制過程。
環(huán)形復(fù)制:一種特殊的級聯(lián)復(fù)制。最終形成的復(fù)制鏈路是一個環(huán)形的復(fù)制過程。
例如:數(shù)據(jù)庫服務(wù)器A中的對象向數(shù)據(jù)庫服務(wù)器B中的對象進(jìn)行復(fù)制,數(shù)據(jù)庫服務(wù)器B中對象又向數(shù)據(jù)庫服務(wù)器A中的對象進(jìn)行復(fù)制,這樣就形成了一個最小的環(huán)形復(fù)制鏈路。
對稱復(fù)制:在數(shù)據(jù)庫服務(wù)器A、B之間進(jìn)行復(fù)制的過程,是一種最小的環(huán)形復(fù)制過程。
約束條件
1. 只復(fù)制包含CLUSTER PK約束的表數(shù)據(jù)。
2. 復(fù)制關(guān)系的主表和從表必須分布在不同的服務(wù)器上。
3. 從服務(wù)器的PAGE SIZE必須大于等于主服務(wù)器的PAGE SIZE
DM6復(fù)制實現(xiàn)
下面通過實例介紹一對一表級同步復(fù)制的實現(xiàn)。
約定:
SERVER1:數(shù)據(jù)庫服務(wù)器1,IP為223.254.102.27;
SERVER2:數(shù)據(jù)庫服務(wù)器2,IP為223.254.100.63;
1.參數(shù)配置
在啟動數(shù)據(jù)庫服務(wù)器前,先修改服務(wù)器SERVER1上設(shè)置dm.ini參數(shù),使REPLICATE_MODE = 1,然后啟動主、從數(shù)據(jù)庫服務(wù)器。
2.對象建立
復(fù)制表對象的建立:
以SYSDBA/SYSDBA登錄SERVER1執(zhí)行:
CREATE TABLE TABLE01_S1 (C1 INT CLUSTER PRIMARY KEY,C2 VARCHAR(100)); |
以SYSDBA/SYSDBA登錄SERVER2執(zhí)行:
CREATE TABLE TABLE01_S2 (C1 INT CLUSTER PRIMARY KEY,C2 VARCHAR(100)); |
建立同步復(fù)制關(guān)系
以SYSDBA/SYSDBA登錄SERVER1執(zhí)行:
CALL SP_CREATE_REPLICATE_LOGIN('223.254.100.63',12345,'SYSDBA','SYSDBA'); CALL SP_CREATE_TABLE_REPLICATE('SYSTEM.SYSDBA.TABLE01_S1','SYSTEM.SYSDBA.TABLE01_S2','223.254.100.63','SYNC'); |
通過調(diào)用以上兩個函數(shù),來建立主數(shù)據(jù)庫服務(wù)器對象SYSTEM.SYSDBA.TABLE01_S1向從數(shù)據(jù)庫服務(wù)器對象SYSTEM.SYSDBA.TABLE01_S2進(jìn)行復(fù)制的關(guān)系,只有在建立該復(fù)制關(guān)系后,在主數(shù)據(jù)庫服務(wù)器對象上的操作才會被復(fù)制到從數(shù)據(jù)庫服務(wù)器的對象上。
系統(tǒng)函數(shù)SP_CREATE_REPLICATE_LOGIN,用來建立復(fù)制過程中登錄從服務(wù)器的登錄信息。其參數(shù)分別表示:
s_server: 從服務(wù)器名或IP地址;
s_port: 從服務(wù)器端口號;
s_login: 從服務(wù)器登錄名;
s_password: 從服務(wù)器登錄口令;
系統(tǒng)函數(shù)SP_CREATE_TABLE_REPLICATE,用來建立主數(shù)據(jù)庫服務(wù)器表對象SYSTEM.SYSDBA.TABLE01_S1向從數(shù)據(jù)庫服務(wù)器SYSTEM.SYSDBA.TABLE01_S2進(jìn)行復(fù)制的關(guān)系。建立此關(guān)系后,在主服務(wù)器表對象SYSTEM.SYSDBA.TABLE01_S1才會復(fù)制到從服務(wù)器表對象SYSTEM.SYSDBA.TABLE01_S2中。其參數(shù)分別表示:
m_db_sch_tab: 主服務(wù)器表對象名;
s_db_sch_tab: 從服務(wù)器表對象名;
s_server: 從服務(wù)器名或IP地址;
type: 復(fù)制類型(同步復(fù)制、異步復(fù)制);
3.復(fù)制操作
插入操作:
SYSDBA/SYSDBA登錄SERVER1執(zhí)行:
INSERT INTO TABLE01_S1 VALUES (1,'INSERT ONE ROW'); SELECT * FROM TABLE01_S1; |
預(yù)期結(jié)果:1, INSERT ONE ROW
SYSDBA/SYSDBA登錄SERVER2執(zhí)行:
SELECT * FROM TABLE01_S2; |
預(yù)期結(jié)果:1, INSERT ONE ROW
更新操作:
SYSDBA/SYSDBA登錄SERVER1執(zhí)行:
UPDATE TABLE01_S1 SET C2='UPDATE ONE COL'; SELECT * FROM TABLE01_S1; |
預(yù)期結(jié)果:1, UPDATE ONE COL
SYSDBA/SYSDBA登錄SERVER2執(zhí)行:
SELECT * FROM TABLE01_S2; |
預(yù)期結(jié)果:1, UPDATE ONE COL
刪除操作:
SYSDBA/SYSDBA登錄SERVER1執(zhí)行:
DELETE FROM TABLE01_S1; SELECT * FROM TABLE01_S1; |
預(yù)期結(jié)果:空;
SYSDBA/SYSDBA登錄SERVER2執(zhí)行:
SELECT * FROM TABLE01_S2; |
預(yù)期結(jié)果:空;
新聞熱點
疑難解答