我有一个包含分区表的模式。我可以使用exp来创建.dmp,但是当我将其导入Oracle XE时,我会收到错误,因为Oracle XE不支持分区表。
如何将.dmp导入Oracle XE?我认为预先创建表可能会这样做,但是如何以某种自动方式提取DDL呢?
或者我可以在没有分区的情况下以某种方式创建exp吗?
答案 0 :(得分:2)
如果您尝试导入,使用ROWS = N,您将收到错误报告“ORA-00439:功能未启用:分区”,但您还将获得失败的语句转储。
用双引号包装75个字符,但这是你应该能够用文本编辑器处理的东西(我喜欢PSPad,它有一个列选择模式,很容易摆脱开头和结尾的引号每一行,加上一个JOIN LINES函数将它们粘合在一起。
您也可以使用dbms_metadata.get_ddl从源中提取DDL。
使用其中任何一个,您需要编辑stamements以删除分区子句,然后再在XE中运行它们。
如果你有很多分区表,那么看看DBA是否可以在源环境中为一个临时用户设置你的权限 CREATE TABLE abc AS SELECT * FROM realuser.abc WHERE 1 = 2;
您将拥有一堆具有适当结构但没有分区的空表,可以导出它们,导入XE,然后在需要行时再执行一次。
分区索引可能存在类似问题。我会为他们寻找DBMS_METADATA.GET_DDL并破解结果。
答案 1 :(得分:2)
以下是我正在使用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
以创建索引和约束。答案 2 :(得分:1)
Oracle 11g以后通过合并EXPDP中的分区来支持导出表。使用expdp实用程序导出时,请参阅PARTITION_OPTIONS
选项。
更多信息Oracle Data Pump 10g。
答案 3 :(得分:0)
使用“indexfile”选项获取要导入的表的表和索引创建文件。修改该文件以为您提供不带分区的表create语句。运行创建命令以预先创建要导入的数据库中的表。然后imp使用“ignore = y”,它应该导入到precreate表中,而不是由于create语句而输出错误。