数据泵impdp上亿数据量的生产环境导入参考(完全本人总结,与公司机密无关)

总述:

         目前动不动几十年的数据量迁移,10年前的exp/imp已经成为历史,对于1G以内的expdp就不用看此文了,对于很多大行业名声数据库相关的历史数据迁移,往往都是100G以上的dmp,而且做过impd泵入的数据迁移专家都知道,这种泵入弄不好相当消耗时间,有些项目估计有一次泵入消耗时间超过三天以上的。

           我亲自跟过一个宁夏项目,到了现场,大家都知道数据泵在泵,但是什么进度现场都一抹黑,甚至项目经理打算停止泵入(流汗了,我的感觉是现在企业的技术深度太浅,尤其我们作为第一家上市公司是这样,其他的公司估计也略见一斑),老哥到了现场,宁夏的厅长还是很亲民的,居然和工程师面对面的沟通,十几年的社保工作,第一次遇到这种场景,随后听说宁夏的政府云也全部启用了虚拟化设备,成本大大下降,这厅长我感觉可以去人社部上班了。

            老哥还是比较能钻的,曾经花了半年的长途车上时间(项目离家远,有孩子了,得每周回去,平时上班没时间连续看这些连续性比较强的资料),看完了那个300M的oracle体系结果,大家可以下载看看。

具体步骤:


生产库impdp环境准备:

0、这么大数据量切换,无论是新库还是在线运行的生长库,不是最好,而是必须建议客户停产切换,在线不停产我也做过几次,风险太大了(遇到一次直接客户端消费堵塞两小时,堵塞还是小事,数据出问题那就不知道啥结果了,不想上新浪新闻不想客户负责人失业的话,还是必须建议停产)
1、归档关闭状态(在线切换的话不要关,亲自测试过不关闭,时间能慢一些,但是没有想象中那么离谱,不会翻倍的,但是需要盯空间使用率 df -k别空间满了,找个小兵盯着就行)
2、数据量估算,表空间估算,提前估算扩充好,undo也要足够大,impdp用undo很厉害,检查users表空间大小和回滚段表空间大小
3、备份索引语法,删除非uniquee索引  (不能全删index,uniquee的建议保留)
XXSI下index语法备份

select 'select to_char(dbms_metadata.get_ddl(''INDEX'','''||index_name||'''))||'';'' from dual union all' from  user_indexes where table_name in ('AB01','AB02','AB06','AB07','AB09','AB13','AB14','AB15','AB44','AC01','AC02','AC04','AC05','AC06','AC43','AC49','AC62','AC69','AC88','AC90','AC95','AC96','AE03','AE06','AE29','AE29','AE54','AE58','IC02','IC12','IC40','IC87','IC89','IC90','IC91','ZA75','ZB17','ZC70','ZC71','ZC72','ZC73','ZC90','ZI10') and uniqueness<>'UNIQUE' ;
删除语法
select 'drop index '||index_name||' ;' from user_indexes where table_name in ('AB06','AB07','AB09','AB13','AB14','AB15','AB44','AC04','AC05','AC06','AC43','AC49','AC62','AC69','AC88','AC90','AC95','AC96','AE03','AE06','AE29','AE29','AE54','AE58','IC02','IC12','IC40','IC87','IC89','IC90','IC91','ZA75','ZB17','ZC70','ZC71','ZC72','ZC73','ZC90','ZI10') and uniqueness<>'UNIQUE' 

4、关闭数据库相关表、索引日志(减少redo)
select 'alter index '||index_name||' nologging;' from user_indexes union
select 'alter table '||table_name||' nologging;' from user_tables;

如果使用了vpd请忽略数据权限    grant exempt access policy to qhsi;否则泵入会出异常(资料google一下就知道含义了)


5、导出导入命令参考,导出导入的PARALLEL最好为1(PARALLEL>1尝试过,发现在rac环境下,imdp是多节点运行并行运行,每个机器上都必须有一份expdp的dmp文件,不然会提示找不到文件,有PARALLEL>1的尝试的经验分享的请回复一下评论区加个连接,共同探讨学习一下)

expdp XX_data/XX_data dumpfile=expdp_dir:XX_data20131121 logfile=expdp_dir:XX_data20131121.log CONTENT=DATA_ONLY tables=ab01,AB02,AB06,AB07,AB09,AB13,AB14,AB15,AB44,AC01,AC02,AC04,AC05,AC06,AC43,AC49,AC62,AC69,AC88,AC90,AC95,AC96,AE03,AE06,AE29,AE29,AE54,AE58,IC02,IC12,IC40,IC87,IC89,IC90,IC91,ZA75,ZB17,ZC70,ZC71,ZC72,ZC73,ZC90,ZI10     EXCLUDE=CONSTRAINT:\"like \'%\'\" EXCLUDE=INDEX:\"like \'%\'\" status=10

这个脚本导出纯数据,因为目标库已经是生产环境,请了解参考使用
impdp XXSI/XXSI dumpfile=expdp_dir:XX_data20131121 logfile=expdp_dir:XX_data20131121.log   PARALLEL=1 tables=XX_data.ab01,XX_data.AB02,XX_data.AB06,XX_data.AB07,XX_data.AB09,XX_data.AB13,XX_data.AB14,XX_data.AB15,XX_data.AB44,XX_data.AB52,XX_data.AB53,XX_data.AC01,XX_data.AC02,XX_data.AC04,XX_data.AC05,XX_data.AC06,XX_data.AC43,XX_data.AC49,XX_data.AC62,XX_data.AC69,XX_data.AC88,XX_data.AC90,XX_data.AC95,XX_data.AC96,XX_data.AE03,XX_data.AE06,XX_data.AE29,XX_data.AE29,XX_data.AE54,XX_data.AE58,XX_data.IC02,XX_data.IC12,XX_data.IC40,XX_data.IC87,XX_data.IC89,XX_data.IC90,XX_data.IC91,XX_data.ZA75,XX_data.ZB17,XX_data.ZC70,XX_data.ZC71,XX_data.ZC72,XX_data.ZC73,XX_data.ZC90,XX_data.ZI10 EXCLUDE=CONSTRAINT:\"like \'%\'\" EXCLUDE=INDEX:\"like \'%\'\"  TABLE_EXISTS_ACTION=APPEND  remap_schema=XX_data:XXSI data_options=skip_constraint_errors  status=10 

导入中需要不断的监控undo,impdp百分比,单独文章《impdp监控》介绍一下监控进度

6、导入完毕后,创建索引,日志等,开启数据库相关表、索引日志
select 'alter index '||index_name||' logging;' from user_indexes union
select 'alter table '||table_name||' logging;' from user_tables;

如果使用了vpd请再次收回数据权限revoke exempt access policy from qhsi;

7、表分析、编译无效后台视图,因为数据导入后数据表的系统表统计信息还是老的,貌似晚上的自动优化也不优化这部分,所以数据转换完毕dbms_stats.gather一下

8、比较重要的,流水号跳段修改,不然业务数据大量冲突啊

猜你喜欢

转载自blog.csdn.net/viviliving/article/details/82796286