我尝试使用expdp进行oracle数据库备份。我有一个特定的情况,其中一个应用程序表驻留在SYSTEM表空间。
总结:我想将SYSTEM表空间中的应用程序表导入到新的TABLESPACE'IMPEXP'中。
请告诉我如果我在某处出错并试图做一些不受支持的事情。
任何帮助将不胜感激。
答案 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。