数据迁移中需要考虑的问题

在生产环境中,做数据迁移需要考虑很多的可能性和场景,尽量排除可能发生的问题。我自己总结了下,大体有如下需要注意的地方。
1)充分的测试,评估时间,总结经验,提升性能
在生产中进行数据的大批量迁移时,充分的测试时必须的。一方面可以根据这些测试积累一些必要的数据作为生产中使用参考,另外一方面可以基于之前的测试,总结经验,总结不足之处,加入改进,在生产中每一分钟的改进都是很重要的。

2)完整的备份策略
热备甚至冷备
    在数据迁移之前进行完整的备份,一定要是全量的。甚至在允许的情况下做冷备都可以。数据的备份越充分,出现问题时就有了可靠的保证。
lob数据类型的备份,做表级的备份(create table nologging....)
    对于lob的数据类型,在使用imp,impdp的过程中,瓶颈都在lob数据类型上了,哪怕表里的lob数据类型是空的,还是影响很大。
    自己在做测试的时候,使用Imp基本是一秒钟一千条的数据速度,impdp速度有所提升,但是parallle没有起作用,速度大概是1秒钟1万条的样子。
    如果在数据的导入过程中出了问题,如果有完整快速的备份,自己也有了一定的数据保证,要知道出问题之后再从备份库中导入导出,基本上都是很耗费时间的。

3)网络
   网络带宽
    网络是很重要的一个因素,数据迁移的时候肯定会从别的服务器中传输大量的文件,dump等,如果网络太慢,无形中就是潜在的问题。
可以使用scp来进行一个简单的测试,如果存储还不错的话,一般在50M左右/每秒 的速度

   网络临时中断
网络的问题需要格外重视,可能在运行一些关键的脚本时,网络突然中断,那对于升级就是灾难,所以在准备脚本的时候,需要考虑到这些场景,保留完整的日志记录。
可以使用nohup来做外后台运行某些关键的脚本。这样网络断了以后,还有一线希望。

4)完整的日志
在数据迁移,数据升级的时候,一定要保留完整的日志记录,这样如果稍候有问题,也可以及时查验,也可以避免很多不必要的纷争。如果有争议,可以找出日志来,一目了然。

5)存储
存储也是很重要的一个方面。从系统角度来考虑,需要保证io的高效性。可以使用
iostat,sar等来评估
还可以使用如下的脚本简单来测试一下。
time dd if=/dev/zero bs=1M count=204 of=direct_200M

6)归档空间
数据迁移的时候会有大量的日志产生,一定需要保证归档空间足够大,及时的转移归档文件。排除归档爆了以后数据的问题,使用sqlloader,impdp等数据迁移策略的时候,如果归档出了问题,是很头疼的问题。

7)表级nologging
如果条件允许,可以考虑对一些相关的表开启nologging,在数据迁移之后再设置logging.
对速度有一些的提升,如果使用insert /*+append */的时候,那速度就很明显了。

8)index级nologging
数据的insert操作,如果没有index速度很有成倍的提高,但是在生产中可能并不能建议这么做,如果重建索引的时候,也需要一定的时间,还需要一定保证索引和之前一定要没有任何的差错。所以一般来说,如果开启Index的nologging也会有一定的提升。

9)lob级nologging
对于lob数据类型来说,在允许的条件下,可以设置为nologging,速度会有所提升。

10)foreign key
外键的影响需要重视,如果外键存在对于数据的插入顺序无形中对会有一定的约束,所以在大批量的数据并发插入条件下,disable foreign key,可以更加高效,当然在enable foreign key的时候需要花费一些时间,做为数据检查。

11)trigger的影响
tigger在数据的dml操作中都有这潜移默化的影响,所以对于trigger最好和开发部分做确认,是否需要禁用trigger

12)materialized view log的影响
有些外部系统可能为了数据同步,可能会在系统中创建一些物化视图日志,可以和他们做一个确认,删除物化视图日志,减少数据插入的时候物化视图日志的影响,
还有一个问题就是物化视图日志会使rename table等操作无法进行。

13)godlengate的影响
goldengate的影响不容小视,需要和部分做一个确认在数据迁移之前停掉goldengate相关的进程。

14)主键冲突数据排除
主键冲突数据的排查是一个很重要的环节,如果之前的准备工作不到位,到了生产之后,那就是数据灾难。大半夜修复数据的痛苦真是不言而喻啊。如果数据前一部分不给力,你就得给力,想想办法来排查吧。

15)constraint级的数据不一致
这种问题存在而且很隐蔽,比如如下的错误。就是not null constraint在源schema中不存在,在导入目标库的时候出问题了。

cannot insert NULL into
("xxxx"."test_data"."TOT_OBLIGATION_PCT")

对于这类问题需要和数据迁移组协调,尽可能保证constraint的一致性。

16)undo的考虑
对于数据迁移来说,对于undo的空间使用来说是极大的挑战,可能在Impdp的时候出了Undo的问题,那就是极为奔溃的问题了。
还要考虑undo_retention的设置,可以在数据迁移之前可以把retention调低一些,保证undo的使用率足够用

