Oracle-11g ASM Fast Mirror Resync特性

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';
原文地址:https://www.cnblogs.com/binliubiao/p/15163353.html