Oracle IMP导出到不同表空间不成功
一、问题描述:
所用环境:Oracle 11g客户端、Windows 64bit、C#;
具体描述:用户UserA默认表空间为tablespace_A,使用EXP命令导出数据表备份文件.dmp,用IMP命令导入时发现数据仍然自动导入到SYSTEM表空间下,即并没有导入到期望的tablespace_A表空间中去。在IMP导入时即使指定了tablespaces=tablespace_A,也无效,数据还是导入到SYSTEM表空间下。
二、原因:
IMP在导入dmp文件时,会根据该dmp导出时的源表空间为依据进行导入表空间的选择,即:从SYSTEM表空间导出的dmp文件,导入时只会默认导入到当初导出时的表空间SYSTEM中。这是因为EXP在导出dmp时不仅包含了导出数据表的脚本语句,还包括其导出时的表空间信息;IMP在导入时就根据dmp中该表空间信息来当做目标表空间进行导入。所以,即使用户UserA的默认表空间为tablespace_A,但如果dmp的源表空间若是SYSTEM表空间的话,用户UserA在用IMP导入并显式指定表空间时,数据还是自动导入到SYSTEM表空间中去。
上述情况常发生于不同电脑上的备份还原,比如用户UserB的数据表都存在于SYSTEM中,他EXP时生成dmp文件的源表空间自然就是SYSTEM;当UserA用这个dmp进行还原时就会直接导入到SYSTEM表空间中而非他自己的默认tablespace_A表空间。
一句话总