在日常工作中我们经常需要将源库的一个用户下的数据导入到目标库的另一个用户下,通过exp/imp和expdp/impdp就可以很方便的实现。比如exp/imp中可以通过fromuser和touser来实现跨用户迁移数据,而expdp/impdp中则可以通过remap_schema来实现;通常情况下每个用户所在的默认表空间都不同,假设用户A所在默认表空间为TBS_A,用户B所在默认表空间为TBS_B。
为了将A用户的t表迁移到B用户中,实现命令如下:
1. exp/imp(导入导出前正确设置NLS_LANG环境变量,防止乱码)
exp system/oracle file=t.dmp tables=a.t(源库执行)
imp system/oracle file=t.dmp fromuser=a touser=b(目标库执行)
2. expdp/impdp
expdp system/oracle directory=test dumpfile=t.dmp tables=a.t(源库执行)
impdp system/oracle directory=test dumpfile=t.dmp full=y remap_schema=a:b(目标库执行)
问题描述:这里有个前提就是目标库中并没有TBS_A这个表空间,那么在使用传统的exp/imp导入时导入会执行成功,但是这时在B用户下的T表所在的表空间为TBS_B;而如果在使用expdp/impdp导入时则会报"ORA-00959: tablespace 'TBS_A' does not exist"的错误。
解决方法:
1.无论是exp/imp还是expdp/impdp只要在导入前在目标库上创建TBS_A表空间即可。
2.针对于expdp/impdp使用remap_schema=TBS_A:TBS_B来解决即可。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/20801486/viewspace-721655/ ,如需转载,请注明出处,否则将追究法律责任。