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