神谕。如何 exp/imp 从一个数据库到另一个已经有数据的数据库?

Oracle. How to exp/imp data from one DB to another which already has data?

我有一个约 40 tables 的 Oracle 数据库。其中一些具有 ID = 1, 2, 3, 4, 5... 和约束。

现在我想 "copy" 从所有 tables 到另一个已经有相同 tables 的 Oracle 数据库。

问题是另一个数据库也有记录(可以是相同的ID = 1, 2, 3, 77, 88 ...),我不想丢失它们。

是否有一些自动化的方法可以通过 ID 转换和约束将数据从一个 table 复制到另一个?

1, 2, 3, 77, 88 +
**1, 2, 3, 4, 5**

=

1, 2, 3, 77, 88, **89, 90, 91, 92, 93**

还是需要我自己做?

insert into new.table
select new.sequence_id.nextval, t.* from old.table t

为所有 40 tables 保存 new.id - old.id 映射等等等等?

这是一个有点脏的解决方案,但如果所有 ID 都是数字,您可以先将旧 ID 更新为负数 ID = -1 * ID(或者只是在 select 语句中动态执行)然后执行插入。在那种情况下,您的所有 ID 都是一致的,约束是有效的,并且它们可以与新数据一起使用。

首先,您需要 expdp,其次,您需要在 impdp 中重新映射架构新架构名称