当GoldenGate复制进程(Replicat)在目标数据库上遇到ORA-00001唯一性冲突错误时,可以采取以下常见解决方法:
|
1 2 3 4 5 6 |
<span id="kmPgTpl:r1:ot71" class="kmContent">2023-1-617:57:36 WARNING OGG-02544 Unhandled error (ORA-00001: unique constraint (.) violated ORA-00001: unique constraint (<OWNER>.<NAME>) violated) while processing the record at SEQNO 936, RBA 67975402 in Integrated mode. REP LICAT will retry in Direct mode.</span> 2023-1-6 10:47:53284-080 WAMMG 0G-0100 0racle Goldenbate Delivery for 0racle, ms,pm: Aborted grouped tramsaction n XXXXXXXXXXISTORZ database error 1 (OCI Error 0RA-0001: umique constraint xxxxxxxxx PK violated statug = 1),SQL <INSPRT INO XXXXXXXXX |
1, 是确认源库与目标库主键列是否一致
检查数据冲突:首先,需要检查目标数据库中的数据冲突。使用SQL查询或GoldenGate的日志文件来确定冲突的具体数据行。确认是否存在重复的数据或唯一性约束冲突。查看源库报错主键列与目标库是否一致,报错数据中会提示唯一约束名称,和当前的SQL, 如果是绑定变量显示,继续使用下面的方法,但目标库的约束应该和源库保持一致,或宽松于源库。
2, 配置discard文件REPERROR
增加ora-1错误不会终止应用进程,而是写入discard文件,继续应用。
|
1 2 |
discardfile ./dirrpt/r_xxxxxx.dsc,append,megabytes 4095 REPERROR (-1, DISCARD) |
注:REPERROR 可以支持DISCARD, IGNORE, EXCEPTION;错误代码是”-“号开头, 重启replicat进程,错误会写进discard文件.
3, 配置showsyntax参数
应用进程配置showsyntax参数,重启应用进程,可以在applied前打印出当前执行的SQL,也可以帮助当前报错的原因。
4, logdump分析当前值
view report 查看当前应用到的位置,报错中有提示RBA和序列号,可以查看replicat的文件名,分析日志
|
1 2 3 4 5 6 7 8 |
Logdump 1 > open C:GoldenGatedirdat/1p000003921 (use your filename here) Logdump 2 > ghdr on logdump 3 > detail on logdump 4 > detail data logdump 5 > ggstoken on logdump 6 > ggstoken detail logdump 7 > pos 4982061 (use your RBA here) logdump 8 > n |
根据当前的值,处理目标库中的数据,或者跳过当前事务,next
|
1 2 3 |
GGSCI (ogg-sv-uat) 12> alter replicat RMSS2001 extrba 4985338 GGSCI (ogg-sv-uat) 12> start replicat RMSS2001 |