合 Oracle数据泵expdp和impdp之parallel参数
Tags: Oracle数据泵expdpimpdp并行逻辑导出导入加速parallel
简介
EXPDP命令的PARALLEL和FILESIZE参数联合使用在“某些情况下”可以提高备份的效率。
这种方法可以完成并行的逻辑备份。
expdp
EXPDP命令的PARALLEL和FILESIZE参数联合使用在“某些情况下”可以提高备份的效率。这种方法可以完成并行的逻辑备份。
PARALLEL工作原理:控制执行任务的最大线程数。当指定参数值为1时,表示最多只启动一个线程处理数据,设置为3时,表示最多启动三个线程并行处理数据,由于同一时间一个DUMP文件只允许一个线程处理,所以输出的文件若只有一个,即使PARALLEL=10,也只有1个线程进行数据输出,其他9个空闲。所以PARALLEL需要与FILESIZE参数一起使用,指定每个DUMP文件的大小。
在expdp中,parallel参数值应小于等于dump文件数。如果prarallel值设置过高,则有可能报ORA-39095 error。ORA-39095: Dump file space has been exhausted: Unable to allocate 8192 bytes
对于导出来说,由于dump文件只能由一个线程进行操作(包括I/O处理),因此如果输出的DUMP文件只有一个,即使你指定再多的并行,实际工作仍然是一个,而且还会触发ORA-39095错误。因此,建议设置该参数小于或等于生成的DUMP文件数量。那么,如何控制生成的DUMP文件数量呢?
EXPDP 命令提供了一个FILESIZE参数,用来指定单个DUMP文件的最大容量,要有效的利用parallel参数,filesize参数必不可少。
举 例:某用户对象占用了4G左右的空间,实际导出后的DUMP文件约为3G,我们尝试在导出该用户时指定并行度为4,设置单个文件不超过500M,则语法如下:
1 | $ expdp user/pwd directory=dump_file dumpfile=expdp_20100820_%U.dmp logfile=expdp_20100820.log filesize=500M parallel=4 |
impdp
IMPDP有所不同,会先启动一个WOKER进程进行METADATA导入,然后启动多个WORKER进程导入,所以在前期只会看到1个WOKER在导入METADATA,而且IMPDP如果PARALLE=4也需要>=4个DMP文件,也可以使用%U来进行导入。而对于impdp来说,对单个文件添加parallel也可以实现并行导入。
Parallel在impdp中的参数与expdp中有所不同。
摘抄官方文档一句话:If the source of the import is a dump file set consisting of files, then multiple processes can read from the same file, but performance may be limited by I/O contention.
该意为:在impdp中,parallel参数可以在一个文件或者多个文件中均可以使用,但是parallel参数不是越大越好,同样会受到I/O的限制。
对于导入来说,使用parallel参数则要简单的多,导入更能体现parallel参数的优势。 参数设置为几,则认为同时将几张表的内容导入到库中。
举例:某dmp文件中包含了200张表,我们尝试在导入该DMP文件时指定并行度为10,则语法如下:
1 | impdp user/pwd directory=dump_file dumpfile=expdp_20100820.dmp logfile=impdp_20100820.log parallel=10 |
查询CPU个数: cat /proc/cpuinfo |grep "processor"|wc -l
rac
在11gR2 rac后,EXPDP 和 IMPDP的WORKER进程会在多个INSTANCE启动,所以DIRECTORY必须在共享磁盘上,如果没有设置共享磁盘,那么必须指定CLUSTER=N
参数来防止报错。