一、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;
注意上述路径:如是在linux下指定路径为/ 例如:
create directory dump_file_dir as '/u02/oradata/dmp'
1、以下导出emp、dept表,并指定只导出emp表中sal>1500的数据:
上述语句需注意的是,在使用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服务器端执行:
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条件里面的大小写
执行结果:
3、跨数据库链接方式导出数据:
4、并行方式导出提高效率:
以下为导出ming对象,不加任何参数:
导出数据大小为:1.67G, 用时为:2分40秒,由于数据量较小,所以体现不了expdp效率。
除了默认参数外,expdp真正提高效率的参数是parallel,即指并行度。需要注意的是,使用parallel参数同时需使用filesize参数,以下示例:
parallel=4时效果也不是很明显。
parallel=2时,也是差不多,
由于数据量不大,所以体现不了expdp的效率。
但同时需要注意的效率是否真正提升,并不是只增加并行参数,具体要视情况而定。
七、导入对象到目标SCHEMA:
需求:导出a服务器中scott用户下的对象,到b服务器中同名用户,用户名和默认表空间均相同。
在imp命令环境下,如果想只导入对象定义而不导入数据,可以通过参数ROWS=n来实现,而impdp没有提供rows参数,不过它提供了一个更专业的参数:content,该参数有三个属性值:
* ALL:导入对象定义和数据,该参数的默认值就是all
* DATA_ONLY:只导入数据
* METADATA_ONLY: 只导入对象定义
示例:只导入对象定义。
*************************************
近段时间工作较忙,后续有时间继续更新……