迁移式升级的一点思考

目前有一个很实际的需求,因为硬件老化严重,需要能够借助一次维护时机把数据库迁移到一台较好配置的机器上,避免潜在的硬件故障导致的业务停顿,也算防患于未然吧。
本来这个事情不是很紧急,但是因为硬件故障导致的问题防不胜防,踩过几次坑,就会有些经验教训,在这种情况下维持现状就是一个潜在的炸弹。
当前的硬件环境是Solaris,Oracle 10gR2 单实例,数据量在800G左右。我大体想了下,主要的目标有以下几个。
    1.借助这次维护的时机,能够把数据库升级至11g
    2.升级的过程需要尽可能保留一个较短的时间窗口,计划在2个小时以内完成
    3.有较好的解决方案去演练整个过程,多次总结,提高迁移的效率,保证质量
    4.有完善的回退计划,能够支持回退场景下业务平滑过渡
    5.目前对于跨平台没有明确的要求,可以继续使用Solaris,也可以考虑跨平台,但是影响范围要小。
大体就是如上的要求,这是我的想法,也得我自己想办法来落实这些问题:)
有以下几种方式可以做,不过都是在评估和考虑。
    exp的方案肯定是pass,这个数据量迁移2个小时是完全不可能。
    expdp的方案2个小时也是无法达到,有两个瓶颈,一个是CPU使用的瓶颈,导出dump,导入dump得依赖于系统资源,二是主库还得备有额外的空间,三是网络的瓶颈,传输dump这个地方无法控制,而且因为硬件老化,网卡在大批量并发的情况下出现故障那就悲剧了。
    OGG的方案可行性高,之前和几个兄弟讨论过,先在备库的基础上基于SCN做全量同步,再设定数据同步的频率从主库同步,这样第一次的初始化对于主库的压力大大降低。不过有个问题是服务器实在是年岁已高,不能完全保证在主库,备库折腾一番,服务器还依旧吃得消。当然这个也是借口啦,OGG也得花一些时间才能玩得转。高效,可控的基础是熟练掌握它。
    使用XTTS的方案也不错,技术实现上肯定是妥妥的。这种方案的一个瓶颈还是在于网络的带宽,而且XTTS的方案实现在10g版本上还没有亲自尝试过,如果试水,还是有一些风险。
    使用DBUA的方式来升级,也是一个不错的方案,先使用Data Guard切换,然后直接升级至11g,图形的方式或者是命令行的方式均可。这种方式的优点很明显,升级前的检查和准备足够充分,升级数据库的时候就会平滑许多,自己也这么参与过不少的案例。这种方案和数据量就没有太大的关系了,升级的本质就是升级数据字典,所以这部分的时间主要就花费在升级上。
    还有一种方案自己也在琢磨中,那就是Data Guard+TTS,实现的思路大体是备库上创建一个11g同名的数据库,然后原来10g的数据库Failover变为主库,导出元数据,然后修改11g数据库的配置,导入元数据,这个过程中出了系统表空间外,数据表空间不动。这样就可以直接避免文件迁移带来的很毒瓶颈和限制。
    这几种方案个人比较喜欢最后一种,先说维护窗口,如果免去了拷贝数据文件的时长,那么导出导入的过程就会很快,应该比手工/图形方式升级数据库还要快。如果保证能够反复演练,可以合理利用备库的闪回功能,failover之后闪回照样能够修改为物理备库正常应用日志,为了方便演练,可以拷贝一份数据的镜像,随时启用,这样10g,11g的库都可以正常运行。一旦出现灾难,直接把连接切到原来的主库端去即可。

时间: 2024-10-02 10:57:05

迁移式升级的一点思考的相关文章

一种迁移式升级的方案考虑

目前遇到了一个问题,目前的是一主两备的环境,但是主库,备库中的存储空间都不足.而且硬件环境相对要老旧一些.想扩容难,系统版本老旧想升级也难. 数据库是基于10gR2,有异地灾备.但是因为10gR2的dataguard没有灾备的感觉,其实感觉和一个主库没有什么明显的差别.而且一旦发生问题,切换以后,硬件的限制瓶颈还是解决不了,所以化被动为主动,可以提前预警,提前规划和考虑. 现在是一主两备,但是备库目前的情况不容乐观,所以需要扩容一下,升级操作系统版本,目前为6U5,重新规划磁盘分区,在新分区中采

迁移式升级的测试(二)

