expdp较exp的一个优势就是可以导出空表,再11g中exp不可以直接导出空表。
expdp只能在服务端执行,exp没有限制。
一、创建逻辑目录,该命令不会在操作系统创建真正的目录。
create directory dpdata1 as 'd:\test\dump';
二、查看管理理员目录(同时查看操作系统是否存在,因为Oracle并不关心该目录是否存在,如果不存在,则出错)
select * from dba_directories;
三、给用户赋予在指定目录的操作权限,最好以system等管理员赋予。
grant read,write on directory XXXXXto YYYYY;
四、导出数据
1)按用户导
expdp schemas=scott dumpfile=XXXXXX.dmp LOGFILE=LOG.LOG DIRECTORY=XXXXXX
2)按表名导
expdp TABLES=emp,dept dumpfile=XXXXXX.dmp DIRECTORY=XXXXXX LOGFILE=LOG.LOG
3)按查询条件导
expdp directory=dpdata1 dumpfile=expdp.dmp Tables=emp query='WHERE deptno=20'
4)按表空间导
expdp system/manager DIRECTORY=dpdata1 DUMPFILE=tablespace.dmp TABLESPACES=temp,example
五、还原数据
1)导到指定用户下
impdp scott/tiger DIRECTORY=dpdata1 DUMPFILE=expdp.dmp SCHEMAS=scott
2)改变表的owner
impdp system/manager DIRECTORY=dpdata1 DUMPFILE=expdp.dmp TABLES=scott.dept REMAP_SCHEMA=scott:system
如果不加scott,会报错:ora-39002 ora-39166
3)更换表空间
remap_tablespace=gmapdata:gcomm
例句:
impdp zhjha/zhjha@wgh DIRECTORY=DATA_PUMP_DIR DUMPFILE=0811-2.dmp TABLES=源用户.td_report REMAP_SCHEMA=源用户:目标用户 remap_tablespace=源表空间:目标表空间,源表空间2:目标表空间
单独导表的时候,源用户必须加上。
单表的迁移举例:
expdp xxzzzlsgl/xxzzzlsgl@orcl TABLES=bd_person_YS dumpfile=bd_person_YS-1.dmp DIRECTORY=DATA_PUMP_DIR LOGFILE=bd_person_YS-1.LOGexpdp xxzzzlsgl/xxzzzlsgl@orcl TABLES=T_FW_BJ,T_ld_BJ,T_rk_BJ dumpfile=bj-1.dmp DIRECTORY=DATA_PUMP_DIR LOGFILE=bj-1.LOG
impdp xxzzzlsgl/xxzzzlsglmm@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=bd_person_YS_YS-1.dmp TABLES=xxzzzlsgl.bd_person_YS REMAP_SCHEMA=xxzzzlsgl:xxzzzlsglimpdp xxzzzlsgl/xxzzzlsglmm@orcl DIRECTORY=DATA_PUMP_DIR DUMPFILE=bj-1.dmp TABLES=xxzzzlsgl.T_FW_BJ,xxzzzlsgl.T_ld_BJ,xxzzzlsgl.T_rk_BJ REMAP_SCHEMA=xxzzzlsgl:xxzzzlsgl