生产环境数据迁移问题汇总

在测试环境中做了3轮数据迁移的演练,最终到了生产环境中,还是出现了不少问题,经过大半夜的奋战,终于是数据都迁移成功了。
1)共享存储的配置问题
共享存储使用NFS来共享存储,但是在实际操作中发现配置出了问题,原因是因为两台服务器上的用户不同在,目标机器上没有任何写权限。

-rw-r--r-- 1 3160 dba      6608 Jun 26 23:35 tmp_gunzip.sh        

-rw-r--r-- 1 3160 dba       624 Jun 26 23:30 tmp_gzip.sh          

oraccbs1@ccbdbpr3:/ccbs/migration/ext_datapump/DUMP> ksh gunzip.sh

gunzip.sh[1]: tmp_gunzip.sh: cannot create [Permission denied]    
最终还是采取了保守的方式,使用scp来传输文件。压缩文件后,文件的大小还是可以接受的。而且可以在数据迁移之前完成,虽然在稍后更正了nfs的配置,还是保守的使用了本地文件。

2)人为失误,遗漏了脚本
在数据迁移之前运行了一些脚本来设置table nologging,index nologging,disable trigger..结果把最重要的foreign key的脚本给遗漏了,结果在使用sqlldr加载数据的时候reject了部分的数据。
幸亏及时发现。赶紧执行disable的脚本,报了如下的错误,好吧,对于已经收影响的数据来说,只能通过.bad文件来逐一恢复数据了。
不过个人总结还是觉得对于异常情况的考虑需要需要比较充分,在出问题的时候才不会乱了阵脚。

ALTER TABLE xxxx DISABLE  CONSTRAINT xxxxx_ACCOUNT_1FK

            *

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

ALTER TABLE xxxx_ACCOUNT disable  CONSTRAINT xxxx_ACCOUNT_1FK

            *

ERROR at line 1:

ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired

最后使用如下的脚本来修复,收到影响的文件有70多个,大半夜修复数据真是压力和痛苦啊。不过还好,数据都最后成功加载了。

 #sqlldr xxxx/xxxx@xxxxcontrol=./TEST_LOG/TEST_BEN_sqlldr.ctl log=./TEST_LOG/Imp_sqlldr_TEST_BEN_10.log  direct=false parallel=true errors=10000000 bindsize=7500000 readsize=7500000 streamsize=7500000 rows=50000 data=./TEST_DUMP/TEST_BEN_10.dat  discard=./TEST_LOG/TEST_BEN_10.di                                                                                                                                                                                                                            

3)内存导致的问题
在数据加载的过程中,cpu使用率一直上不去,开启了150个并行的insert进程,但是cpu使用率还是在90%左右,速度上不去。这和之前在测试环境的测试结果又很大的出入。
180G的内存,但是剩余内存却只有400多M

 top - 03:48:47 up 413 days, 57 min, 11 users,  load average: 7.22, 8.40, 8.79

Tasks: 1906 total,   1 running, 1905 sleeping,   0 stopped,   0 zombie

Cpu(s):  0.4%us,  0.6%sy,  0.0%ni, 98.9%id,  0.0%wa,  0.0%hi,  0.2%si,  0.0%st

Mem:  189675188k total, 189233496k used,   441692k free,    30368k buffers

Swap: 377487328k total,    25844k used, 377461484k free, 117830432k cached

根据我的监控,发现对于大的分区表来说,剩余内存就耗尽了。并行插入数据的时候遇到了瓶颈,可能和生产库没有开启异步io有关,数据库参数为filesystem_io,当前设置为none,而在测试环境中则为setall.
而且根据我的观察Undo的使用率极高,按照之前的统计数据来说不会这么异常。

4)升级的过程中环境非法访问
按照约定,在升级的过程中,环境是不允许开发访问的,但是在这次数据迁移中,发现有一些资源消耗比较的sql语句都是从客户端发过来的。经过确认是客户的卡发人员想查验数据迁移的情况,这个会对数据的迁移造成一定的影响。可以通过修改数据库listener的端口号来进行屏蔽,在数据迁移完成之后,在修改端口重启监听即可,对于外部来说,就可以排除不必要的影响

5)统计信息的收集
数据迁移之后,统计信息的收集也是一个很关键的步骤,如果不进行统计信息收集,会导致执行计划有较大的误差。可能导致严重的性能问题。
但是生产系统中时间是最高贵的资源。收集统计信息会耗费不少的时间,这个时候可以根据表的大小来进行统计信息比例的调整。对于比较大的表来说,比例可以在40%左右,开启并行,速度会有一定的提升。

6)外部表加载的性能问题
在之前的测试中,外部表加载的性能还是不错的,但是在生产中发现速度一下子打了折扣,本来一分钟150万的数据加载速度。结果在生产中大概在4,5分钟的样子(150万条数据)
对于这个问题,可能还需要考虑并行的情况。因为cpu的使用率一直没有上去。需要考虑稍后抓取ash报告来查验当时倒底有哪些瓶颈。

时间: 2024-09-20 08:11:15

生产环境数据迁移问题汇总的相关文章

全网无感知迁移生产环境到VPC

背景 今年年初,我们将预发布环境迁移至VPC,测试了平滑迁移服务到VPC的可行性.当时的结论是:要达到用户无感知,迁移过程非常繁琐,除非阿里云在基础设施一层提供支持,否则很难应用到生产环境.详见<如何将服务从经典网络迁移到VPC>. 但在今年年中,阿里云推出了一系列有利于VPC迁移的功能,我们认为将整个生产环境迁移至VPC的条件已经成熟. 迁移 迁移难点 在<如何将服务从经典网络迁移到VPC>结尾提到,将服务迁移平滑迁移至VPC最大的障碍在于: 迁移数据源到VPC 使用DTS可以很

