【问题标题】:ORA-02291: parent key not found when inserting multiple rowsORA-02291: 插入多行时找不到父键
【发布时间】:2018-08-27 13:15:45
【问题描述】:

我在执行执行多次插入的存储过程时遇到问题

我正在通过 DBLINK 将 30 个表从一个服务器实例复制到另一个实例:

INSERT INTO table@dblink (column1)
         SELECT column1
         FROM table;

但结果是:

ORA-02291: 违反完整性约束 (string.string) - 未找到父键

过程结束时只有一次提交。

我要插入的第 4 个表具有第一个表的 FK,并且它无法识别第一个表的插入(我尝试过使用延迟约束和同样的问题:ORA-02291)。

【问题讨论】:

  • 你复制的顺序是否正确?第一个没有外键的表,然后是一些
  • 是的,我愿意。这只是一个工作了很多次的大包的一部分。现在我们正在增加我们需要复制的数据的大小,我们发现了这个错误。顺序正确。
  • 你有没有尝试在每张表之后进行一次提交?
  • 我不能,业务规则……程序必须全部复制或全部复制。 (在它工作的每个表之后进行提交,我在另一台服务器上尝试它只是为了测试,但程序不能这样做)。
  • 如果您说问题出在程序上,而您没有向我们展示程序,我们有什么可以帮助您的吗?您应该提供更多信息

标签: oracle plsql sql-insert dblink ora-02291


【解决方案1】:

这里的问题是您正在通过 db-link 修改数据 (DML)。这可能由 Oracle 管理不善,并导致意外行为。您应该以相反的方式执行此操作:而不是推送数据,而是通过此 db-link 拖动数据,并在本地进行插入。当然,技术上你可能无法在目标数据库上做你想做的事......

您的解决方案是在插入之前停用 FK,然后激活 FK。

但是,我不确定此 DDL 是否可以直接通过 db-link... 您可能需要创建一个过程来停用目标数据库上的 FK,并通过 db-link 调用它。

【讨论】:

  • 感谢您的回答。好主意啊。我创建了两个过程,一个用于在插入之前禁用约束,另一个用于启用约束。我执行了,它给了我同样的错误。 02298 密钥未创建...太奇怪了,让我抓狂
猜你喜欢
  • 1970-01-01
  • 2016-10-08
  • 1970-01-01
  • 1970-01-01
  • 2020-06-05
  • 2016-03-12
  • 1970-01-01
  • 2020-07-19
  • 2018-04-18
相关资源
最近更新 更多