Data Pump(数据抽取)介绍

从10g开始,Oracle提供更高效的Data Pump(即expdp/impdp)来进行数据的导入和导出,老的exp/imp还可以用,但已经不建议使用。注意:expdp/impdp和exp/imp之间互不兼容,也就是说exp导出的文件只能用imp导入,expdp导出的文件只能用impdp导入。

 

Data Pump的组成部分

 
Data Pump有以下三个部分组成:
  1. 客户端工具:expdp/impdp 
  2. Data Pump API (即DBMS_DATAPUMP)
  3. Metadata API(即DMBS_METADATA)
通常情况下,我们都把expdp/impdp等同于Data Pump,但从上面可以知道,实际上它只是Data Pump的一个组成部分,其实真正干活的是两个API,只是它们隐藏在后台,平时很少被注意,但如果出现一些莫名其妙的错误(如internal error等),通常是因为这两个API损坏,跑脚本重新编译它们即可。
 

Data Pump相关的角色

 
默认情况下,用户可以导出/导入自己schema下的数据,但如果要导出/导入其它schema下的数据,必须要把以下两个角色赋予该用户:
  • DATAPUMP_EXP_FULL_DATABASE 
  • DATAPUMP_IMP_FULL_DATABASE
当然,sys,system账户和dba角色默认拥有以上两个角色。
 

Data Pump数据导入方法

  1. 数据文件拷贝:这种是最快的方法,dumpfile里只包含元数据,在操作系统层面拷贝数据文件,相关参数有:TRANSPORT_TABLESPACES,TRANSPORTABLE=ALWAYS 
  2. 直接路径加载:这是除了文件拷贝之外最快的方法,除非无法用(比如BFILE),否则都用这种方法
  3. 外部表:第1,2种无法用的情况下,才会使用外部表
  4. 传统路径加载:只有在以上所有方法都不可用的情况下,才会使用传统路径加载,这种方法性能很差 
 

Data Pump Job

 
当执行expdp/impdp时,其实是起了job执行导出导入工作,一个Data Pump job由以下三部分组成:
  1. 主进程(master process):控制整个job,是整个job的协调者。
  2. 主表(master table):记录dumpfile里数据库对象的元信息,expdp结束时将它写入dumpfile里,impdp开始时读取它,这样才能知道dumpfile里的内容。
  3. 工作进程(worker processes):执行导出导入工作,根据实际情况自动创建多个工作进程并行执行,但不能超过参数PARALLEL定义的个数。
 

监控Job状态

 
在屏幕的输出、logfile里都能看到当前Data Pump Job的运行情况,在数据库里也可以查询视图 DBA_DATAPUMP_JOBS, USER_DATAPUMP_JOBS, or  DBA_DATAPUMP_SESSIONS。
对于时间比较长的Job,可以在动态视图V$SESSION_LONGOPS查看当前Job完成情况以及预估多久能全部完成,具体字段的意义如下:
[plain]  view plain  copy
 
 print?
  1. USERNAME - job owner  
  2. OPNAME - job name  
  3. TARGET_DESC - job operation  
  4. SOFAR - megabytes transferred thus far during the job  
  5. TOTALWORK - estimated number of megabytes in the job  
  6. UNITS - megabytes (MB)  
  7. MESSAGE - a formatted status message of the form:  
  8. 'job_name: operation_name : nnn out of mmm MB done'  

创建Directory

 
Data Pump不像exp/imp可以在客户端执行,它必须得在服务器端执行,它生成的所有文件都放在服务器端,因此在Oracle里必须得先创建directory对象,下面是一个例子:
[sql]  view plain  copy
 
 print?
  1. SQL> CREATE DIRECTORY dpump_dir1 AS '/usr/apps/datafiles';  

创建了directory对象之后,还要把读写权限赋给执行Data Pump的用户,如下所示:
[sql]  view plain  copy
 
 print?
  1. SQL> GRANT READ, WRITE ON DIRECTORY dpump_dir1 TO hr;  
 