codefirst-EF环境,CodeFirst模式开发,同项目多个数据库,如何设定自动数据迁移

问题描述 EF环境,CodeFirst模式开发,同项目多个数据库,如何设定自动数据迁移 如题,我的整个工程比较复杂,有多个数据库,统一放在名为DataBase的类库项目下,供其他项目调用. 我的应用项目也有好几个,我想对每个项目单独设置自动迁移数据,现在发现有困难. 因为每次启动一个数据迁移,都是在同一个Migrations文件夹下,这个没有给我自定义名字的地方.并且启动文件都是Configuration.cs这个类,也没有给我自定义名字的地方. 也就是说,我一次只能设定一个数据库进行自动迁移.

开发测试工作考核数据之---生产环境bug修复及时率

编写背景: 前段时间有不少猎头来电询问是否考虑换工作,我一一回绝:因为在目前公司要完成的目标目前完成了1个,正在进行中1个,剩余1个还没有开始:其中一个猎头问我为什么来这家公司,主要是因为我的老板懂测试这个工种和工作,非常实实在在的支持和重视测试部门. 非常感谢今年的绩效考核工作,增加了一项考核指标:生产环境bug修复及时率,让我有机会学习和学会如何用这项指标来驱动开发的工作和检查测试工作成果,感谢我的老板给我的工作指导和好的想法,感谢在工作中时常提醒我做重要事情并给我很多工作建议的mac. 今

【Spark Summit EU 2016】经验分享:将SparkR用于生产环境下的数据科学应用中

本讲义出自Heiko Korndorf在Spark Summit EU 2016上的演讲,主要分享了R语言以及现实场景下使用R语言进行数据分析的应用案例,并且将引领大家使用SparkR扩展R语言应用,并介绍了SparkR1.X和2.X架构,并介绍了这两个版本的SparkR分别如何获取. 除此之外,Heiko Korndorf还分享了如何使用SparkR将数据科学与数据工程集成到一起,将SparkR用于生产环境下的数据科学应用中,并对于Spark无限发展空间的生态系统进行了展望.

测试环境的迁移式升级和数据整合

很多时候,大家工作中都会有一种被动的思维,那就是能不动就不动,从求稳的角度来看无可厚非,但是从风险的角度来说,还是有待商榷的.如果存在风险,还保持原样很可能就是一个不定时炸弹. 这不手头有一套环境,按照以前的标准是根本入不了我的法眼的,但是因为是测试环境,小问题比较多,存在容灾风险,但是这么多年一直这样,也就默然接受了. 这套环境硬件配置很低,基本上和我的笔记本配置差不多,可能还略差一些,在上面跑着3个数据库实例,其中一个是11g的,2个是10g的.两个10g的数据库实例数据量都不大,几十G而已

生产环境使用 pt-table-checksum 检查MySQL数据一致性

公司数据中心从托管机房迁移到阿里云,需要对mysql迁移(Replication)后的数据一致性进行校验,但又不能对生产环境使用造成影响,pt-table-checksum 成为了绝佳也是唯一的检查工具. pt-table-checksum 是 Percona-Toolkit 的组件之一,用于检测MySQL主.从库的数据是否一致.其原理是在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库执行,并在从库上计算相同数据块的checksum,最

如何在生产环境运行容器

本文讲的是如何在生产环境运行容器[编者的话]Vivek Juneja是一名工作首尔的云服务工程师.他从2008年就开始接触云服务,是最早的AWS和Eucalyptus的使用者.本文中总结了在生产环境中使用容器的几个方面,特别是对虚拟机与容器的混合部署的观点很值得推荐给大家. 如果只是把容器限制在开发测试环境中,那么您并没有享受到面向容器研发和发布工作的全部红利.对在生产环境中使用容器的抵触情绪来源于对安全与隔离性的担忧,同时也包括对管理容器的运维经验的缺乏. 在不同程度上使用容器的组织中,迁移这

《构建高可用Linux服务器 第3版》—— 3.6 生产环境下的Shell脚本分类

3.6 生产环境下的Shell脚本分类 生产环境下的Shell脚本作用还是挺多的,这里根据3.1节所介绍的日常工作中Shell脚本的作用,将生产环境下的Shell脚本分为备份类.监控类.统计类.开发类和自动化类.前面3类从字面意义上看比较容易理解,后面的我稍微解释一下:开发类脚本是用Shell来配合PHP做一些非系统类的管理工作,比如SVN的发布程序等:而自动化类脚本则利用Shell自动来替我们做一些繁琐的工作,比如自动生成及分配密码给开发组的用户或自动安装LNMP环境等.下面我会就这些分类举一

生产环境中使用Docker Swarm的一些建议

本文讲的是生产环境中使用Docker Swarm的一些建议[编者的话]实践中会发现,生产环境中使用单个Docker节点是远远不够的,搭建Docker集群势在必行.然而,面对Kubernetes,Mesos以及Swarm等众多容器集群系统,我们该如何选择呢?它们之中,Swarm是Docker原生的,同时也是最简单,最易学,最节省资源的,至少值得我们多了解一下.本文将介绍一些非常实用的建议. [深圳站|3天烧脑式Kubernetes训练营]培训内容包括:Kubernetes概述.架构.日志和监控,部