Oracle数据泵expdp和impdp

一、数据库导出

1.1.expdp

  1. 先创建逻辑目录,此处应使用单引号,否则可能产生报错

    • create directory [目录名] as '[路径]';

    • 查看逻辑目录的命令

    • select * from dba_directories; --查看directory

  2. 使用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。

  3. 注意

    • 用户需要授权导出的权限,系统认证/system/sys高级用户不需要授权。

    • grant read,write on directory DUMP_DIR to username;

    • grant exp_full_database to username;

  4. Parallel参数指明了导出并行度,根据CPU的个数进行设置,缺省是1,如果不设置,导出性能与Exp的直接路径导出模式差不了多少,就没有发挥出它的优势。

  5. Dumpfile参数可配合Parallel参数指定多个导出文件,用于减少并发写入时的IO争用。

1.2.exp

  1. 执行命令
    • exp [用户名]/[密码]@[数据库ip:端口]/[数据库服务名] direct=y recordlength=65535 buffer=104857600 file=[./导出路径和文件名].dmp log=[./导出路径和文件名].log tables=[表1],[表2]……
  2. Direct参数定义了导出是使用直接路径还是常规路径
    • 直接路径方式(Direct=Y)。直接路径导出则是将数据直接从磁盘读到PGA再原样写入导出文件,避免了SQL命令处理层的数据转换过程,提高了导出效率
    • 常规路径方式(Direct=N)。常规路径导出使用SELECT语句从表中抽取数据,评估后再写入。
  3. Buffer参数用于设置了读取记录的缓存的大小,以字节为单位,即在array中最大数量的记录,该参数只对常规路径模式导出有效
  4. Recordlength参数是跟Direct=Y(直接路径)配合使用的参数,它定义了Export I/O缓冲的大小,作用类似于常规路径导出使用的Buffer参数。建议设置Recordlength参数为最大I/O缓冲,即65535(64kb)
  5. 直接路径导出模式,其中涉及LOB对象的表只会通过传统模式导出,所以需要设置Buffer参数,一般情况可设置为104857600(100M)

1.3.小结

  1. 一般情况expdp可以替代exp,但是还无法完全替代

  2. expdp在导出大型分区表(1T以上)的时候,光是分析的时间就超过2个小时,而且存在一些BUG。所以,有些用户仍然会使用Exp来进行数据备份。

  3. 使用exp方式,如果要减少耗时,采用直接路径方式,并且设置Recordlength和Buffer两个参数的值,可提高导出性能。

  4. 使用expdp方式,使用合适的Parallel参数,实现快速导出。

二、数据导入

2.1.impdp

  1. 同1.1中一样先创建逻辑目录,或者还是用已有的逻辑目录
  2. 使用impdp导入
    • impdp [用户名]/[密码]@[数据库服务名] schemas=[表空间] directory=[数据文件所在的逻辑目录名] dumpfile=[文件名1.dmp,文件名2.dmp……] logfile=文件名.log full=y tables=[表名1],[表名2],……
    • FULL:表示导出整个数据库,默认N。不指定时,应该指定表名tables。

2.2.imp

  1. 使用imp导入
    • imp [用户名]/[密码]@[数据库ip:端口]/[数据库服务名] file=[./导入路径和文件名].dmp log=[./导入路径和日志名].log full=y tables=[表名1],[表名2],……

2.3.小结

  1. imp和impdp导入速度不同

  2. 导入方式完全取决于导出方式。

三、总结

  • 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导出文件