【问题标题】:Oracle copy data between databases honoring relationshipsOracle 在尊重关系的数据库之间复制数据
【发布时间】:2013-09-22 17:02:39
【问题描述】:

我有一个关于 oracle 复制命令的问题: 是否可以在不(!)编写程序的情况下一次性在数据库之间复制数据(结构是否相同)和尊重关系?

更准确地说: 表 B 通过外键(B.FK -> A.PK;没有关系信息存储在数据库本身中)引用(通过 B.FK)表 A(A.PK)。密钥由序列生成,用于为所有表创建 PK。

那么如何在保持关系完整的同时复制表 A 和 B,并使用目标 DB 序列为复制的数据生成新的主键(我不能使用“原始”PK 值,因为它们可能已经在同一不同数据集的表)?

我怀疑复制命令是否能够处理这种情况,但是实现所需行为的方法是什么?

谢谢 马蒂亚斯

【问题讨论】:

  • 复制命令是 sql*plus -only 命令。不是 SQL 的一部分。将带有序列的表复制到另一个数据库可能会很痛苦。不确定您拥有多少数据或需要多久执行一次。有多种方法可以做到这一点。您可以创建一个临时表来存储旧序列并映射到新数据库中的新序列,然后编写一个函数在插入语句中进行替换。太长了,无法在这里发表评论。

标签: oracle oracle11g


【解决方案1】:

Oracle 有几种不同的方式将数据从一个数据库移动到另一个数据库,其中 SQL*Plus copy 命令是最基本的,也是最不令人满意的。编写自己的复制例程(正如@OldProgrammer 建议的那样)也好不到哪里去。

您使用的是 11g,因此请使用 the built-in Streams functionality 进入 21 世纪。

没有办法跨数据库同步序列。有一个解决方法,the inestimable Tom Kyte 对此进行了解释。

【讨论】:

    【解决方案2】:

    我通常更喜欢 db 链接,然后使用 sql insert 语句来复制数据。 在您的场景中,首先使用 DB 链接插入表 A 的数据,然后插入表。反之则报错。

    有关 DB 链接的信息,您可以查看此链接:http://docs.oracle.com/cd/B28359_01/server.111/b28310/ds_concepts002.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-03
      • 2014-08-28
      • 1970-01-01
      相关资源
      最近更新 更多