Oracle数据泵expdp和impdp
一、数据库导出
1.1.expdp
先创建逻辑目录,此处应使用单引号,否则可能产生报错
create directory [目录名] as '[路径]';
查看逻辑目录的命令
select * from dba_directories; --查看directory
使用expdp导出数据
expdp [用户名]/[密码]@[数据库服务名] schemas=[表空间] directory=[上面创建的逻辑目录名] parallel=3 dumpfile=[文件名1.dmp,文件名2.dmp……] logfile=文件名.log full=y tables=[表名1],[表名2],……
数据文件:dumpfile,默认名为expdat.dmp,逗号分割可以指定导出到多个文件。
日志文件:logfile,不指定,默认生成名为export.log的日志文件。
FULL:表示导出整个数据库,默认N。不指定时,应该指定表名tables。
注意
用户需要授权导出的权限,系统认证/system/sys高级用户不需要授权。
grant read,write on directory DUMP_DIR to username;
grant exp_full_database to username;
Parallel参数指明了导出并行度,根据CPU的个数进行设置,缺省是1,如果不设置,导出性能与Exp的直接路径导出模式差不了多少,就没有发挥出它的优势。
Dumpfile参数可配合Parallel参数指定多个导出文件,用于减少并发写入时的IO争用。
1.2.exp
- 执行命令
exp [用户名]/[密码]@[数据库ip:端口]/[数据库服务名] direct=y recordlength=65535 buffer=104857600 file=[./导出路径和文件名].dmp log=[./导出路径和文件名].log tables=[表1],[表2]……
- Direct参数定义了导出是使用直接路径还是常规路径
- 直接路径方式(Direct=Y)。直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,避免了SQL命令处理层的数据转换过程,提高了导出效率
- 常规路径方式(Direct=N)。常规路径导出使用SELECT语句从表中抽取数据,评估后再写入。
- Buffer参数用于设置了读取记录的缓存的大小,以字节为单位,即在array中最大数量的记录,该参数只对常规路径模式导出有效。
- Recordlength参数是跟Direct=Y(直接路径)配合使用的参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的Buffer参数。建议设置Recordlength参数为最大I/O缓冲,即65535(64kb)
- 直接路径导出模式,其中涉及LOB对象的表只会通过传统模式导出,所以需要设置Buffer参数,一般情况可设置为104857600(100M)。
1.3.小结
一般情况expdp可以替代exp,但是还无法完全替代
expdp在导出大型分区表(1T以上)的时候,光是分析的时间就超过2个小时,而且存在一些BUG。所以,有些用户仍然会使用Exp来进行数据备份。
使用exp方式,如果要减少耗时,采用直接路径方式,并且设置Recordlength和Buffer两个参数的值,可提高导出性能。
使用expdp方式,使用合适的Parallel参数,实现快速导出。
二、数据导入
2.1.impdp
- 同1.1中一样先创建逻辑目录,或者还是用已有的逻辑目录
- 使用impdp导入
impdp [用户名]/[密码]@[数据库服务名] schemas=[表空间] directory=[数据文件所在的逻辑目录名] dumpfile=[文件名1.dmp,文件名2.dmp……] logfile=文件名.log full=y tables=[表名1],[表名2],……
- FULL:表示导出整个数据库,默认N。不指定时,应该指定表名tables。
2.2.imp
- 使用imp导入
imp [用户名]/[密码]@[数据库ip:端口]/[数据库服务名] file=[./导入路径和文件名].dmp log=[./导入路径和日志名].log full=y tables=[表名1],[表名2],……
2.3.小结
imp和impdp导入速度不同
导入方式完全取决于导出方式。
三、总结
- exp和imp是属于客户端工具,expdp和impdp 属于服务端工具
- 数据泵工具运行于服务器端,相比客户端的exp/imp其性能更好,并能实现exp/imp的全部功能
- 通过使用exclude,include,content等参数,数据泵可以为数据及数据对象提供更细微级别的选择性
- 通过设定数据库版本号,数据泵expdp/impdp可以兼容老版本的数据库系统
- 通过estimate_only参数,数据泵可以预估导出作业所需的磁盘空间
- 支持导入时重新映射功能(即将对象导入到新的目标数据文件、架构及表空间等);
- exp和imp是客户端工具程序,它们既可以在客户端使用,也可以在服务端使用。
- expdp和impdp是服务端工具程序,他们只能在Oracle服务端使用,不能在客户端使用。
- imp只适用于exp导出的文件,不适用于expdp导出文件;impdp只适用于expdp导出的文件,而不适用于exp导出文件