0

Oracle 新表空间名称必须与旧表空间名称匹配?

例如:

转储文件的表空间名称是A,我创建了一个新的表空间B,它可以导入表,但是有很多错误?

         ORA-00959:tablespace 'ECASYS'(old) not exits.

这是我的导入声明:

imp userid='ZHPE/zhpe@ORCL' file='E:\xxxx\xxxx2013-08-15Bak\130815.dmp' log='D:\app\Administrator\oradata\orcl\ZHPE.log' full=y ignore=y;

新表空间是否必须必须适合旧表空间???帮助!

4

2 回答 2

2

如果您被迫使用 legacyexpimptools,则无法在导入过程中使用命令行选项更改表空间。如果可以,请切换到使用数据泵版本expdpimpdp,然后遵循@schurik 的建议。

如果您不能这样做,那么您将需要一种解决方法,即首先手动创建架构对象。

如果您imp使用该indexfile选项运行,那么它将创建一个包含表和索引的 DDL 的文件:

imp user/password indexfile=schema.sql file=...

表创建 DDL 使用标记注释掉REM,您需要将其删除。然后,您可以对其进行编辑以更改表空间和任何其他不再合适的存储选项。然后运行该架构创建 SQL 以将所有表创建为空。

然后再次运行正常导入,但使用ignore=y标志,因此它不会抱怨(太多)表现在已经存在。数据仍将插入到那些现有表中。

如果您事先创建索引和表,这会慢一些;通常它会创建表,插入数据,然后构建索引,这样效率更高。如果减速很明显,那么您可以将您的表拆分schema.sql为单独的表和索引创建文件并手动执行相同的操作 - 创建表,使用ignore=yand运行导入indexes=n(以阻止它尝试创建它们并且无法创建它们),然后创建索引之后自己。

显然,这有点让人头疼,这也是切换到数据泵是个好主意的众多原因之一。

于 2013-08-16T10:03:55.983 回答
0

看一下REMAP_TABLESPACE导入参数,例如

REMAP_TABLESPACE=A:B
于 2013-08-16T09:24:43.037 回答