在之前写的一篇博文中,自己是打算对一台数据库使用Data Guard+TTS的方式来完成数据迁移和升级的工作,整体的思路如下. 备库Failover之后,导出元数据,然后同一台服务器上的11g的数据库中导入元数据,这样就避免了传输文件的时间消耗.从而达到快速迁移升级的目的. 具体的操作步骤如下所示: 1.在备库端需要开启闪回 这个也是为了能够在迁移失败的情况下,能够迅速回退,马上重构主备库的环境. 2.在开启闪回数据库之后,记录一下SCN的信息,留作后面备用.    select current

迁移式升级的测试(三)

还是继续昨天的任务,今天会把剩下的工作都做完,给个交代. 昨天完成了Data Guard切换,然后Failover备库,导出了元数据信息作为TTS的准备,亮点就在于导入的部分.无需挪动数据文件,这是补充数据字典信息即可. 这个工作的一个重点内容就是如何保证数据字典信息的完整性. 在目标环境11g中需要创建相应的用户,这一点还是很有技巧的.如果采用impdp的形式直接导入用户,这样不妥,因为我们有设置profile,有临时表空间,默认表空间的信息. 比如下面的用户创建语句:    CREATE U

迁移式升级的测试

之前写了一篇文章分析了目前存在的一个问题和改进思路. 当前的硬件环境是Solaris,Oracle 10gR2 单实例,数据量在800G左右.想迁移到另外一台服务器上.大体的需求如下:     1.借助这次维护的时机,能够把数据库升级至11g     2.升级的过程需要尽可能保留一个较短的时间窗口,计划在2个小时以内完成     3.有较好的解决方案去演练整个过程,多次总结,提高迁移的效率,保证质量     4.有完善的回退计划,能够支持回退场景下业务平滑过渡     5.目前对于跨平台没有明确

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

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

关于Redis的一点思考与总结

关于Redis的一点思考与总结 Redis是一个复杂而又设计优良的系统,说它复杂是因为整个系统涉及到了很多方面的问题,比如:哈希存储.网络模型.集群特性等等.说它设计优良是因为这些问题它都提供了深思熟虑的解决方案. 我们花大量的时间学习一个技术,不仅为了能更好的使用它,同时希望学习它设计上的一些思路,这样在解决日常工作碰到的各种各样的问题的时候思路会更开阔.以下是对Redis一小部分内部机制的思考与总结. Slot机制 Slot机制的运维收益 Redis早期是不支持集群功能的,如果需要做数据分片

由google收录广告页面的一点思考

由google收录我广告页面的一点思考 先说一下情况,我的网站本来是做关键词研究的,但是适合百度不适合google,所以Google来的流量不多,收录也少很多,但是昨天查询google收录发现了一个特别的情况,收录明显增加,而且最让人费解的是收录了一个非常特殊的页面,一个广告页面,之所以特殊,是由于这个页面是专程为放置广告设计的,没有多少含金量,甚至从我网站,其它网站都没有到它的链接,不应该被收录的,而且这个页面里面有流媒体和弹窗,应该说也不友好. 针对这个情况,我分析了一下,突然想起自己前不久

关于java继承的一点思考

关于继承的一点思考 在 java 中, 继承是实现复用的一种方法,虽然很多时候不建议使用继承, 但不可否认,有时候使继承,更容易理解某个设计 我碰到过这样一种情况,一般的操作对象 类 A 实例,但是会间或操作一些类 B 的实例,B 大部的属性 A 都包括,这个时候使用继承,应该没什么问题的(至少我现在的理解是没什么问题,各位多指教),现在把A 和 B的一些实例放到 一个数组中 A[] as 中 ,现在要轮循 as ,并对 B进行一些操作,这个时候,可以用 instanceof 判断是不是 B ,

关于对象之间通信的一点思考

经典的DDD的告诉我们如果一个领域概念是一个跨多个聚合的动作,比如转帐,那么就应该用领域服务来实现这样的业务概念.领域服务的输入和输出参数都是聚合根,领域服务内部按照业务逻辑规定的执行顺序,按照面向过程的方式,逐个调用相关聚合根的相关方法完成整个业务操作.这种方式的优点是:1)清晰的表达和封装了业务逻辑:2)代码清晰,容易理解,代码可读性强:缺点:1)基本的OO思想告诉我们,对象与对象之间应该是通过发送消息和接收消息的方式来通信的.但是通过前面这种方式,对象之间不再像我们想的那样会通过发送消息和