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;
新表空间必须必须符合旧表空间吗? 帮助!
答案 0 :(得分:1)
如果您被迫使用旧版exp
和imp
工具,则在导入过程中使用命令行选项无法更改表空间。如果可以,请切换到使用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=y
和indexes=n
运行导入(至停止尝试并且无法创建它们,然后自己创建索引。
显然这有点痛苦,转换到数据泵的众多原因之一是个好主意。
答案 1 :(得分:0)
查看REMAP_TABLESPACE
导入参数,例如
REMAP_TABLESPACE=A:B