日期:2014-05-16  浏览次数:20570 次

Oracle Data Pump 工具系列:使用 %U 和 filesize 参数将大数据拆分成小文件导出

前几天,Daniel 因知识和经验不到位闹出了个大笑话,直至今天还人要因为 Daniel 这个无意的错误从遥遥千里的长沙赶到帝都。

事情的经过是这样的:

金税三期重庆试点刚刚上线一月有余,国家审计署需要对项目的各厂商的数据玩玩审计,于是老板就要我将我们目前最全的近期库全库

导出交给国家审计署的工程师,结果笑话就出来了。

接到任务后,我二话不说就直接 expdp 往服务器一跑,和心理想的一样,导出来的 dump 估计至少要 700 多个 G,心里一凉,近期库

上平时导 dump 用的盘一共才 500G,更别说剩余空间才 300 多G,怎么办呢?想尽了各种办法之后,最后只好无赖地在一台有几T存储

空间的 ftp 服务器上安装了 Oracle 11g 软件,用 exp 导出来了。

数据总算是导出来了,可是可把审计署那小子给伤着了,从25号到今天,从ftp服务器上下载下来共花了几天,中途几次出错,都被迫

从下,今天走的时候都在给我抱怨,真担心回长沙后导不进去又得回帝都来……

晚上回来,查了查 data pump 能否将大数据拆分成小文件导出,果然可以。

《Oracle? Database Utilities11g Release 2 (11.2)》中就有介绍:

expdp job 的 dumpfile 参数中就可以指定多个文件,各个文件之间用英文逗号隔开:
DUMPFILE=[directory_object:]file_name [, ...]

也可以通过使用替换变量%U的模板来指定生成的多个dump文件的文件名格式。示例如下:
expdp system/oracle123 dumpfile=test%U.DMP logfile=exp_test.log directory=dpump_dir schemas=scott content=data_only  FILESIZE=10M

如果使用%U替换变量,则生成的文件的文件名中,%U的占位符替换成01-99的两位定长递增的整数。例如 test%U.DMP 将导出
为 test01.DMP、test02.DMP ...

如果还指定了 filesize 参数,则每个导出的 dump 文件都会有一个大小上限,并且不可扩展。如果 dump 文件集需要更多的
空间,且使用了 %U 替换变量,则只要存储设备上空间足够将自动新建一个 filesize 参数所指定的大小的 dump 文件。

expdp 工具会按照 dumpfile 参数中指定的文件顺序进行处理。如果 expdp job 因为达到文件大小上限而需要更多的文件或
执行并行作业,则在指定了%U文件模板的情况下,会自动创建所修的额外文件。

尽管我们可以再 dumpfile 参数中指定多个文件,但是 export job 可能只需要这些文件中的一部分就可以存放导出的数据。
export job 结束时显示的 dump 文件集才是真正使用到的文件。这些文件才是使用此 dump 文件集只需 import 操作时所
必需的。任何没有备用到的文件都可以丢弃。

immdp 导入示例如下:

impdp system/oracle123 dumpfile=test%U.DMP directory=dpump_dir schemas=scott logfile=imp_test.log


转载请注明作者出处及原文链接:


http://blog.csdn.net/xiangsir/article/details/8729037