ASM是10g版本后oracle大力推荐的一种数据文件存储方式,也是以后的一个重点方向.尽管现在asm在稳定性和一些操作上还存在不少问题,但已经有越来越多的企业把核心系统部署架构到上面.
本文重点不在于探讨ASM的优劣问题,爱青菜与爱白菜的人总有自己的理由支持自己的喜好.
朋友有套系统需要更换存储,数据库文件部署在asm上,需要尽量短的停机时间完成此次存储更换。由于不涉及异构的迁移转换,迁移起来也不难,无需借助三方的工具来完成这次高可用切换.当然,ASM下的一些特性也为我们做迁移提供了更多的选择方案.
针对该环境,列几种选择方案(以下操作都在新存储已挂载在主机上的情况下).
1.利用ASM的热添加和删除磁盘的方式完成存储迁移.
该方案充分发挥了asm管理磁盘数据的能力.
简要步骤:
(1).划分raw或者asm disk,并检查或更改asm参数,例如asm_disktring,使得新存储的asm disk对ASM实例可识别
(2).将新存储disk添加到现有的asm diskgroup中.
(3).删除旧存储对应的asm disk
注意:以上2步,通过观察v$asm_operation视图来判断数据重组的进度,注意删除disk的时候,确保整个diskgroup有 足够的空间。如果asm disk比较多,可以一个一个的分步执行减缓系统压力.有点可惜的是,在10g版本中,oracle不支持asm diskgroup冗余类型的转换, 也没有直接提供删除failgroup的方法,否则以添加镜像failgroup的方式来完成这次数据迁移,个人觉得有更强的可控性和更低的风险.
优缺点:
该方案可以实现迁移过程中系统的零停机,但整个操作进度不可控,数据重组过程中我们无法把握进度和风险,如果你对ASM产品足够信任,该方案不失一用
2.利用Switch copy的方式完成存储迁移
Switch copy并不是只能在ASM下才能用,但asm对数据文件的管理使得switch copy变得异常简单,免去了手工输入大量脚本的工作。
简要步骤:
(1).在新存储上创建新的diskgroup
(2).整库在线backup copy到新diskgroup上
(3).修改参数文件control_files,停db并启动到nomount状态,迁移controlfile到新diskgroup,mount做switch copy
- RMAN>restore controlfile from '+< old_asm_diskgroup_name >/...';
- RMAN>alter database mount;
- RMAN> switch database to copy;
- RMAN> recover database;
- RMAN>alter database open;
(4).迁移temp和logfile
在新diskgoup上创建新的temp表空间;添加新logfile到新diskgroup,删除旧的temp、logfile.
(5).其他善后
修改db_create_file_dest、db_create_online_log_dest_*、archive_log_dest_*等参数/卸载旧diskgroup等
注意:需要注意保留日志的完整性,从backup copy开始到switch copy这段时间的归档日志/在线日志不能丢失,recover需要这部分日志,recover的时间决定了整个迁移的停机时间.
优缺点:
该方案风险可控,但需要评估从backup copy开始到switch copy这段时间的日志生成量,如果这段时间窗产生了大量的日志(有可能backup过程比较久而且db一直很忙,有很多事务和日志产生,或者 backup之后并不是马上做switch,这期间也产生了很多日志),那势必会增加迁移过程的停机时间.如果这段时间日志生成量有限,整个停机时间也会 相当短.
3.一般方法:
利用物理datagurd等.
该方案风险最小,失败最容易回退.操作上整个停机时间一般不会超过10分钟.