GoldenGate 雙向復制解決方案
1 雙向復制方案簡介
在雙向復制(Bidirectional)方案中,可以采用以下兩種部署方式:
方式一:配置源和目標數據庫可以同時保持Active 狀態,同時進行應用系統的事務處理,
此時需由應用系統進行控制,避免對同一記錄進行處理產生的沖突。
方式二:配置源為Active,目標為Standing-by,在源出現故障時,切換到目標數據庫。
在源端和目標端都需要配置Extract 和Replicat 來實現雙向復制。在雙向復制方案中最重要的避免循環,即在由源數據庫向目標端插入數據的時候,不應該再產生Trail(CDC 數據),否則將進入一個死循環。GoldenGate 采用排除同步時用戶的方式來實現雙向復制。
2 雙向復制方案實現過程
在雙向復制的過程中,每個數據庫既是源數據庫又是目標數據庫,為便於理解,在下面的描述中,我們將左面的數據庫稱為“源數據庫”,右面的數據庫稱為“目標數據庫”。
2.1 同步表說明
本文以“TCUSTMER”表作為同步的數據庫表。建表腳本如下:
CREATE TABLE tcustmer
(
cust_code VARCHAR2(4),
name VARCHAR2(30),
city VARCHAR2(20),
state CHAR(2),
PRIMARY KEY (cust_code)
USING INDEX
);
2.2 用戶配置
2.2.1 同步用戶
該用戶用於在GoldenGate 中將源數據庫中的數據同步到目標數據庫,該用戶必須能夠訪問源數據庫用戶和目標數據庫用戶下面的所有數據。
本文中以“gg_bi”作為同步用戶。
2.2.2 源數據庫用戶
本文中以“gg_src”作為源數據庫用戶。
2.2.3 目標數據庫用戶
本文中以“gg_tgt”作為目標數據庫用戶。
2.3 源數據庫端配置
2.3.1 增加Extract
GGSCI > ADD EXTRACT EXTBI, TRANLOG, BEGIN NOW, THREADS 1
EXTRACT added.
GGSCI > EDIT PARAMS EXTBI
EXTRACT EXTBI
USERID gg_bi, PASSWORD gg_bi ――該用戶為同步用戶
TRANLOGOPTIONS EXCLUDEUSER gg_bi ――將同步用戶進行排除,避免循
環
RMTHOST <TARGET HOST>, MGRPORT 10002
RMTTRAIL ./dirdat/bi
TABLE gg_src.TCUSTMER; ――這裏為實際要同步的用戶及其數據庫表
GGSCI > ADD RMTTRAIL ./dirdat/bi, EXTRACT EXTBI,MEGABYTES 5
GGSCI > START EXTRACT EXTBI
2.3.2 增加Replicat
下面是增加Check Point,如果已經配置檢查點,則不用再次執行
GGSCI> EDIT PARAMS ./GLOBALS
增加下面一行
CHECKPOINTTABLE gg_src.ggschkpt
GGSCI> EXIT ――重新登錄以激活global 參數
Shell> ggsci
GGSCI> DBLOGIN USERID gg_src, PASSWORD gg_src
GGSCI> ADD CHECKPOINTTABLE
GGSCI > ADD REPLICAT REPBI, EXTTRAIL ./dirdat/bi
REPLICAT added.
GGSCI > EDIT PARAM REPBI
REPLICAT REPBI
USERID gg_bi, PASSWORD gg_bi ――該用戶為同步用戶
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/REPBI.DSC, PURGE
MAP gg_tgt.tcustmer, TARGET gg_src.tcustmer;
GGSCI > START REPLICAT REPBI
2.3.3 檢查啟動狀態
查看Extract 和Replicat 狀態,確保都正常運行
GGSCI > info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXTBI 00:00:00 00:00:09
REPLICAT RUNNING REPBI 00:00:00 00:00:04
2.4 目標數據庫配置
2.4.1 增加Extract
GGSCI > ADD EXTRACT EXTBI, TRANLOG, BEGIN NOW, THREADS 1
EXTRACT added.
GGSCI > EDIT PARAMS EXTBI
EXTRACT EXTBI
USERID gg_bi, PASSWORD gg_bi ――該用戶為同步用戶
TRANLOGOPTIONS EXCLUDEUSER gg_bi ――將同步用戶進行排除,避免循
環
RMTHOST <SOURCE HOST>, MGRPORT 10001
RMTTRAIL ./dirdat/bi
TABLE gg_tgt.TCUSTMER;
GGSCI > ADD RMTTRAIL ./dirdat/bi, EXTRACT EXTBI,MEGABYTES 5
GGSCI > START EXTRACT EXTBI
2.4.2 增加Replicat
建立Check Point,同上,這裏省略。
GGSCI > ADD REPLICAT REPBI, EXTTRAIL ./dirdat/bi
REPLICAT added.
GGSCI > EDIT PARAM REPBI
REPLICAT REPBI
USERID gg_bi, PASSWORD gg_bi ――該用戶為同步用戶
HANDLECOLLISIONS
ASSUMETARGETDEFS
DISCARDFILE ./dirrpt/REPBI.DSC, PURGE
MAP gg_src.tcustmer, TARGET gg_tgt.tcustmer;
GGSCI > START REPLICAT REPBI
2.4.3 檢查啟動狀態
查看Extract 和Replicat 狀態,確保都正常運行
GGSCI > info all
Program Status Group Lag Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING EXTBI 00:00:00 00:00:03
REPLICAT RUNNING REPBI 00:00:00 00:00:01
3 測試
以gg_src 登錄源數據庫,執行insert 操作:
INSERT INTO tcustmer VALUES(‘WILL‘,‘BG SOFTWARE CO.‘,‘SEATTLE‘,‘WA‘);
以gg_tgt 登錄目標數據庫,執行insert 操作:
INSERT INTO tcustmer VALUES(‘JANE‘,‘ROCKY FLYER INC.‘,‘DENVER‘,‘CO‘);
在源數據庫和目標數據庫查看tcustomer 表,都應該包含新插入的兩條記錄。
在源數據庫和目標數據庫進行其它操作測試,測試後源數據庫和目標數據庫數據應保持一致。
GoldenGate 雙向復制解決方案