我有一个包含分区表的模式。我可以使用 exp 创建一个 .dmp,但是当我将它导入 Oracle XE 时,我会收到错误,因为 Oracle XE 不支持分区表。
如何将 .dmp 导入 Oracle XE?我认为预先创建表可能会做到这一点,但是如何以某种自动化方式提取 DDL 来做到这一点?
或者我可以在没有分区的情况下以某种方式创建 exp 吗?
我有一个包含分区表的模式。我可以使用 exp 创建一个 .dmp,但是当我将它导入 Oracle XE 时,我会收到错误,因为 Oracle XE 不支持分区表。
如何将 .dmp 导入 Oracle XE?我认为预先创建表可能会做到这一点,但是如何以某种自动化方式提取 DDL 来做到这一点?
或者我可以在没有分区的情况下以某种方式创建 exp 吗?
如果您尝试导入,使用 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 并破解结果。
这是我对 expdp/impdp 所做的
Create_Non_Partitioned_Tables.sql
以删除对索引、约束和分区的所有引用,只留下CREATE
查询。Create_Indexes_Constraints.sql
以删除对分区表和CREATE
查询的所有引用。Create_Non_Partitioned_Tables.sql
以创建非分区表。impdp
使用选项运行CONTENT=DATA_ONLY
Create_Indexes_Constraints.sql
以创建索引和约束。Oracle 11g 及更高版本支持通过合并 EXPDP 中的分区来导出表。请参考PARTITION_OPTIONS
使用 expdp 实用程序导出时的选项。
有关Oracle 数据泵 10g的更多信息。
使用“indexfile”选项获取要导入的表的表和索引创建文件。修改该文件以提供不带分区的表创建语句。运行创建命令以在您要导入的数据库中预先创建表。然后 imp 使用“ignore=y”,它应该导入到 precreate 表中,并且不会由于 create 语句而出错。