SYSTEM表导入到oracle 11g中的其他模式

时间:2011-07-02 07:28:11

标签: oracle oracle11g

我尝试使用expdp进行oracle数据库备份。我有一个特定的情况,其中一个应用程序表驻留在SYSTEM表空间。

  1. 使用选项SCHEMAS = SYSTEM和INCLUDE = TABLE成功创建此模式的备份导出:“喜欢'USER%'”,它对应于我的应用程序表。
  2. 我使用用户impexp创建了另一个模式,该模式具有分配给它的不同表空间。 当我尝试将.dmp文件导入impexp时,导入失败,表示“SYSTEM”。“USER_SYS_MAST”存在。 有没有办法在新创建的架构中导入此表。我也尝试使用选项REMAP_SCHEMA = SYSTEM:IMPEXP,但似乎错误地说ORA-39013:不支持重新映射SYSTEM模式。
  3. 总结:我想将SYSTEM表空间中的应用程序表导入到新的TABLESPACE'IMPEXP'中。

    请告诉我如果我在某处出错并试图做一些不受支持的事情。

    任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:7)

这是将应用程序表放在SYS或SYSTEM模式中的原因之一被认为是不好的做法。这些模式对于运行我们的数据库至关重要,不应该被干扰。

您通过使用前缀USER命名表来复合此bloomer,这与数据字典使用的约定相同。

您需要做的是创建一个新架构来保存这些表。授予它所需的任何特权,使您认为它必须由SYSTEM拥有。然后将这些表移出SYSTEM模式。

要做好正确的工作,您应该更改应用程序以使用此新架构,但作为临时修复,您可以为表提供SYSTEM权限并为它们构建同义词。如果您有时间,请更改应用程序。从长远来看,它会减少你的悲伤。

无论哪种方式,您都可以使用此新架构将数据从旧数据库导出到目标数据库中。

答案 1 :(得分:3)

同意APC。

在您的具体情况下,我会查看DBMS_METADATA.GET_DDL以提取DDL,以便我可以重新创建新架构中的所有对象。有一些选项可以排除TABLESPACE组件,以便在新模式的默认表空间中创建它们。

然后我会简单地执行INSERT / * + APPEND * / INTO newschema.table AS SELECT * FROM SYSTEM.table

如果空间有问题,您可能需要在成功复制后立即对各个表进行TRUNCATE或DROP。