导入dmp表空间名称必须适合旧的?

时间:2013-08-16 09:16:35

标签: oracle import tablespace

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;

新表空间必须必须符合旧表空间吗? 帮助!

2 个答案:

答案 0 :(得分:1)

如果您被迫使用旧版expimp工具,则在导入过程中使用命令行选项无法更改表空间。如果可以,请切换到使用datapump versions, expdp and impdp,然后按照@ schurik的建议。

如果你不能这样做,那么你需要一个解决方法,即首先手动创建模式对象。

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

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

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

然后再次运行正常导入,但是使用ignore=y标志,这样就不会抱怨表格现在已经存在了。数据仍将插入现有表中。

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

显然这有点痛苦,转换到数据泵的众多原因之一是个好主意。

答案 1 :(得分:0)

查看REMAP_TABLESPACE导入参数,例如

REMAP_TABLESPACE=A:B