oracle—将数据从相同的数据库移动到相同的数据库

oracle—将数据从相同的数据库移动到相同的数据库,oracle,data-mining,Oracle,Data Mining,我有两个具有相同表布局的数据库。有十几张左右的兴趣表。它们是它们之间的一些FK 我被要求编写一个存储过程,根据层次结构顶部父表的主键,将数据从数据库a复制到数据库B。我可能只收到一个值,或者一个值列表。我应该从数据库A中选择与值匹配的所有记录,并将它们插入/更新到数据库B中。这也包括子表中的所有记录 我的问题是这样做的最佳(最有效/最佳实践)方式是什么 我应该从……中选一打吗。。。插入到。。。声明 我是否应该将表连接在一起,并尝试同时插入所有表 谢谢 其他信息: 如果记录尚未存在,则应插入该记录

我有两个具有相同表布局的数据库。有十几张左右的兴趣表。它们是它们之间的一些FK

我被要求编写一个存储过程,根据层次结构顶部父表的主键,将数据从数据库a复制到数据库B。我可能只收到一个值,或者一个值列表。我应该从数据库A中选择与值匹配的所有记录,并将它们插入/更新到数据库B中。这也包括子表中的所有记录

我的问题是这样做的最佳(最有效/最佳实践)方式是什么

我应该从……中选一打吗。。。插入到。。。声明

我是否应该将表连接在一起,并尝试同时插入所有表

谢谢

其他信息: 如果记录尚未存在,则应插入该记录。(基于各表的主键)。否则应该更新

显然,我需要遍历所有子表,因此父表中只有一条记录要复制,但子表可能有10条,子表可能有500条。我当然需要更新记录,如果它已经存在,插入,如果它不为子表太

更新: 我认为,如果我只是删除与顶级键相关的所有记录,然后插入所有新记录,而不是尝试进行更新,那么解决方案会更简单

所以我想问题是最好只做一打:

delete from ... where ... in ...

select from ... where ... in ...
insert into...

或者,在一条sql语句中执行所有插入操作时,最好执行一些奇特的联接?

我会禁用所有外键约束,然后执行一组合并语句来处理更新和插入操作,然后启用所有约束

考虑一下日志记录。您希望生成多少重做

您可能会发现,截断所有目标表,然后使用nolog插入所有内容会更快更好。可能比合并更简单

一个主要的替代方法是删除所有目标表,并使用导出和导入。可能快得多

第二种选择是使用物化视图,特别是在不需要对目标表进行更新的情况下。这样,甲骨文就可以为您完成所有繁重的工作。您可以通过仔细选择“刷新组”强制实现完整性


有几种方法可以解决这个商业问题。PL/SQL程序可能不是最好的

这是一次性练习还是经常发生?数据库的哪个版本?您的失败单位是什么?所有记录还是给定的顶级PK?这是一个常规过程。如果顶级PK出现故障,则可以重新运行该PK。我不需要更新记录,只需要删除所有记录,然后只做一次插入。这将使解决方案更简单。