zoukankan      html  css  js  c++  java
  • 【案例】ORA-02298

    参考:http://blog.163.com/yvtong@126/blog/static/8753524720132223343722/

    ORA-39083: Object type REF_CONSTRAINT:"TEST"."FK_AN_ID" failed to create with error:
    ORA-02298: cannot validate (TEST.FK_AN_ID) - parent keys not found
    Failing sql is:
    ALTER TABLE "TEST"."ROWER_INFO" ADD CONSTRAINT "FK_AN_ID" FOREIGN KEY ("LOAN_ID") REFERENCES "TEST"."AN_REQUEST" ("ID") ENABLE

    原因: 

    表ROWER_INFO里,有外键连接到另一个表AN_REQUEST的主键, 在表ROWER_INFO的外键列插入的值 在表AN_REQUEST的主键列找不到就不能插入。这往往由于表在不同的时间点导出,主表中有新的业务数据。

    而此次利用数据泵导出TEST用户下的所有对象,导入到另一用户下,报错。原因是子表ROWER_INFO多了一行数据,造成创建外键约束失败

    SQL> select * from "TEST"."ROWER_INFO" a where not exists ( select 1 from "TEST"."AN_REQUEST" b where b.ID=a.LOAN_ID);
    125509 128043 D 0 Scott F 27-10月-78
    SQL> delete from "TEST"."ROWER_INFO" a where not exists ( select 1 from "TEST"."AN_REQUEST" b where b.ID=a.LOAN_ID);
    1 row deleted.
    SQL> ALTER TABLE "TEST"."ROWER_INFO" ADD CONSTRAINT "FK_AN_ID" FOREIGN KEY ("LOAN_ID") REFERENCES "TEST"."AN_REQUEST" ("ID") ENABLE;
    Table altered.

    获取删除多余数据的SQL:

    SELECT ' delete from '
    ||a.table_name
    ||' a where not exists ( select 1 from '
    ||c_pk.table_name
    || ' b where b.'
    || b.column_name
    ||'=a.'
    ||a.column_name
    ||');'
    FROM user_cons_columns a
    JOIN user_constraints c
    ON a.constraint_name = c.constraint_name
    JOIN user_constraints c_pk
    ON c.r_constraint_name = c_pk.constraint_name
    JOIN user_cons_columns b
    ON c_pk.constraint_name = b.constraint_name
    WHERE c.constraint_type = 'R'
    AND a.table_name = '&Table_Name'
    AND a.constraint_name ='&FK_NAME';

  • 相关阅读:
    Linux系统教程:设置GRUB菜单密码
    vimdiff的常用命令
    Zero-Copy实现原理
    解决业务代码里的分布式事务一致性问题
    用好这6个APP,学英语SO EASY!
    线程池调优
    理解select,poll,epoll实现分析
    时序图
    性能监控-TP理解
    sshd_config OpenSSH SSH 进程配置文件配置说明
  • 原文地址:https://www.cnblogs.com/elontian/p/8781902.html
Copyright © 2011-2022 走看看