Oracle - 将数据导入到具有不同名称的表中?

Ark*_*ady 4 database oracle import oracle11g

我有一个从Oracle表导出的大型(多GB)数据文件.我想将此数据导入另一个Oracle实例,但我希望表名与原始表不同.这可能吗?怎么样?

导入和导出系统都是Oracle 11g.该表包含BLOB列,如果这有任何区别.

谢谢!

更新:

这里的想法是更新表,同时将系统的停机时间保持在最低限度.解决方案(根据Vincent Malgrat的回答和APC的更新)是:

  1. 假设我们的表名是 A
  2. 制作临时架构 TEMP_SCHEMA
  3. 将我们的数据导入 TEMP_SCHEMA.A
  4. CREATE REAL_SCHEMA.B AS SELECT * FROM TEMP_SCHEMA.A
  5. DROP TABLE REAL_SCHEMA.A重命名REAL_SCHEMA.AREAL_SCHEMA.A_OLD
  6. 重命名REAL_SCHEMA.BREAL_SCHEMA.A
  7. DROP REAL_SCHEMA.A_OLD

这样,停机时间仅在步骤4和5期间,两者都应与数据大小无关.如果这不起作用,我会在这里发布更新:-)

APC*_*APC 5

如果您使用旧的EXP和IMP实用程序,则无法执行此操作.唯一的选择是导入到同名的表中(尽管您可以更改拥有该表的模式.

但是,你说你是11g.为什么不使用10g中引入的DataPump实用程序,它取代了Import和Export.因为在11g中,该实用程序提供REMAP_TABLE选项,它完全符合您的要求.

编辑

在我写这篇文章时,看过OP添加到另一个回复的评论后,我认为REMAP_TABLE选项不适用于他们的情况.它只重命名新对象.如果目标模式中存在具有原始名称的表,则导入将失败并显示ORA-39151.抱歉.

编辑之二

鉴于OP最终选择的解决方案(删除现有表,替换为新表),有一个使用Data Pump的解决方案,即使用该TABLE_EXISTS_ACTION={TRUNCATE | REPLACE}子句.选择REPLACE删除表,而TRUNCATE只是,呃,截断它.在任何一种情况下,我们都要担心引用完整性约束,但这也是所选解决方案的问题.

我发布这个附录不是为了OP,而是为了将来某个时候找到这个页面的其他搜索者的利益.