Oracle数据迁移优化

1、关闭归档日志

2、禁用索引(经实验,如果drop掉索引,而非禁用索引,则可以明显提升impdp导入速度,40分钟的导入可以缩短为10分钟)

3、禁用主、外键

4、禁用触发器

5、使用expdp/impdp完成导出和导入,配合parallel参数(这个参数配置网上很多讲解,我就不细说了)

6、impdp执行的时候,往往IO是瓶颈,可以考虑对IO参数进行如下设置:

filesystemio_option=setall

disk_asych_io=TRUE

适当调大db_writer_process参数

7、如果迁移的是分区表,且只迁移数据,不迁移结构,则impdp会忽略parallel参数,串行一个一个分区导入,所以此时需要进行优化:

摘自Oracle官方文档:http://docs.oracle.com/cd/E11882_01/server.112/e22490/dp_import.htm#SUTIL923



可以考虑采用如下的方式对分区表的导入进行优化:

1)先通过user_tab_partitions查出“表名.分区名”形式

2)然后使用expdp为每个分区表按parallel线程数平均分配每个导出的dump文件中所含的分区数

3)最后使用impdp根据之前生成的parfile完成数据的导入

此处具体做法可以参考《Oracle DBA工作笔记》中的分区表的水平拆分和垂直拆分部分。


大功告成,此时parallel参数就可以起作用了,并行同时导入多个分区了!~


附:

《Oracle DBA工作笔记》中的shell代码摘录整理如下:

#!/bin/bash

parallel_no=16
old_schema=old_user
username=new_user
table_name=$1

for i in {1..${parallel_no}}
do
sqlplus $username/xxx <<EOF
spool ${table_name}_partition_parallel_$i_parfile
select 'tables=' from dual;
spool off

spool ${table_name}_partition_parallel_$i_parfile append
select '${old_schema}' || '.' || table_name || ':' || partition_name || ',' from (
     select rownum, mod(rownum, ${parallel_no})+1 parallel_no, table_name, partition_name, num_rows
      from user_tab_partitions
    where table_name = upper('$table_name')
order by num_rows
      desc nulls last
)
where parallel_no = $i;
spool off
EOF
#上面spool输出的是一行,所以去掉该行中的最后一个逗号
sed -i '$s/.$//' ${table_name}_partition_parallel_$i_parfile

echo 
"expdp $username/xxx
dumpfile=${i}_${table_name}.dmp
parfile=${table_name}_partition_parallel_$i_parfile &" >> ${table_name}_partition_parallel_expdp.sh &

echo
"nohup impdp $username/xxx dumpfile=${i}_${table_name}.dmp
parallel=2
include=table_data
parfile=${table_name}_partition_parallel_$i_parfile &" >> ${table_name}_partition_parallel_impdp.sh &

done


代码解读:

1、 mod(rownum, ${parallel_no})+1 parallel_no,将每个表的分区平分到每个线程中,起几个线程,每个表就会生成几个dump文件
2、循环每个i来生成文件的时候,可以使用&后台执行提高效率
3、由于生成的文件中,impdp/expdp都是&后台执行的,所以可以同时执行所有的expdp.sh文件,然后再同时执行所有的impdp.sh文件,每个i都是独立的,所以不会互相影响

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值