如何imp整个数据库并替换当前数据?

jas*_*ing 8 oracle database

我有两个数据库,A 和 B 说。它们是相同的,期望数据记录是最新的还是旧的。我想从最新的 (A) exp 到旧的 (B)。

当我通过以下命令导入旧的时

imp 用户名/密码文件=xxx.dmp fromuser=Auser touser=Buser

这实际上不会导入,因为 B 已经拥有所有表。

所以任何人都知道是否有一个用于导入和替换当前数据库的命令。谢谢

顺便说一句,我正在使用 Oracle

slo*_*von 8

或者,如果您负担得起,从 B 中删除有问题的表,然后使用 import 或 impdp 重新创建它们。我们通常删除整个模式(删除用户 UUUU 级联)然后进行新的导入,例如当我们从生产“刷新”测试/开发数据库时。


小智 7

导入旨在加载整个架构、对象和数据。尽管有一些灵活性——加载单个表,只加载数据——它不能优雅地处理目标模式中包含数据的表的存在。如果目标模式中的旧数据包含在较新的源模式中已更新或删除的记录,则这尤其成问题。

如果您使用的是 Oracle 10g 或更高版本,则解决方案是改用数据泵。此实用程序具有更强大的功能,包括能够用源模式中的数据替换目标模式中现有表中的现有表或数据。 了解更多

如果您使用的是较早版本的数据库,则有一些解决方法。 了解更多。 但是您可能必须禁用所有约束并在一轮后处理中修复数据。


Gai*_*ius 7

只需使用 Datapump(expdp/impdp 而不是 exp/imp)并指定TABLE_EXISTS_ACTION=TRUNCATE(或 REPLACE,视情况而定)。