有条件的话,首选Oracle 10g平台,采用expdp导出包含约束和索引的数据,然后impdp命令导入,一气呵成。虽然只能将dmp文件存在服务器端,但考虑到即使用exp也是telnet到服务器后执行的(为了充分利用服务器的高速I/O和大容量存储,并减少网络流量),两者没有本质的区别。而且expdp/impdp还具有很多可管理的特性,可以在导出/导入过程中挂起、恢复、终止任务。
另一处要注意的是dmpdir目录需要预先建立,
conn / as sysdba
create directory dmpdir as '/oradata/dmp';
grant read,write ON DIRECTORY dmpdir to tom;
而且给导出和导入用户都授权读写,可以用一个脚本完成,不费事。
GRANT READ ON DIRECTORY "SYS"."DMPDIR" TO "BEE3";
GRANT WRITE ON DIRECTORY "SYS"."DMPDIR" TO "BEE3";
GRANT "CONNECT" TO "BEE3";
GRANT "DBA" TO "BEE3";
GRANT "RESOURCE" TO "BEE3";
如果要在经济普查数据库这样的Oracle 9i平台导出和导入,采用exp导出不包含约束和索引的数据,再删除目标用户基本表的约束和索引(如果存在),然后imp命令导入,再用脚本建立约束和索引,commit=y参数不必使用。
上述各方法的参数以及运行时间的比较见附表:
(方法A:Oracle9i exp+imp,方法B:10g expdp+impdp)