应客户要求,在进行Goldengate测试功能的时候,其中有个sequence测试dll的同步复制没有成功,后来找到相关资料,最终搞定,记之以共享。
====环境==========
oracle : 10.2.0.5 64bit
linux: redhat 5.8 64bit
ogg: 11.2.1.0.1
===============
源端: exta(抽取), dpea(推送);
目标: repa(复制)
====exta
====dpea
点击( 此处 )折叠或打开
====repa
1) 如果要启动DDL, 需要在源端的数据库执行maker_setup.sql, ddl_setup.sql, role_setup.sql,ddl_enable.sql
2) 并把权限付给glodengate的数据库管理用户,比如:gger或者ggsadmin, 或者ogg之类的,反正是自己定义的gg管理用户。
具体sql:GRANT GGS_GGSUSER_ROLE, RESOURCE, DBA, CONNECT to ggsadmin.
3)以上执行无问题之后,如果sequence在源端创建、alter目标端没有同步,查看是否在源端exta和目标端没有ddl include all,而是ddl include mapped(见上面脚本红色字体),本主在测试时就是这个问题不能同步sequence,修改之后,通畅无比:)
4)sequence的DDL同步正常后,通常测试sequence的同步情况,如果目标和源不能同步sequence的值,请检查如下:
4.1 在目标和源数据库端执行sequence.sql
4.2 在源端的exta和dpea中增加sequence的抽取命令
4.3 在目标端select test_seq.nextval from dual; n>5次, 检查目标端是否变化,根据自己的实测有延迟。比如在源端执行了5次,源端的currval是4, 目标端select test_seq.currval from dual应该是5,结果会有不同,可以查询user_sequence视图,查看LAST_NUMBER即可。
4.4 如果两端不一致,则需要创建sequence的时候不要cache,如:
create sequence test_seq start with 0 increment by 1 minvalue 0 nocache;
根据以上情况,sequence的ddl和同步无问题。
====环境==========
oracle : 10.2.0.5 64bit
linux: redhat 5.8 64bit
ogg: 11.2.1.0.1
===============
源端: exta(抽取), dpea(推送);
目标: repa(复制)
====exta
点击(此处)折叠或打开
- EXTRACT exta
- setenv(ORACLE_SID=ORCL1)
- setenv(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
- --report at 01:59
- --reportrollover 02:00
- --USERID ggsadmin PASSWORD ggsadmin
- userid ggsadmin, password AACAAAAAAAAAAAIACCKISHFGOHRAMJWG,ENCRYPTKEY default
- TRANLOGOPTIONS EXCLUDEUSER ggsadmin
- EXTTRAIL /home/oracle/ogg/dirdat/rt
- discardfile /home/oracle/ogg/dirrpt/exta.dsc, append, megabytes 50M
- --DDL INCLUDE OBJNAME \"scott.*\"
- --DDL INCLUDE OBJTYPE \"SEQUENCE\"
- --DDL INCLUDE MAPPED
- DDL INCLUDE ALL
- DDLOPTIONS ADDTRANDATA, report, nocrossrename
- Gettruncates
- --FETCHOPTIONS, NOUSESNAPSHOT
- FETCHOPTIONS, USESNAPSHOT, NOUSELATESTVERSION, MISSINGROW REPORT
- STATOPTIONS REPORTFETCH
- WARNLONGTRANS 1H, CHECKINTERVAL 5M
- dynamicresolution
- table scott.*;
- sequence scott.*;
点击( 此处 )折叠或打开
- extract dpea
- passthru
- numfiles 5000
- rmthost 192.168.52.135, mgrport 7809, compress
- rmttrail /home/oracle/ogg/dirdat/rt
- dynamicresolution
- CMDTRACE DETAIL
- table scott.*;
- sequence scott.*;
点击(此处)折叠或打开
- REPLICAT repa
- setenv(ORACLE_SID=ORCL2)
- setenv(NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)
- --userid ggsadmin, password ggsadmin
- userid ggsadmin, password AACAAAAAAAAAAAIACCKISHFGOHRAMJWG, ENCRYPTKEY default
- HANDLECOLLISIONS
- assumetargetdefs
- reperror default, discard
- discardfile ./dirrpt/repwp.dsc, append, megabytes 150M
- dynamicresolution
- --report options
- reportCount every 30 minutes, rate
- report at 01:00
- reportRollover at 01:15
- --ddl options
- --DDL INCLUDE MAPPED
- DDL INCLUDE ALL
- DDLOPTIONS REPORT
- BATCHSQL
- DBOPTIONS DEFERREFCONST
- DBOPTIONS LOBWRITESIZE 102400
- DDLERROR DEFAULT DISCARD RETRYOP MAXRETRIES 5 RETRYDELAY 20
- CMDTRACE DETAIL ;
- map scott.*, target scott.*;
2) 并把权限付给glodengate的数据库管理用户,比如:gger或者ggsadmin, 或者ogg之类的,反正是自己定义的gg管理用户。
具体sql:GRANT GGS_GGSUSER_ROLE, RESOURCE, DBA, CONNECT to ggsadmin.
3)以上执行无问题之后,如果sequence在源端创建、alter目标端没有同步,查看是否在源端exta和目标端没有ddl include all,而是ddl include mapped(见上面脚本红色字体),本主在测试时就是这个问题不能同步sequence,修改之后,通畅无比:)
4)sequence的DDL同步正常后,通常测试sequence的同步情况,如果目标和源不能同步sequence的值,请检查如下:
4.1 在目标和源数据库端执行sequence.sql
4.2 在源端的exta和dpea中增加sequence的抽取命令
4.3 在目标端select test_seq.nextval from dual; n>5次, 检查目标端是否变化,根据自己的实测有延迟。比如在源端执行了5次,源端的currval是4, 目标端select test_seq.currval from dual应该是5,结果会有不同,可以查询user_sequence视图,查看LAST_NUMBER即可。
4.4 如果两端不一致,则需要创建sequence的时候不要cache,如:
create sequence test_seq start with 0 increment by 1 minvalue 0 nocache;
根据以上情况,sequence的ddl和同步无问题。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/3090/viewspace-1420831/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/3090/viewspace-1420831/