Oracle IMP导出到不同表空间不成功
2016-08-05 14:25
721 查看
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表空间。
一句话总结:EXP导出时的源表空间是哪个,IMP导入时就自动导入到该源表空间中去。
(如果目标数据库上该源表空间不存在,可能会报错:表空间不存在之类问题;当源表空间不存在时,在IMP时指定自己希望导入的表空间呢?这留给大家自行验证吧)
可参考下该篇博文:http://blog.itpub.net/28602568/viewspace-760169/
三、解决思路:
思路1:以导入约束导出;
即尽量做到相同表空间之间的导出导入。(其他思路最后也都是转换到这一步。)
思路2:将其他表空间中的表迁移到默认表空间中;
当时想到最笨的办法就是重新在默认表空间tablespace_A下建表,然后把用户UserA在SYSTEM表空间中的表删除。
思路3:修改用户UserA在SYSTEM表空间的限额(也是很多网友提供的方法);
revoke unlimited tablespace from UserA;//撤销UserA的unlimited tablespace权限 alter user UserA quota 0 on SYSTEM;//将用户在System表空间的配额置为0 alter user UserA quota unlimited on TABLESPACE_A;//设置在用户在tablespace_A表空间配额不受限
思路4:修改用户UserA在SYSTEM表空间中数据表的表空间,改为其默认表空间tablespace_A;
比如用户UserA里有张TD_USERS的表,其现在表空间是SYSTEM,将其表空间修改为tablespace_A。
至于如何修改表空间,方法一是利用下面SQL语句:
alter table TD_USERS move tablespace TABLESPACE_A // 第一步:将表TD_USERS移至表空间tablesapce_A下 alter index TD_USERS_ID rebuild tablespace TABLESPACE_A // 第二步:修改该表的索引的表空间可以参考:Oracle修改表空间方法 或自行搜索其他批处理等方法
也可以直接利用Oracle自带的 SQL Developer工具,也是分两步,在表名上右键Edit,找到Storage Options进行表空间修改,然后再Rebuild索引,见下面两图:
参考资料:
1、如何将表空间A下的用户切换到表空间B
2、为什么PL/SQL指定了其他表空间,但是还是导入到SYSTEM表空间里面去了
3、ORA-01502: 索引或这类索引的分区处于不可用状态
相关文章推荐
- oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入
- exp-imp实现oracle不同表空间的迁移
- oracle imp导入不同表空间 及强行导入
- oracle不同版本间数据的导入导出/oracle IMP 命令详解
- oracle的建表空间,imp导入导出,以及一些简单自我总结
- oracle中将EXP出来的数据IMP进不同的表空间
- oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入
- oracle导入.dmp文件是报错:IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入
- oracle用exp\imp导出导入,及创建表空间与用户
- oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件 IMP-00000: 未成功终止导入
- Oracle小技巧_不同表空间不同用户导入导出数据dmp
- oracle用exp\imp导出导入,及创建表空间与用户
- Oracle exp/imp导入不同的表空间
- exp-imp实现oracle不同表空间的迁移
- Oracle 经由常规路径由 EXPORT:V11.02.00创建到导出文件IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件IMP-00000:为成功终止导入
- exp-imp实现oracle不同表空间的迁移
- Oracle数据导入导出imp/exp命令 10g以上expdp/impdp命令
- Oracle创建用户、表空间、导入导出、...命令
- Oracle用imp和exp实现数据的导入和导出
- oracle导入导出工具exp/imp