暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Oracle GoldenGate 19.1 oracle数据库同步(三):DML与DDL增量同步(结束)

原创 red_hope 2020-11-16
2224

经过前面两次试验:
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%的问题。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论