pump1

Data Pump(数据泵)是什么

 
  • 与到10g以前的exp/imp(原始的导入/导出)相同的功能+有更多的附加功能与新功能
    • 数据以及源数据的高速加载、卸载
    • 比Exp/imp速度高几倍
    • 与Exp/imp 相同的功能,进一步的附加功能
      • 并行处理、外部表
  • exp/imp的互换性
    • exp/imp 与Data Pump中,转储文件没有互换性
    • 10g中也可以使用exp/imp功能
 
  • 使用方法
    • expdp/impdp命令
    • Enterprise Manager
    • DBMS_DATAPUMP PL/SQL package
    • 其他,外部表等作为引擎来内部使用
  • 相关资料
    • Oracle Database Utility  11g 发行版本1(11.1)
    • http://otndnld.oracle.co.jp/document/products/oracle11g/111/doc_dvd/server.111/E05768-02/toc.htm
 

Data Pump 概要图

datapump1  

expdp/impdp与exp/imp比较

 

datapump2

 

Data Pump的导出工具(expdp)

  • Expdp中可以使用的模式
  datapump3 -- full 全库导出 示例, 一般不推荐全库导出!因为一般你都是导出你的应用程序用户数据啊!!你要SYS/SYSTEM的数据干什么呢?对不对啊!
$ expdp scott/tiger full=y

-- 表模式例
$ expdp scott/tiger dumpfile=exp.dmp tables=emp,dept

  因为在Data Pump中,不是通过客户端而是通过服务器来执行写出的,所以需要指定执行处理的目录位置;(事先准备)对于导出转储文件的目录,在DB上制成目录对象。(执行时)通过DIRECTORY参数来指定目录对象   -- 制成目录对象 SQL > CREATE DIRECTORY DPUMP_DIR1 AS ‘/home/oracle/oradata/dpump_dir’; -- 赋予权限 SQL > GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO scott; $  expdp scott/tiger tables=emp,dept directory=dpump_dir1   如果没有用参数指定目录时,没有OS环境变量「DATA_PUMP_DIR」的话,请参考目录对象「DATA_PUMP_DIR」。 -- 设定环境变量 $  set DATA_PUMP_DIR=DPUMP_DIR1; export DATA_PUMP_DIR $  expdp scott/tiger schemas=scott  

Export – filter处理

基于filter处理,可以详细设定成为导出对象的object。 用INCLUDE参数指定导出对象object $  expdp scott/tiger include=table $  expdp scott/tiger include=index   用EXCLUDE参数指定从导出对象排除的object $  expdp scott/tiger exclude=index:\”LIKE \’EMP%\’\” 可以指定LIKE以及IN   INCLUDE以及EXCLUDE参数是排他的,请不要同时指定 为了不用间隔符来分割空白,需要双引号 也有由于OS,可能会需要转义字符==》所以这里有参数文件(parfile)的话 比较简单  

导出参数文件

 
  • 可以读入记述参数的文件
  • 参数文件中不需要转义字符
  • 制成记述了参数的文件,执行时指定PARFILE参数
--参数文件内容确认 $  cat parfile.txt EXCLUDE=TABLE:”IN(‘DEPT’,’EMP)” EXCLUDE=INDEX:”LIKE ‘EMP%’” EXCLUDE=PROCEDURE DIRECTORY=dpump_dir -- 指定参数文件导出 $  expdp scott/tiger parfile=parfile.txt  

导出并行化

  • 并行导出
    • 可以并行执行导出处理
      • 用PARALLEL参数可以指定并行度
      • 可以各自指定导出地址目录
-- 指定并列度 $  expdp scott/tiger parallel=3 dumpfile=dpump_dir1:expdat%U.dmp, dpump_dir2%U.dmp -- 确认刚刚生成的转储文件 $  ls –lR dpump_dir1: …….expdat01.dmp …….expdat02.dmp dpump_dir2: …….expdat01.dmp   没有指定替换变量时(%U),dumpfile的文件数需要配合parallel的数值 指定时,被指定的文件在Round robin中使用  

导出估计 estimate

  • 不生成转储文件,可以估计被生成转储文件的尺寸
    • 可以用ESTIMATE参数指定估计模式
      • 参数值中可以如下所示进行设定
        • BLOCKS...块尺寸中,对object的块数进行估计(精度不高)
        • STATISTICS...以统计信息为基础的估计(高精度)
      • 仅仅导出估计时,请指定ESTIMATE_ONLY=y
  $  expdp scott/tiger tables=emp,dept estimate=blocks estimate_only=y  

