从10g开始,Oracle提供更高效的Data Pump(即expdp/impdp)来进行数据的导入和导出,老的exp/imp还可以用,但已经不建议使用。注意:expdp/impdp和exp/imp之间互不兼容,也就是说exp导出的文件只能用imp导入,expdp导出的文件只能用impdp导入。
相关阅读:
通过expdp&impdp把11g的数据迁移到10g平台的要点
Oracle Data Pump使用范例及部分注意事项(expdp/impdp)
Oracle datapump expdp/impdp 导入导出数据库时hang住
expdp/impdp做Oracle 10g 到11g的数据迁移
Data Pump的组成部分Data Pump有以下三个部分组成:
通常情况下,我们都把expdp/impdp等同于Data Pump,但从上面可以知道,实际上它只是Data Pump的一个组成部分,其实真正干活的是两个API,只是它们隐藏在后台,平时很少被注意,但如果出现一些莫名其妙的错误(如internal error等),通常是因为这两个API损坏,跑脚本重新编译它们即可。
默认情况下,用户可以导出/导入自己schema下的数据,但如果要导出/导入其它schema下的数据,必须要把以下两个角色赋予该用户:
- DATAPUMP_EXP_FULL_DATABASE
- DATAPUMP_IMP_FULL_DATABASE
当然,sys,system账户和dba角色默认拥有以上两个角色。
当执行expdp/impdp时,其实是起了job执行导出导入工作,一个Data Pump job由以下三部分组成:
在屏幕的输出、logfile里都能看到当前Data Pump Job的运行情况,在数据库里也可以查询视图DBA_DATAPUMP_JOBS,USER_DATAPUMP_JOBS, or DBA_DATAPUMP_SESSIONS。
对于时间比较长的Job,可以在动态视图V$SESSION_LONGOPS查看当前Job完成情况以及预估多久能全部完成,具体字段的意义如下:
USERNAME - job owner
OPNAME - job name
TARGET_DESC - job operation
SOFAR - megabytes transferred thus far during the job
TOTALWORK - estimated number of megabytes in the job
UNITS - megabytes (MB)
MESSAGE - a formatted status message of the form:
'job_name: operation_name : nnn out of mmm MB done'
OPNAME - job name
TARGET_DESC - job operation
SOFAR - megabytes transferred thus far during the job
TOTALWORK - estimated number of megabytes in the job
UNITS - megabytes (MB)
MESSAGE - a formatted status message of the form:
'job_name: operation_name : nnn out of mmm MB done'