0

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

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

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

4

4 回答 4

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 并破解结果。

于 2010-03-31T22:23:43.683 回答
2

这是我对 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. impdp使用选项运行CONTENT=DATA_ONLY
  7. 运行Create_Indexes_Constraints.sql以创建索引和约束。
于 2010-04-30T00:58:01.737 回答
1

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

有关Oracle 数据泵 10g的更多信息。

于 2012-09-22T03:07:16.267 回答
0

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

于 2010-04-13T20:02:17.640 回答