问题描述
最近在做10G使用impdp的方式跨平台迁移到11GR2的时候遇到一个下面的报错
ORA-39083: Object type REF_CONSTRAINT failed to create with error: ORA-02298: cannot validate (CTG.FK_CTG_LOGS_INT_201306) - parent keys not found Failing sql is: ALTER TABLE "CTG"."CTG_LOGS_201306" ADD CONSTRAINT "FK_CTG_LOGS_INT_201306" FOREIGN KEY ("CONTRACT_INTERACTION_ID") REFERENCES "CTG"."INTERACTION_201306" ("CONTRACT_INTERACTION_ID") ENABLE
专家解答
报错的原因很简单,在“CTG”.“CTG_LOGS_201306″中的列CONTRACT_INTERACTION_ID中有部分值在父表“CTG”.“INTERACTION_201306” 的列“CONTRACT_INTERACTION_ID”不存在。因为我们在迁移的时候没有停源库的业务,所以会导致这样的现象存在,可以通过下面的SQL来查询在父表中不存在的值
SQL> select CONTRACT_INTERACTION_ID from ctg.ctg_logs_201306 2 minus 3 select CONTRACT_INTERACTION_ID from "CTG"."INTERACTION_201306"; CONTRACT_INTERACTION_ID ---------------------------------------- 1000010000201306034157405137 1000010000201306034157405141 1000010000201306034157405212 1000010000201306034157405234 1000010000201306034157405338 1000010000201306034157405366 1000010000201306034157406629 1000010000201306034157406640 1000010000201306034157406912 1000010000201306034157406939 1000010000201306034157407079
解决的方法很简单
1,在expdp过程中我们可以加上flashback scn或者flashback time的参数,两确保事务的一致性,但是会带来UNDO表空间的增加,也可能导致01555的报错。
2,删除相关的行记录。
3,增加约束的时候,默认会去检验已经存在的值,通过增加NOVALIDATE值,可避免去检验已经存在的行记录。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。