经过前面两次试验:
Oracle GoldenGate 19.1 oracle数据库同步(一):Linux下的安装调测
Oracle GoldenGate 19.1 oracle数据库同步(二):数据初始化
已经可以同步数据基础数据了,下面开始做增量DML及DDL增量同步测试。
一、源端:补充日志信息
GGSCI (eoms01) 1> dblogin userid goldengate,password goldengate
GGSCI (eoms01 as goldengate@eoms1) 2> add trandata nxsoft_yg.*
注:add trandata 对于插入是没有影响的,update和delete是有影响。
二、源端和目标端配置OGG检查点
GGSCI (eoms01 as goldengate@eoms1) 2> EDIT PARAMS ./GLOBALS
CHECKPOINTTABLE goldengate.ggschkpt
GGSCI (eoms01) 1> dblogin userid goldengate,password goldengate
Successfully logged into database.
GGSCI (eoms01 as goldengate@eoms1) 2>
GGSCI (eoms01 as goldengate@eoms1) 2> ADD CHECKPOINTTABLE goldengate.ggschkpt
Successfully created checkpoint table goldengate.ggschkpt.
这时,可以在库上看一下goldengate.ggschkpt整个表已经创建。
三、源端配置抽取与传送进程
mgr主进程配置(前面应配置过):
GGSCI (eoms01) 1> edit param mgr
PORT 7809
DYNAMICPORTLIST 7809-8000
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3
ACCESSRULE, PROG *, IPADDR 192.168.*.*, ALLOW
~
配置源端抽取进程ext01:
EXTRACT ext01
userid goldengate,password goldengate
GETUPDATEBEFORES
GETTRUNCATES
BR BRINTERVAL 2H
CACHEMGR CACHESIZE 500MB
WARNLONGTRANS 2H,CHECKINTERVAL 5M
NUMFILES 4000
EOFDELAYCSECS 10
LOGALLSUPCOLS
TRANLOGOPTIONS INTEGRATEDPARAMS (max_sga_size 200, parallelism 2)
discardfile ./dirrpt/jcms.dsc,append, megabytes 200
exttrail ./dirdat/ex
----add ddl
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA, REPORT
--TABLE nxsoft_yg.*;
TABLE nxsoft_yg.mytest;
TABLE nxsoft_yg.mytest2;
TABLE nxsoft_yg.abc;
TABLE nxsoft_yg.t2;
注意有
----add ddl
DDL INCLUDE ALL
DDLOPTIONS ADDTRANDATA, REPORT
否则不会抽取DDL
配置源端传送进程:
GGSCI (eoms01) 2> edit param PUMP_01
extract pump_01
dynamicresolution
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid goldengate,password goldengate
RMTHOST 192.168.198.133, MGRPORT 7809,compress
rmttrail ./dirdat/dp
--TABLE nxsoft_yg.*;
TABLE nxsoft_yg.mytest;
TABLE nxsoft_yg.mytest2;
TABLE nxsoft_yg.abc;
TABLE nxsoft_yg.t2;
四、目标端配置应用进程
先配置一下mgr:
GGSCI (eomsdr) 3> edit param mgr
PORT 7809
DYNAMICPORTLIST 7810-8000
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/,usecheckpoints, minkeepdays 3
ACCESSRULE, PROG *, IPADDR 192.168.*.*, ALLOW
~
实际上,之前已近配置过mgr了。
在配置一下应用进程即可:
GGSCI (eomsdr) 2> edit param REP_01
replicat rep_01
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
userid goldengate,password goldengate
GETTRUNCATES
assumetargetdefs
reperror default,discard
discardfile ./dirrpt/replzl.dsc,append,megabytes 50
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
--MAP nxsoft_yg.*, TARGET nxsoft_yg.*;
MAP nxsoft_yg.mytest, TARGET nxsoft_yg.mytest;
MAP nxsoft_yg.mytest2, TARGET nxsoft_yg.mytest2;
MAP nxsoft_yg.abc, TARGET nxsoft_yg.abc;
MAP nxsoft_yg.t2 TARGET nxsoft_yg.t2;
~
~
~
同样有:
DDL INCLUDE MAPPED
DDLOPTIONS REPORT
如果要同步DDL,源端、目标端都配置上。
其实通过配置文件可以看到,不论源端还是目标端,可以逐个把表列出来,也可以用 nxsoft_yg.*这种方式同步。
但是,因为ogg无法同步blog字段,因此如果相关表上发生变更,将报错。
五、启动源端mgr、ext01、pump_01,目标端mgr、REP_01进程
常规启动很简单:
源端:
start mgr
start extract ext01
start extract pump_01
目标端:
start mgr
start replicat rep_01
但是,前面讲过,我们用rman及expd、impd都可以导入导出进行初始化,那必定有一个时间点或者SCN,例如,我们就从这个SCN开始:
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
21812992
expd system/xxxx schemas=nxsoft_yg directory=dmp_dir dumpfile=xxxx_U%.dmp logfile=xx.log parallel=4 cluster=N flashback_scn=21812992;
然后我们用这个dmp文件,将这个数据库导入倒目标文件,完成数据初始化。
那么这样,目标库启动的时候,就必须用一个SCN开始开始复制:
start replicat rep_01,aftercsn 20797280
如果想进行一个时间点的控制,可以用scn与时间的转化函数,确定scn:
根据scn确定时间:
select to_char(scn_to_timestamp('20424154'),'yyyy-MM-dd HH24:mi:ss') from dual;
根据时间确定SCN:
select to_timestamp(' 20201109 20:09:55.000000000', 'syyyy-mm-dd hh24:mi:ss.ff') from dual;
select timestamp_to_scn(' 09-NOV-20 08.09.55.000000000 PM') from dual;
但是aftercsn也有需要注意的,就是导入导出的时候,要把抽取、传送、及目标端的应用进程关闭掉,尤其是目标端的应用进程。,否则,极容易导致数据不一致
六、其它还需要学习的
(1)mgr、ext01、pump_01、dep_01中的进程参数的含义,这个可以根据需要来设置,上面的是基本配置,在日常使用中是足够的
(2)带条件的复制,例如where a=10的进行复制,这个可以可以的,值需要在map的时候加上:map TEST.a, target TEST.a,where (id=8);
(3)按照表大家及日常变更频次,将队列分成几个,进行并行处理。
(4)作为一个dba,还有其它问题,借助网络、doc.oracle可以解决99%的问题。




