【问题标题】:Importing a dmp with partitioned tables into Oracle XE将带有分区表的 dmp 导入 Oracle XE
【发布时间】:2010-03-31 19:38:04
【问题描述】:

我有一个包含分区表的架构。我可以使用 exp 创建一个 .dmp,但是当我将它导入 Oracle XE 时,我会收到错误,因为 Oracle XE 不支持分区表。

如何将 .dmp 导入 Oracle XE?我认为预先创建表可能会做到这一点,但我如何以某种自动化方式提取 DDL 来做到这一点?

或者我可以在没有分区的情况下以某种方式创建 exp 吗?

【问题讨论】:

  • 您可以选择重新导出吗?

标签: oracle import export partitioning oracle-xe


【解决方案1】:

这就是我用 expdp/impdp 做的事情

  1. 使用 impdp SQLFILE=Create_Non_Partitioned_Tables.sql EXCLUDE=STATISTICS
  2. 将该文件复制到 Create_Indexes_Constraints.sql
  3. 编辑Create_Non_Partitioned_Tables.sql 以删除对索引、约束和分区的所有引用,只留下CREATE 查询。
  4. 编辑Create_Indexes_Constraints.sql 以删除对分区表和CREATE 查询的所有引用。
  5. 运行Create_Non_Partitioned_Tables.sql 以创建非分区表。
  6. 使用选项CONTENT=DATA_ONLY 运行impdp
  7. 运行Create_Indexes_Constraints.sql 以创建索引和约束。

【讨论】:

  • 也可以在项目符号 6 中使用 table_exists_action=truncate
【解决方案2】:

如果您尝试导入,使用 ROWS=N,您将收到错误报告“ORA-00439:未启用功能:分区”,但您还将获得它失败的语句的转储。

它用双引号包裹在 75 个字符处,但这是你应该能够用文本编辑器处理的东西(我喜欢 PSPad,它有一个列选择模式,可以很容易地去掉开头和结尾的引号每一行,加上一个 JOIN LINES 函数将它们粘合在一起。

您还可以使用 dbms_metadata.get_ddl 从源中提取 DDL。

对于其中任何一个,您都需要编辑语句以删除分区子句,然后再在 XE 中运行它们。

如果您有很多分区表,请查看 DBA 是否可以在源环境中为您设置一个具有执行权限的临时用户 CREATE TABLE abc AS SELECT * FROM realuser.abc WHERE 1=2;

您将拥有一堆具有适当结构但没有分区的空表,并且可以将它们导出,导入 XE,然后如果需要这些行,则进行另一次导入。

分区索引可能存在类似问题。我会为他们寻找 DBMS_METADATA.GET_DDL 并破解结果。

【讨论】:

    【解决方案3】:

    Oracle 11g 及更高版本支持通过合并 EXPDP 中的分区来导出表。使用expdp工具导出时请参考PARTITION_OPTIONS选项。

    更多信息请访问Oracle Data Pump 10g

    【讨论】:

    • 欢迎来到 Stack Overflow。我很好奇当你的答案描述 11g 时,为什么你引用 10g 手册而不是 11g。
    【解决方案4】:

    使用“indexfile”选项获取要导入的表的表和索引创建文件。修改该文件以提供不带分区的表创建语句。运行创建命令以在您要导入的数据库中预先创建表。然后 imp 使用“ignore=y”,它应该导入到 precreate 表中,并且不会因为 create 语句而出错。

    【讨论】:

      猜你喜欢
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-05-25
      • 1970-01-01
      • 2011-03-02
      • 2015-08-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多