1.expdp和impdp
expdp
假设sglaw用户的默认表空间是users,导出用户sglaw所有数据:
SQL> conn / as sysdba
SQL> create directory dir as '/home/oracle/';
SQL> grant read,write on directory dir to system;
$expdp system/oracle directory=dir dumpfile=sglaw.dmp schemas=sglaw logfile=sglaw.log
impdp
导入sglaw用户所有数据到gh,并且转换表空间users为gh:
SQL> conn / as sysdba
SQL> create directory dir as '/home/oracle/';
SQL> grant read,write on directory dir to system;
$impdp system/oracle directory=dir dumpfile=sglaw.dmp remap_tablespace=users:gh remap_schema=sglaw:gh logfile=sglaw.log
总结:执行impdp时无需创建gh用户,在导入时会自动创建并改名用户sglaw为gh(拥有sglaw的所有权限等),自动设置默认表空间为转换后的表空间gh。如果有多个表空间需要转换,则使用多个remap_tablespace=源:目标 字段。
此种方法只限于支持oracle10g以上版本。
2.exp和imp
要实现oracle9i和oracle10g直接不同表空间的数据迁移,就比较麻烦了,而且不一定能够成功。
首先在原库上正常导出(假设原用户数据存放在users表空间)
$exp use