OGG的REP进程对主键列加1的处理
来源:互联网 发布:js点击改变display 编辑:程序博客网 时间:2024/04/28 10:37
本文是转载,原文作者震总,他是Oracle database, OGG,HVR方面的资深工程师。
问题说明
对于表的主键列进行更新时,如果更新语句为set x=x+n或者更新过程中涉及到主键值的偏移,这种事务在源端可以正常执行,因为更新操作是在同一个语句中完成的。而对于HVR目标端来说,可能会把源端的一个更新语句转换为多个更新语句如:
目标端在执行上面的语句时会触发主键约束而报错:
ORA-00001: unique constraint (WZTEST.SYS_C005212) violated
Goldengate处理方式
在Oracle 11.2.0.2之前可以使用HANDLETPKUPDATE参数来解决,报错问题。
不过这个参数的使用有一个限制条件,就是对应表的主键要修改成deferrable状态。
alter table WZTEST.TB
drop constraint SYS_C005213 cascade;
alter table WZTEST.TB
add primary key (ID)
deferrable;
这只是一种临时的解决办法,当主键表太多时就不太适用了。
参数HANDLETPKUPDATE的使用方式
replicat reppart
setenv ( NLS_LANG = "AMERICAN_AMERICA.ZHS16GBK" )
assumetargetdefs
userid goldengate, password oracleoracle
DBOPTIONS DEFERREFCONST, SUPPRESSTRIGGERS
gettruncates
ALLOWNOOPUPDATES
ddl include mapped
discardfile ./dirrpt/reppart.dsc, purge, megabytes 5000
MAP WZTEST.*, target WZTEST.*, HANDLETPKUPDATE;
通过10046跟踪可以得到goldengate应用进程在执行对pk的update前后会执行下面的两个语句。执行更新操作前它会把constraint设置为deferred状态,更新完成之后,再设置成immediate状态。
alter session set constraint = deferred
UPDATE /*+ RESTRICT_ALL_REF_CONS */ "WZTEST"."TB" SET "ID" = :a1 WHERE "ID" = :b0 AND rowid <> :rid
alter session set constraint = immediate
Oracle 11.2.0.3中的处理方式
Oracle11.2.0.3中的存储过程DBMS_XSTREAM_GG.ENABLE_TDUP_WORKSPACE可以解决这个问题,使用这个存储过程不再需要对表的主键状态进行修改,也不需要在Goldengate的参数文件中使用handletpkupdate参数。
这个存储过程是数据库自带的,即使没有部署Goldengate 数据库中也有这个存储过程。
通过10046可以看到goldengate的应用进程中显示了调用了dbms_xstream_gg.enable_tdup_workspace和dbms_xstream_gg.disable_tdup_workspace两个存储过程。
begin dbms_xstream_gg.enable_tdup_workspace; end;
update …
begin dbms_xstream_gg.disable_tdup_workspace; end;
这两个存储过程在数据库中是加密的,具体的实现,不得而知。
参考文档:
GoldenGate REPLICAT abend ORA-00001: unique constraint violated on transient PKUpdate in 11.2.0.4 (Doc ID 1928263.1)
Usage of Handletpkupdate requires specific defer settings on table (Doc ID 1303231.1)
Oracle® GoldenGate Windows and UNIX Reference Guide 11g Release 2 Patch Set 1 (11.2.1.0.1)
- OGG的REP进程对主键列加1的处理
- OGG的rep进程处理大事务时的查看rep处理进度的命令
- ogg rep进程 reperror
- OGG对于没有主键表的处理
- OGG rep运行慢的分析步骤
- 推测Oracle GoldenGate(OGG)目的端 rep进程Checkpoint Lag的计算方法
- 关于ogg的列映射
- OGG孤儿server进程的检查与处理
- MySQL对主键重复的处理
- Oracle-OGG trail 文件大小引起的进程异常 OGG-01172
- oracle 11.2.0.4 ogg 12.3.0.1.0备库rep进程启动报错OGG-00446
- SQL里的主键加1
- MFC对进程的处理
- 进程对信号的处理
- 对一段Oracle GoldenGate (OGG) 传输进程日志(.rpt文件)的解释
- 对一段Oracle GoldenGate (OGG) 传输进程日志(.rpt文件)的解释
- 查看ogg目的端的server进程
- mysql-oracle无pump进程的ogg
- gdcm安装
- Linux命令整理--cd命令
- cpp语言预编译语句define浅谈
- 使用jquery操作session方法分享
- 五大常用算法之一:分治算法
- OGG的REP进程对主键列加1的处理
- UITextField的return按钮灰色
- java代理 InvocationHandler接口实现
- 在场景中添加多个图层
- C#执行Javascript代码的几种方法总结
- Nginx详细配置
- 五大常用算法之三:贪心算法
- 简易晶体管测试仪的设计
- bzoj3211.花神游历各国(线段树)