导出估计 estimate 例子

  • 制成40万行,2GB的数据,测量估计精度
  • BLOCKS
$  expdp scott/tiger tables=test estimate=blocks estimate_only=y Estimate in progress using BLOCKS method... Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA .  estimated “SCOTT".“TEST"                         3.062 GB Total estimation using BLOCKS method: 3.062 GB  
  • STATISTICS
$  expdp scott/tiger tables=test estimate=statistics estimate_only=y Estimate in progress using STATISTICS method... Processing object type TABLE_EXPORT/TABLE/TBL_TABLE_DATA/TABLE/TABLE_DATA .  estimated “SCOTT".“TEST"                         1.947 GB Total estimation using STATISTICS method: 1.947 GB  
  • 确认实际的尺寸
$  ls –l ……. 2092179456 …. expdat.dmp  约1.948GB  

导入

  • 通过用impdp可以指定参数,从用expdp制成的转储文件中进一步缩小对象数据范围,就可以进行导入了
  • 缩小对象数据范围的例子
--从转储文件中仅仅导出emp表以及dept表 $  impdp scott/tiger tables=emp,dept --从转储文件中仅仅导出索引 $  impdp scott/tiger include=index  

外部表(卸载/加载)

  • 使用9i开始搭载的功能——外部表,就可以在外部文件中高速地将数据卸载
  • 被制成的是二进制文件
  • 可以重新加载被卸载的外部文件
 
  • 9i 外部表与 10g 以后的外部表的差异
 
Oracle 9i Oracle 10g以后
仅仅加载 可加载/卸载
制成以外部文件(CSV文件)为基础的外部表 卸载后可以已制成的文件为基础制成外部表
利用ORACLE_LOADER 利用ORACLE_DATAPUMP型
可以并行化
 

外部表 卸载

  • 利用外部表的功能,可以卸载数据
  • 利用9i中也可以使用的外部表的句法,在数据型中指定ORACLE_DATAPUMP
  • 通过记录SQL的查询可以自由卸载
SQL> create table dept_external1 organization external ( type oracle_datapump default directory dpump_dir location('dept.dmp') ) as select * from dept;
  • 用DPUMP_DIR指定的目录下会制成名为「dept.dmp」的转储文件
 
  • 利用外部表的功能,读入被卸载的转储文件可以加载
--利用外部表的功能,加载被卸载的转储文件 SQL> create table dept_external2 ( DEPTNO         NUMBER(2), DNAME          VARCHAR2(14), LOC                VARCHAR2(13) ) organization external (      type oracle_datapump default directory dpump_dir      location ('dept.dmp') );   已制成的外部文件可以与一般的表一样 进行SELECT查询 无法进行插入/删除等DML操作   作为外部文件,指定被卸载的转储文件  

Data Pump 11g新功能

  • 11g新功能
  • 压缩转储文件(Advanced Compression Option)
    • 压缩数据以及元数据可以在转储文件中导出。
  • 转储文件加密(Advanced Security Option)
    • 将数据与元数据加密可以在转储文件中导出。
  • 分区的导入方法
    • 可以选择分区表的导入方法
  • 数据变换(DATA_REMAP API )
    • 变换特定的column的数据可以进行导入
  Data Pump 压缩
  • COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
  • NONE...导出操作中压缩无效
  • METADATA_ONLY(default)...所有的元数据都以压缩形式写入到转储文件中
(以下的操作需要Advanced Compression选项)
  • DATA_ONLY...所有的数据都以压缩形式写入到转储文件中
  • ALL...同时压缩数据元数据
  • (例)指定架构。同时压缩数据,元数据,对转储文件scott.dmp导出
$expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott.dmp COMPRESSION=ALL SCHEMAS=scott   Data Pump 加密
  • ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE}
  • ALL:所有的数据以及元数据加密有效
  • DATA_ONLY:仅对数据加密
  • ENCRYPTED_COLUMNS_ONLY:仅对已加密的列进行加密
  • METADATA_ONLY:仅对元数据加密
  • NONE:数据不被加密
   
  • (例)转储文件中仅仅对数据加密的操作
$ expdp scott/tiger DIRECTORY=dpump_dir DUMPFILE=scott_enc.dmp SCHEMAS=scott ENCRYPTION=data_only ENCRYPTION_PASSWORD=tiger