一、data pump概述:

data pump方式的导入和导出对应命令行impdp和expdp,这两个命令与imp、exp非常类似,但功能和效率差异巨大,或者说基本没什么相似的地方,并且exp命令生成的dump文件与expdp命令生成的dump文件也不兼容。

主要特性:

*  支持并行处理导入、导出任务。

*  支持暂停和重启动导入、导出任务

*  支持通过Database Link方式导出或导入远端数据库中对象。

*  支持在导入时通过REMAP_SCHEMA、REMAP_DATAFILE、REMAP_TABLESPACE几个参数实现导入过程中自动修改对象性属主、数据文件或所在表空间。

*  导入/导出时提供了非常细粒度的对象控制。

Data Pump 导入/导出工具是一个服务器端的工具,该工具一般在目标服务器上执行,导出或导入本地的对象(唯一的例外是通过IMPDP/EXPDP)的NETWORK_LINK参数,能够处理远端数据,不过这仍需要通过本地的Database Link对象)到本地磁盘,并且通过DUMPFILE参数指定Dump文件,并不是指定本地的详细文件路径,而只是指定文件名,另一参数DIRECTORY用来指定dump文件所在路径。注意directory参数也并非直接指定本地磁盘路径,而是指定oracle数据库的Directory对象。

二、Data Pump有以下几种方式导入或导出数据:

 * 直接路径方式  (默认使用此方式处理数据)

 * 外部表方式

 *  复制数据文件方式

 *  网络链接方式。

三、调用方式:

1、命令方式调用,类似imp、exp使用

如:expdp scott/tiger dumpfile=

2、参数文件方式调用

如:expdp username/password@tnsname parfile=parameter.dat logfile=log.log

3、交互方式调用

四、操作模式:

1、整库模式,对应参数FULL

2、schema模式,对应参数SCHEMA,中对应多个对象

3、表模式,对应参数tables

4、表空间模式,对应参数tablespaces

5、传输表空间模式,对应参数:transport_tablespaces

五、过滤数据:

Data Pump实现对表中记录的过滤依赖于QUERY和SAMPLE两个参数,

query参数与exp命令下使用相似,如,表a仅导出所有ID>5的记录,表b导出所有ID<30的记录:query=A:"WHERE ID>5",B:"WHERE ID<30"

SAMPLE :用来指定导出数据的百分比,可指定值的范围从0.000001到99.999999

语法如下:

SAMPLE =[[schema_name.]table_name:]sample_percent

指定该参数后,expdp导出将自动控制导出的记录量。如导出a表中50%的记录,设置sample参数如下:

sample=a:50

 六、过滤对象

data pump 中过滤对象也是两个参数:EXCLUDE和INCLUDE  (排除与包含)

1、exclude 反规则

指定不被包含的对象类型或对象名称,exclude=object_type[:name_clause][,...]

如:exclude=index:"like 'idx_table%'",constraint:"like 'ckc_tblb%'",grant

 

2、include 正规则

指定包含的对象类型或对象名称。使用与exclude一样

 ============================================================

以下操作示例:

在使用impdp/expdp命令前,首先需创建相关directory对象,并授予相应用户读写权限

查看系统目录对象:select * from dba_directaries;

data pump方式导入与导出(impdp,expdp)_第1张图片

注意上述路径:如是在linux下指定路径为/   例如:

create directory dump_file_dir as '/u02/oradata/dmp'

1、以下导出emp、dept表,并指定只导出emp表中sal>1500的数据:

data pump方式导入与导出(impdp,expdp)_第2张图片

上述语句需注意的是,在使用query参数时,转义字符需注意,windows传说是使用双引号转义,但实验好像不是传说那样子的,也跟linux下一样使用“\”来转义。为了避免转义字符问题,可以使用指定parfile来执行。

 建立相对应该的parfile文件如下,并保存为par1.par:

directory=dump_file_dir
dumpfile=expdp_20120522.dmp
logfile=expdp_201205.log
tables=(emp,dept)
query=emp:"where sal>1500"

在linux服务器端执行:

data pump方式导入与导出(impdp,expdp)_第3张图片

 2、高级过滤示例:

建立如下par2.par:

directory=dump_file_dir
dumpfile=expdp_20120522_02.dmp
logfile=expdp_201205_02.log
include=table:"like 'EMP%'"
query=emp:"where sal>1500"

 注意:上述like条件里面的大小写

执行结果:

data pump方式导入与导出(impdp,expdp)_第4张图片

 3、跨数据库链接方式导出数据:

4、并行方式导出提高效率:

 以下为导出ming对象,不加任何参数:

data pump方式导入与导出(impdp,expdp)_第5张图片

导出数据大小为:1.67G, 用时为:2分40秒,由于数据量较小,所以体现不了expdp效率。

除了默认参数外,expdp真正提高效率的参数是parallel,即指并行度。需要注意的是,使用parallel参数同时需使用filesize参数,以下示例:

data pump方式导入与导出(impdp,expdp)_第6张图片

 parallel=4时效果也不是很明显。

data pump方式导入与导出(impdp,expdp)_第7张图片

parallel=2时,也是差不多,

由于数据量不大,所以体现不了expdp的效率。

但同时需要注意的效率是否真正提升,并不是只增加并行参数,具体要视情况而定。

 

七、导入对象到目标SCHEMA:

需求:导出a服务器中scott用户下的对象,到b服务器中同名用户,用户名和默认表空间均相同。

        在imp命令环境下,如果想只导入对象定义而不导入数据,可以通过参数ROWS=n来实现,而impdp没有提供rows参数,不过它提供了一个更专业的参数:content,该参数有三个属性值:

*  ALL:导入对象定义和数据,该参数的默认值就是all

*  DATA_ONLY:只导入数据

*  METADATA_ONLY: 只导入对象定义

示例:只导入对象定义。

 *************************************

近段时间工作较忙,后续有时间继续更新……