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