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

标签 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.AREAL_SCHEMA.A 重命名为 REAL_SCHEMA.A_OLD
  6. REAL_SCHEMA.B 重命名为 REAL_SCHEMA.A
  7. 删除 REAL_SCHEMA.A_OLD

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

最佳答案

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

但是,你说你在11g上。为什么不使用 10g 中引入的 DataPump 实用程序,它取代了 Import 和 Export。因为在 11g 中,该实用程序提供了 REMAP_TABLE 选项,它可以完全满足您的需求。

编辑

在我写这篇文章时阅读了 OP 添加到另一个响应的评论,我认为 REMAP_TABLE 选项不适用于他们的情况。它只重命名新对象。如果目标模式中存在具有原始名称的表,则导入将失败并返回 ORA-39151。对不起。

编辑之二

鉴于 OP 最终选择的解决方案(删除现有表,替换为新表),有一个数据泵解决方案,即使用 TABLE_EXISTS_ACTION={TRUNCATE | REPLACE} 子句。选择 REPLACE 会删除表格,而 TRUNCATE 只是,呃,截断它。无论哪种情况,我们都必须担心参照完整性约束,但这也是所选解决方案的一个问题。

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

关于database - Oracle -- 将数据导入到具有不同名称的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1902102/

相关文章:

mysql - 比较两个 MySQL 数据库

database - 将现有的 Sqlite 数据库加载到内存中以进行快速计算

php - 为数据库表创建类/对象是否可以?

Android Room数据库 View

sql - Oracle 查询显示错误 "not a GROUP BY expression"

django - 未找到 'password_reset_confirm' 的反向。 'password_reset_confirm' 不是有效的 View 函数或模式名称

python - 如何在包导入时动态加载模块?

java - ORA-0 [BEA][Oracle JDBC 驱动程序] 未处理的 sql 类型

mysql - 在 MySQL 与 Oracle 中创建表

MySQL:导入时忽略错误?