时间: 2024-10-24 07:26:16

数据迁移中需要考虑的问题的相关文章

数据迁移中的几个问题总结

   总结一下昨晚在数据迁移前线奋战碰到的一些问题,虽然总体来说是按照预定的计划完成,并且提前完成,但是哪怕一丁点儿的操作都会导致一些严重的影响.    总体来说,需要做的事情就是把核心业务服务器从一个机房迁移到另外一个机房,这个过程中因为环境的重要性和硬件软件的情况,大体分为了下面三个方向的技术方案. 迁移部分核心业务从Solaris到X86平台,同时需要升级数据库版本 迁移x86平台的部分核心业务,这个方向操作相对简单,基本就是主备切换 整合部分X86平台的环境,比如数据库a,b整合后就是一

数据迁移中的数据库检查和建议

关于数据迁移,在之前也讨论过一些需要注意的地方,可能林林总总列了不少,都是在数据迁移迁移前和迁移时需要注意的.http://blog.itpub.net/23718752/viewspace-1195364/http://blog.itpub.net/23718752/viewspace-1254945/ 我在这些帖子的基础上进行更多的总结和补充. 数据库级的检查和建议1)参数检查 有些参数是需要在数据迁移前临时做变更的,有些是性能相关的,需要考虑. log_buffer在数据导入的过程中会有极

有关数据迁移中MYSQL错误请教

问题描述 我在数据迁移建表时出错:Mysql::Error:Can't create table'.store_developmentgoals.frm'<error:121>CREATE TABLE 'goals'<'id' int<11> DEFAULT NULL auto_increment PRIMARY KEY, 'title' varchar<255> DEFAULT NULL, 'description' text DEFAULT NULL >

数据迁移中碰见的一些问题

单位有一套Oracle 9i的古老测试数据库,因为机房搬迁,所以需要迁移数据,新库是Oracle 11g了,一个比较简单的需求,但过程中碰见了一些问题,看似比较琐碎,值得总结一下. 由于源库是9i,因此只能用imp/exp,不能用数据泵. 问题1:导入目标库用户的默认表空间 源库由于不规范的使用,对象默认存储的是数据库默认表空间USERS,既然是迁移,新库就要尽量规范一些.但问题来了,impdp/expdp可以使用remap_tablespace映射新旧表空间,exp/imp应该如何做? 网上有

.net2.0中使用SqlBulkCopy进行大批量数据迁移

sql|数据 在.Net1.1中无论是对于批量插入整个DataTable中的所有数据到数据库中,还是进行不同数据源之间的迁移,都不是很方便.而在.Net2.0中,SQLClient命名空间下增加了几个新类帮助我们通过DataTable或DataReader批量迁移数据.数据源可以来自关系数据库或者XML文件,甚至WebService返回结果.其中最重要的一个类就是SqlBulkCopy类,使用它可以很方便的帮助我们把数据源的数据迁移到目标数据库中.下面我们先通过一个简单的例子说明这个类的使用:

让数据迁移变得轻松

不管你称其为数据引力还是数据惯性,从存储基础设施的一个位置移动数据到另一个位置是个艰难的过程.至少,过去是这样.而现在,在合适的工具和基础设施条件下,传统的数据迁移过程中涉及到的许多困难点都可以消除.采用的方法只是提前规划和采用恰当的技术. 为什么数据迁移在过去是个问题 一份最新的Hitachi Data Systems报告详细的整理了来自IDC和451个集团公司的调研.报告表明数据迁移项目占据了大型企业IT项目的60%,并且,几乎一半的IT预算用于运维开销--一个明显的信号即数据迁移消耗了大部

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

在测试环境中做了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

数据迁移类测试策略

前言 前段时间做了一次数据迁移,针对数据迁移类型的测试方法进行了一些了解和总结,以下工具愚公移山和精卫为淘宝开发的工具,已使用于多个产品.项目中,质量有保障. 一.工具介绍 1.愚公移山 概述: 数据的动态迁移,可完成数据全量.增量迁移,进行数据比对,保证数据的正确:目前较多运用在数据迁移中,已经被很多团队使用,是很成熟可靠的数据迁移工具 适用范围: 可支持:支持oracle和mysql,分库分表,实时同步,数据比对 不支持:涉及到外部依赖,迁移规则非常复杂的数据 性能情况: 没有对愚公进行压测

NAS数据迁移初探

阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例.HPC和Docker的文件存储服务,提供标准的文件访问协议,用户无需对现有应用做任何修改,即可使用具备无限容量及性能扩展.单一命名空间.多共享.高可靠和高可用等特性的分布式文件系统.相比于传统的存储设备,NAS所具有的高容量.高可靠.多共享等特性是现在诸多企业迫切需要的,能够解决他们对现有系统在性能.扩展性方面的需求.传统解决方案如何上云,第一步就是原始数据的搬迁问题,如何做到不停服无缝搬迁,在