ASM Fast Mirror Resync特性
在oracle 10g ASM 中,如果发生磁盘故障(光纤故障,控制器故障,HBA卡故障或其它故障造成ASM磁盘无法访问)时,ASM实例自动将该故障磁盘drop掉。
磁盘组冗余模式为Normal或High的环境,当ASM磁盘被drop后,触发ASM磁盘组的重平衡动作,保证被drop的磁盘上涉及的extent的再次冗余。在ASM重平衡非常消耗时间和磁盘IO操作。在某些场景需要短暂offline某些磁盘时,offline时触发重平衡,添加回来的时候再次触发重平衡,这种情形非常不友好。因此,在11g版本,提供了ASM快速磁盘同步特性(ASM Fast Mirror Resync)。
在11g新引入一个"disk_repair_time"的参数,当磁盘故障时,如果在disk_repair_time指定的时间内,磁盘访问故障解决后重新online,Oracle将故障时间段变更的extent数据写入该磁盘,而不是同步所有的数据。这种特性称为" ASM Fast Mirror Resync"。如果超过disk_repair_time参数指定的时间未修复,就会drop掉这个磁盘。disk_repair_time参数默认值为:3.6小时。
注意:
当磁盘自身故障时,如果其所在的磁盘组冗余模式为Normal或High时,这个磁盘必须drop掉后重新添加(此时,需要同步磁盘的所有数据);如果冗余模式为external时,该磁盘组会离线。
ASM Fast Mirror Resync
ASM Fast Mirror Resync必要条件
- 磁盘组的compatible属性值至少为11.1
- 磁盘组的冗余模式必须时Normal或High级别
开启ASM Fast Mirror Resync
开启该功能需要针对磁盘组设置disk_repair_time的值。默认是3.6h
alter diskgroup DATA set attribute 'disk_repair_time'='3.6h';
调整disk_repair_time参数
-- sqlplus "/ as sysasm"
ALTER DISKGROUP DATA SET ATTRIBUTE 'disk_repair_time'= '36h';
查看参数值
--检查DISK_REPAIR_NAME
column name format a30
column value format a30
select name,value from v$asm_attribute
where group_number=1
and name = 'disk_repair_time';
实验测试
查看磁盘组属性配置
asmcmd lsattr -G DATA -l
设置磁盘组属性
asmcmd setattr -G DATA compatible.rdbms 11.2.0.0.0
asmcmd setattr -G DATA compatible.asm 11.2.0.0.0
实验1
手动offline磁盘模拟故障场景,当未超过disk_repair_time指定的时间后,尝试重新加磁盘。
查看磁盘组信息
asmcmd lsdsk -G DATA --statistics
查看磁盘头信息
su - grid
kfed read /dev/mapper/asm_data1
kfed read /dev/mapper/asm_data2
kfed read /dev/mapper/asm_data3
模拟故障(offline disk)
asmcmd offline -G DATA -D DATA_0003
在默认disk_repair_time值为3.6h时间内,将磁盘online操作
尝试online该故障磁盘
asm实例
alter diskgroup DATA disk DATA_0003 online;
asmcmd工具操作
asmcmd online -G DATA -D DATA_0003
检查磁盘组信息
asmcmd lsdsk -G DATA --statistics
实验2
手动offline磁盘模拟故障场景,当超过disk_repair_time指定的时间后,尝试重新加磁盘。
为了缩短测试时间,修改disk_repair_time的值
asmcmd 设置
# 设置disk_repair_time为5分钟,m代表分钟,h代表小时
asmcmd setattr -G DATA disk_repair_time 5m
asm实例
sqlplus "/ as sysasm" <<EOF
ALTER DISKGROUP DATA SET ATTRIBUTE 'disk_repair_time' = '5m';
EOF
查看磁盘组信息
asmcmd lsdsk -G DATA --statistics
查看磁盘头信息
su - grid
kfed read /dev/mapper/asm_data1
kfed read /dev/mapper/asm_data2
kfed read /dev/mapper/asm_data3
模拟故障(offline disk)
asmcmd offline -G DATA -D DATA_0003
sqlplus "/ as sysasm"<<EOF
-- 将磁盘offline,并指定drop after语句
alter diskgroup dgroup1 disk data01 drop after 0h; --#asm完成数据重新平衡后将该磁盘删除
EOF
查看磁盘组信息
asmcmd lsdg -G DATA
# 查看磁盘头信息
kfed read /dev/mapper/asm_data3
sqlplus "/ as sysasm" <<EOF
select name, path from v$asm_disk where group_number=2;
EOF
经过5分钟后,从asm alert日志发现该磁盘被drop掉。
尝试online该故障磁盘
asm实例
alter diskgroup DATA disk DATA_0003 online;
asmcmd工具操作
asmcmd online -G DATA -D DATA_0003
发现,并不能将offline的磁z加回来。只能将它像新划的lun磁盘的方式将它加入到DATA磁盘组。
清除掉该磁盘头数据(11g不用)
dd if=/dev/zero of=/dev/mapper/asm_disk3 bs=1024k count=100
重新加入磁盘组
alter diskgroup DATA add disk '/dev/mapper/asm_disk3';