ORA-39083,ORA-02298错误一则

问题:
在使用impdp工具导从生产环境导入到测试环境数据时,导入过程最后出现下面的错误:
impdpsystem/********directory=DIR_1network_link=link_5237schemas=NTICKETlogfile=imp237_120703.log

ORA-39083:对象类型REF_CONSTRAINT创建失败,出现错误:
ORA-02298:无法验证(NTICKET.TK_ITINERARY_PRN_FK2)-未找到父项关键字
失败的sql为:
ALTERTABLE"NTICKET"."TK_ITINERARY_PRN_DT"ADDCONSTRAINT"TK_ITINERARY_PRN_FK2"FOREIGNKEY("TKT_ID")REFERENCES"NTICKET"."TK_ORDER_TICKET_DT"("ID")ENABLE

分析原因:
从错误信息看是因为违反了外键约束所至,但为什么出现这种情况呢?
--检查数据
SQL>SelectTKT_IDFromNTICKET.TK_ITINERARY_PRN_DT
2Minus
3SelectIDFromNTICKET.TK_ORDER_TICKET_DT;

TKT_ID
----------------------------------------
8a81858c384b801701384d3b4af90a3b
8a81858c384b801701384d3b4afb0a3d
8a81858c384b801701384d3bf1550a46

发现主表中有外键表中不存在的外键值。

因为数据从生产环境导过来的,导入时间用了近1小时,而数据表的导入顺序是按表的由大到小导入的。在这过程中如果先导入外键表数据,再经过一段时间后,再导入主表数据。如果这段时间经过的时间比较长,就会有可能出现主表和外键表数据不一致的情况。就像前面所说的主表中有外键表中不存在的外键值。

解决办法:
1.如果允许,在导入前先把生产环境用户进行锁定。
AlterUsernticketAccountLock;

2.或是在导入时加上FLASHBACK_SCN参数,保证数据导入的一致性。

你可能感兴趣的:(ora)