GoldenGate使用Obey指令碼同步資料
GoldenGate使用Obey指令碼同步資料
一、需求
Windows伺服器:
IP: 10.0.30.135
sys使用者建表
SQL> create table scott.test_table1
(
id varchar2(10) primary key,
name varchar2(20)
);
Linux伺服器:
IP: 192.168.6.135
sys使用者建表
SQL> create table haishu.test_table1
(
id varchar2(10) primary key,
username varchar2(20)
);
要求實現Windows下的scott.test_table1和Linux下的haishu.test_table2之間的資料同步。注意這裡使用者不同,表名不同,欄位名一個相同另一個不相同。
二、配置檔案和引數檔案
1 Windows伺服器
檔名 |
存放路徑 |
GLOBAL.txt |
F:\app\Administrator\ogg |
addcmds.txt |
F:\app\Administrator\ogg\dirprm |
defgen.prm |
F:\app\Administrator\ogg\dirprm |
initext.prm |
F:\app\Administrator\ogg\dirprm |
mgr.prm |
F:\app\Administrator\ogg\dirprm |
ext_o_01.prm |
F:\app\Administrator\ogg\dirprm |
pum_o_01.prm |
F:\app\Administrator\ogg\dirprm |
rep_n_01.prm |
F:\app\Administrator\ogg\dirprm |
注:ext_o_01和pum_o_01中的o代表old,表示本機Windows中的資料庫是老庫。rep_n_01中的n代表複製新庫的資料到本機。
GLOBAL.txt
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint
addcmds.txt
--login
DBLOGIN USERID ogg, PASSWORD oracle
--create a CHECKPOINTTABLE
ADD CHECKPOINTTABLE ogg.checkpoint
--ADD TRANDATA scott.test_table1
--create a Extract group
ADD EXTRACT ext_o_01, TRANLOG, BEGIN NOW
ADD EXTTRAIL F:\app\Administrator\ogg\dirdat\o1, EXTRACT ext_o_01
--create a data pump group
ADD EXTRACT pum_o_01, EXTTRAILSOURCE F:\app\Administrator\ogg\dirdat\o1, BEGIN now
ADD RMTTRAIL ./dirdat/o1, EXTRACT pum_o_01
--create a Replicat group
ADD REPLICAT rep_n_01, EXTTRAIL F:\app\Administrator\ogg\dirdat\n1, CHECKPOINTTABLE ogg.checkpoint
最後一步中的F:\app\Administrator\ogg\dirdat\n1檔案是從Linux伺服器遠端投遞過來的。
defgen.prm
DEFSFILE F:\app\Administrator\ogg\dirdef\rep_old.def
USERID ogg, PASSWORD oracle
TABLE scott.test_table1;
DEFSFILE參數列示所要生成的資料定義檔案。
initext.prm
SOURCEISTABLE
USERID ogg, PASSWORD oracle
RMTHOST 192.168.6.135, MGRPORT 7809
RMTFILE /u01/ogg/dirdat/init_01, MEGABYTES 2, PURGE
TABLE scott.test_table1;
這個引數檔案暫時不用。
mgr.prm
PORT 7809
DYNAMICPORTLIST 7810-7830
STARTUPVALIDATIONDELAYCSECS 10
PURGEOLDEXTRACTS F:\app\Administrator\ogg\dirdat\o1*, USECHECKPOINTS, MINKEEPHOURS 4, MINKEEPFILES 4
ext_o_01.prm
EXTRACT ext_o_01
USERID ogg, PASSWORD oracle
EXTTRAIL F:\app\Administrator\ogg\dirdat\o1
DISCARDFILE F:\app\Administrator\ogg\discard\ext_o_01_discard.txt, PURGE, MEGABYTES 200
TRANLOGOPTIONS EXCLUDEUSER ogg
TABLE scott.test_table1;
pum_o_01.prm
EXTRACT pum_o_01
USERID ogg, PASSWORD oracle
RMTHOST 192.168.6.135, MGRPORT 7809
RMTTRAIL ./dirdat/o1
TABLE scott.test_table1;
rep_n_01.prm
REPLICAT rep_n_01
USERID ogg, PASSWORD oracle
DISCARDFILE F:\app\Administrator\ogg\dirdat\rep_n_01_discard.txt, PURGE, MEGABYTES 200
SOURCEDEFS F:\app\Administrator\ogg\dirdef\rep_new.def
MAP haishu.test_table2, TARGET scott.test_table1,
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),
COLMAP
(
id=id,
name=username
);
注1:SOURCEDEFS表示源機器的資料結構定義檔案。對於複製程式來說,是要從別的機器複製東西過來,所以源機器自然就是遠端Linux伺服器,目標機器則是本機。rep_new.def是從遠端Windows機器複製過來的,不是本機生成的。
MAP haishu.test_table2, TARGET scott.test_table1, 表示從haishu.test_table2中(透過一些程式)複製資料到scott.test_table1中。
name=username,左邊的name表示本機test_table1中的欄位,右邊的username表示rep_new.def中的欄位,即遠端Linux伺服器中的欄位。
注2:如果把SOURCEDEFS ./dirdef/rep_old.def換成assumetargetdefs,則colmap中兩邊的欄位都要寫成本機中的欄位,即:
REPLICAT rep_n_01
USERID ogg, PASSWORD oracle
DISCARDFILE F:\app\Administrator\ogg\discard\rep_n_01_discard.txt, PURGE, MEGABYTES 200
ASSUMETARGETDEFS
MAP haishu.test_table2, TARGET scott.test_table1,
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, OVERWRITE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),
COLMAP
(
id=id,
name=name
);
2 Linux伺服器
檔名 |
存放路徑 |
GLOBAL |
/u01/ogg |
addcmds.txt |
/u01/ogg/dirprm |
defgen.prm |
/u01/ogg/dirprm |
initrep.prm |
/u01/ogg/dirprm |
mgr.prm |
/u01/ogg/dirprm |
ext_n_01.prm |
/u01/ogg/dirprm |
pum_n_01.prm |
/u01/ogg/dirprm |
rep_o_01.prm |
/u01/ogg/dirprm |
注:ext_n_01和pum_n_01中的n代表new,表示本機Linux中的資料庫是新庫。rep_o_01中的o代表old,表示程式的作用是複製Windows老庫中的資料。
GLOBAL
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint
addcmds.txt
--login
DBLOGIN USERID ogg, PASSWORD oracle
--create a CHECKPOINTTABLE
--ADD TRANDATA haishu.test_table2
ADD CHECKPOINTTABLE ogg.checkpoint
--create a Extract group
ADD EXTRACT ext_n_01, TRANLOG, BEGIN now
ADD EXTTRAIL ./dirdat/n1, EXTRACT ext_n_01
--create a data pump group
ADD EXTRACT pum_n_01, EXTTRAILSOURCE ./dirdat/n1, BEGIN now
ADD RMTTRAIL F:\app\Administrator\ogg\dirdat\n1, EXTRACT pum_n_01
--create a Replicat group
ADD REPLICAT rep_o_01, EXTTRAIL ./dirdat/o1, CHECKPOINTTABLE ogg.checkpoint
defgen.prm
DEFSFILE ./dirdef/rep_new.def
USERID ogg, PASSWORD oracle
TABLE haishu.test_table2;
DEFSFILE參數列示所要生成的資料定義檔案。
initrep.prm
SPECIALRUN
END RUNTIME
USERID ogg, PASSWORD oracle
EXTFILE /u01/ogg/dirdat/init_01
TRAILCHARSET windows-936
GROUPTRANSOPS 5000
SOURCEDEFS ./dirdef/rep_old.def
MAP scott.test_table1, TARGET haishu.test_table2,
COLMAP
(
id=userid,
name=username
);
此引數檔案暫時不用。
mgr.prm
PORT 7809
DYNAMICPORTLIST 7810-7830
STARTUPVALIDATIONDELAYCSECS 10
PURGEOLDEXTRACTS /u01/ogg/dirdat/n1*, USECHECKPOINTS, MINKEEPHOURS 4, MINKEEPFILES 4
ext_n_01.prm
EXTRACT ext_n_01
USERID ogg, PASSWORD oracle
EXTTRAIL ./dirdat/n1
DISCARDFILE /u01/ogg/dirdat/ext_n_01_discard.txt, PURGE, MEGABYTES 200
TRANLOGOPTIONS EXCLUDEUSER ogg
TABLE haishu.test_table2;
pum_n_01.prm
EXTRACT pum_n_01
USERID ogg, PASSWORD oracle
RMTHOST 10.0.30.135, MGRPORT 7809
RMTTRAIL F:\app\Administrator\ogg\dirdat\n1
TABLE haishu.test_table2;
rep_o_01.prm
REPLICAT rep_o_01
USERID ogg, PASSWORD oracle
DISCARDFILE /u01/ogg/discard/rep_o_01_discard.txt, PURGE, MEGABYTES 200
SOURCEDEFS ./dirdef/rep_old.def
MAP scott.test_table1, TARGET haishu.test_table2,
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE)),
COLMAP
(
id=id,
username=name
);
注1:SOURCEDEFS表示源機器的資料結構定義檔案。對於複製程式來說,是要從別的機器複製東西過來,所以源機器自然就是遠端Windows伺服器,目標機器則是本機。rep_old.def是從遠端Windows機器複製過來的,不是本機生成的。
MAP scott.test_table1, TARGET haishu.test_table2, 表示從scott.test_table1中透過程式複製資料到haishu.test_table2中。
username=name,左邊的username表示本機haishu.test_table1中的欄位,右邊的name表示rep_old.def中的欄位,即遠端Linux伺服器中的欄位。
注2:如果把SOURCEDEFS ./dirdef/rep_old.def換成assumetargetdefs,則colmap中兩邊的欄位都要寫成本機中的欄位,即:
REPLICAT rep_o_01
USERID ogg, PASSWORD oracle
DISCARDFILE /u01/ogg/dirdat/rep_o_01_discard.txt, PURGE, MEGABYTES 200
ASSUMETARGETDEFS
MAP scott.test_table1,TARGET haishu.test_table2,
RESOLVECONFLICT (UPDATEROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (INSERTROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWEXISTS, (DEFAULT, IGNORE)),
RESOLVECONFLICT (UPDATEROWMISSING, (DEFAULT, IGNORE)),
RESOLVECONFLICT (DELETEROWMISSING, (DEFAULT, IGNORE))
COLMAP
(
id=id,
username=username
);
三、資料雙向複製
1 捕獲資料結構定義並傳到對方機器
1)捕獲Windows下的老庫表結構定義並複製到Linux下的相應位置
假如老庫與新庫相關表結構不完全一致,需要用命令生成結構定義檔案,並將該檔案複製到新庫。
在命令提示符下執行並生成結構定義檔案(rep_old.def):
F:\app\Administrator\ogg> defgen paramfile F:\app\Administrator\ogg\dirprm\defgen.prm
將生成的檔案(F:\app\Administrator\ogg\dirdef\rep_old.def)用FileZilla工具或ftp傳到目標庫相應位置(/u01/ogg/dirdef/)。
2)捕獲Linux下的新庫表結構定義並複製到Windows下的相應位置
假如新庫與老庫相關表結構不完全一致,需要用命令生成結構定義檔案,並將該檔案複製到老庫。
在命令提示符下執行並生成結構定義檔案(rep_new.def):
/u01/ogg> ./defgen paramfile /u01/ogg/dirprm/defgen.prm
將生成的檔案(/u01/ogg/dirdef/rep_new.def)用FileZilla工具或ftp傳到目標庫相應位置(F:\app\Administrator\ogg\dirdef\)。
2 執行obey指令碼
老庫:
GGSCI (John-PC) 1> obey .\dirprm\addcmds.txt
新庫:
GGSCI (localhost) 1> obey ./dirprm/addcmds.txt
3 啟動老庫和新庫程式並進行資料初始化
啟動老庫管理程式:
GGSCI (John-PC) 1> DBLOGIN USERID ogg, PASSWORD oracle
GGSCI (John-PC) 2> START MANAGER
啟動新庫管理程式:
GGSCI (localhost) 1> DBLOGIN USERID ogg, PASSWORD oracle
GGSCI (localhost) 2> START MANAGER
老庫開啟提取程式(ext_o_01)和投遞程式(pum_o_01):
GGSCI (John-PC) 1> START EXTRACT ext_o_01
GGSCI (John-PC) 2> START EXTRACT pum_o_01
新庫開啟複製程式:
GGSCI (localhost) 1> START REPLICAT rep_o_01
新庫開啟提取程式(ext_n_01)和投遞程式(pum_n_01):
GGSCI (localhost) 1> START EXTRACT ext_n_01
GGSCI (localhost) 2> START EXTRACT pum_n_01
老庫開啟複製程式:
GGSCI (WIN-2008) 1> START REPLICAT rep_n_01
4 檢視老庫和新庫程式
老庫:
GGSCI (John-PC) 1> INFO ALL
新庫:
GGSCI (localhost) 1> INFO ALL
5 測試
(1)老庫插入資料
SQL> insert into scott.test_table1 values('001', 'scott-A');
SQL> commit;
SQL> select * from scott.test_table1;
新庫中檢驗
SQL> select * from haishu.test_table2;
ID USERNAME
---------- --------------------
001 scott-A
(2)新庫中插入資料
SQL> insert into haishu.test_table2 values('002', 'haishu-A');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from haishu.test_table2;
ID USERNAME
---------- --------------------
002 haishu-A
001 scott-A
老庫中檢驗
SQL> select * from scott.test_table1;
(3)老庫中刪除資料
SQL> delete from scott.test_table1 where name='haishu-A';
SQL> commit;
SQL> select * from scott.test_table1;
新庫中檢驗
SQL> select * from haishu.test_table2;
ID USERNAME
---------- --------------------
001 scott-A
(4)新庫中刪除資料
SQL> delete from haishu.test_table2;
1 row deleted.
SQL> commit;
Commit complete.
SQL> select * from haishu.test_table2;
no rows selected
老庫中檢驗
SQL> select * from scott.test_table1;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29485627/viewspace-1769950/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle Dataguard + Goldengate資料同步OracleGo
- oracle資料庫配置goldengate同步Oracle資料庫Go
- 使用goldengate從mysql同步資料到oracleGoMySqlOracle
- 配置GoldenGate增量資料同步機制Go
- 使用nrpe監控Goldengate程式指令碼Go指令碼
- goldengate同步資料的同步速度測試記錄Go
- 使用ajax指令碼取資料指令碼
- 【GoldenGate】Oracle GoldenGate(四) 壓力測試同步百萬行資料GoOracle
- 使用GoldenGate 實現Oracle for Oracle 單向資料同步(實現表的DML操作同步)GoOracle
- 使用shell 指令碼備份資料指令碼
- Oracle GoldenGate資料同步備份軟體概述OracleGo
- Oracle GoldenGate系統之----單向同步資料表OracleGo
- Oracle GoldenGate系統之----雙向同步資料表OracleGo
- GoldenGate實現oracle和sqlserver雙向資料同步GoOracleSQLServer
- goldengate同步中更改資料表結構維護Go
- Goldengate for nrpe監控指令碼Go指令碼
- Python rsync 伺服器之間資料夾同步指令碼Python伺服器指令碼
- Oracle GoldenGate系統之----單向同步資料表(續)OracleGo
- oracle資料庫使用rman備份指令碼Oracle資料庫指令碼
- 使用rsync同步資料
- Oracle GoldenGate 資料同步初始化最佳實戰(Data Pump)OracleGo
- 【HIVE】hive 使用shell指令碼跑歷史資料Hive指令碼
- 巧用shell指令碼分析資料庫使用者指令碼資料庫
- 【GoldenGate】Oracle GoldenGate(三) DDL同步配置GoOracle
- [資料整合/資料同步] 基於資料庫增量日誌的資料同步方案 : Flink CDC/Debezium/DataX/Canal/Oracle Goldengate/Kettle/Sqoop資料庫OracleGoOOP
- 大資料叢集服務啟停指令碼/常用埠/時間同步大資料指令碼
- mysql dump 拉取遠端資料同步到本地庫的shell 指令碼MySql指令碼
- 資料遷移指令碼指令碼
- 使用 RMAN 同步資料庫資料庫
- hadoop_批量命令指令碼&同步檔案指令碼Hadoop指令碼
- GoldenGate12.2從DataGuard備庫同步資料到其他Oracle資料庫GoOracle資料庫
- 【GoldenGate】Oracle GoldenGate(二) 雙向同步配置GoOracle
- asp.net使用母版頁中使用ajax指令碼取資料ASP.NET指令碼
- 使用儲存指令碼還原恢復資料庫指令碼資料庫
- Linux 時間同步指令碼Linux指令碼
- 每日同步環境SHELL指令碼指令碼
- 使用goldengate交付指定時間前的資料Go
- 異構資料來源同步之資料同步 → DataX 使用細節