之前写了一篇文章分析了目前存在的一个问题和改进思路。
当前的硬件环境是Solaris,Oracle 10gR2 单实例,数据量在800G左右。想迁移到另外一台服务器上。大体的需求如下:
1.借助这次维护的时机,能够把数据库升级至11g
2.升级的过程需要尽可能保留一个较短的时间窗口,计划在2个小时以内完成
3.有较好的解决方案去演练整个过程,多次总结,提高迁移的效率,保证质量
4.有完善的回退计划,能够支持回退场景下业务平滑过渡
5.目前对于跨平台没有明确的要求,可以继续使用Solaris,也可以考虑跨平台,但是影响范围要小。
大体的实现思路如下,分为三个主要步骤:
1.首先就是搭建Data Guard环境,在保证业务数据已经完全同步到备库的情况下,在维护时间做Failover切换到备机环境,目前的主库为10g的库,然后在同一台服务器上创建一个11g的数据库,数据库的参数配置和10g的基本保持一致。
第二个步骤很关键,就是在10g的数据库上导出传输表空间的dump文件,然后保持数据文件不懂,停掉10g的数据库,做传输表空间数据字典的导入,这样10g的数据文件就导入了11g的库里。
第三步是11g的数据库全面接管成为真正的主库的时候,因为传输表空间只同步表数据,对于存储过程,函数,视图,同义词,DB link,权限等都无法同步,所以可以在这个基础上选择性导出全库的指定schema的信息,导入目标库中,因为是DDL的导入,这个过程持续时间也会很快。
这个过程,如果准备充分,应该在半个小时内会顺利完成,今天下午测试了一下大体的过程,发现效率还不错。当然这个之外就是性能的考虑了,统计信息,数据库参数的优化等,这些都是需要提前考虑的问题,大体的处理步骤的时间会很短。