0
点赞
收藏
分享

微信扫一扫

expdp lob segment 并行迁移

针对导出,建议使用expdp中的query参数,根据某些列上的数据特点,进行分条件的并行导出,可以极大的提升导出速度。如果无法得知表中的均衡字段,使用rowid_block_number取出数据行所在的block id,然后进行mod取余分批导出。

注:虽然rowid伪列是以base64字符显示的,但在Oracle内部存储的时候还是以二进制表示的。

可以执行如下命令对单表进行分片导出。

for ((i=0;i<=7;i++));
do
nohup expdp \'/ as sysdba\' tables=EMR_FM.BO_EMR_BINARY query=EMR_FM.BO_EMR_BINARY:\"where mod\(dbms_rowid.rowid_block_number\(rowid\)\,8\) = ${i}\" directory=dir_expdp dumpfile=BO_EMR_BINARY${i}.dmp logfile=BO_EMR_BINARY${i}.log &
echo $i
done

对数据切分8份,并行导出320GB的lob segment用了接近10分钟的时间。

导出问题解决后,执行导入命令如下:

nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY0.dmp logfile=imp10.log table_exists_action=append
cluster=no &

nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY1.dmp logfile=imp11.log table_exists_action=append
cluster=no &

因为不能覆盖表中数据,所以table_exists_action选择了append。但是实际上此种方式并不能并行导入,后边的导入任务会等待表锁释放,实际上还是串行执行。而真正的并行导入需要用到如下参数,DATA_OPTIONS=DISABLE_APPEND_HINT,不使用append的hint后数据开始并行导入,320GB大小的lob segment 8个并行1个小时完成导入。具体导入命令如下:

--分片导入BO_EMR_BINARY
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY0.dmp logfile=imp10.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY1.dmp logfile=imp11.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY2.dmp logfile=imp12.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY3.dmp logfile=imp13.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY4.dmp logfile=imp14.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY5.dmp logfile=imp15.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY6.dmp logfile=imp16.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &
nohup impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY7.dmp logfile=imp17.log DATA_OPTIONS=DISABLE_APPEND_HINT CONTENT=DATA_ONLY cluster=no &

 

最后通过以下方式获取BO_EMR_BINARY元数据信息,在目标库执行主键,外键,索引的添加。
impdp system/oracle2016@orcl directory=dir_impdp dumpfile=BO_EMR_BINARY0.dmp  sqlfile=BO_EMR_BINARY.sql

举报

相关推荐

0 条评论