导出模式

 
有以下5种导出模式,它们之间是互斥的,不可以同时使用,注意:有些schemas是不能被导出的,如 SYSORDSYS, and  MDSYS等。
 

Full模式

 
设置Full=y(默认为n),导出全库,例子:
[plain]  view plain  copy
 
 print?
  1. > expdp user_name FULL=y DUMPFILE=expdat.dmp DIRECTORY=data_pump_dir LOGFILE=export.log  

Schema模式

 

导出一个或多个Schemas(参数SCHEMAS),默认导出当前用户的schema,只有拥有DATAPUMP_EXP_FULL_DATABASE角色才能导出其它Schemas, 例子:

 

[plain]  view plain  copy
 
 print?
  1. > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=expdat.dmp SCHEMAS=hr,sh,oe   

 

Table模式

 
导出表、分区以及它们依赖的对象,参数TABLES的语法如下:
[plain]  view plain  copy
 
 print?
  1. TABLES=[schema_name.]table_name[:partition_name] [, ...]  

如果schema_name省略,表示导出当前用户schema下的表,
[plain]  view plain  copy
 
 print?
  1. expdp hr TABLES=employees,jobs DUMPFILE=dpump_dir1:table.dmp NOLOGFILE=YES  

Tablespace模式

 
导出一个或多个Tablespaces,参数TABLESPACES指定要导出的表空间
[plain]  view plain  copy
 
 print?
  1. > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tbs.dmp   
  2. TABLESPACES=tbs_4, tbs_5, tbs_6  

Transpotable Tablespace模式

 
只导出Tablespace的元数据,数据文件可由操作系统层拷贝
[plain]  view plain  copy
 
 print?
  1. > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=tts.dmp  
  2. TRANSPORT_TABLESPACES=tbs_1 TRANSPORT_FULL_CHECK=YES LOGFILE=tts.log  

导出过程中的过滤

 

数据过滤

 
参数QUERY在行级别解析数据,其语法如下:
[plain]  view plain  copy
 
 print?
  1. QUERY = [schema.][table_name:] query_clause  
 
下面是一个例子:
[plain]  view plain  copy
 
 print?
  1. QUERY=employees:"WHERE department_id > 10 AND salary > 10000"  
  2. NOLOGFILE=YES   
  3. DIRECTORY=dpump_dir1   
  4. DUMPFILE=exp1.dmp  

参数SAMPLE指定导出百分比,其语法如下:
[plain]  view plain  copy
 
 print?
  1. SAMPLE=[[schema_name.]table_name:]sample_percent  

下面是一个例子:
[plain]  view plain  copy
 
 print?
  1. > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=sample.dmp SAMPLE=70  

元数据过滤

 
元数据解析采用EXCLUDE,INCLUDE参数,注意:它们俩互斥。
EXCLUDE例子:
[plain]  view plain  copy
 
 print?
  1. expdp FULL=YES DUMPFILE=expfull.dmp EXCLUDE=SCHEMA:"='HR'"  
  2. > expdp hr DIRECTORY=dpump_dir1 DUMPFILE=hr_exclude.dmp EXCLUDE=VIEW,  
  3. PACKAGE, FUNCTION  

INCLUDE例子:
[plain]  view plain  copy
 
 print?
  1. SCHEMAS=HR  
  2. DUMPFILE=expinclude.dmp  
  3. DIRECTORY=dpump_dir1  
  4. LOGFILE=expinclude.log  
  5. INCLUDE=TABLE:"IN ('EMPLOYEES', 'DEPARTMENTS')"  
  6. INCLUDE=PROCEDURE  
  7. INCLUDE=INDEX:"LIKE 'EMP%'"  

本文转自 张冲andy 博客园博客,原文链接:http://www.cnblogs.com/andy6/p/6071899.html如需转载请自行联系原作者

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值