DISK_REPAIR_TIME介绍

1. 介绍

当ASM磁盘被drop后,ASM就会发起重平衡,保证被drop的磁盘里涉及的extent再次冗余,但是ASM的重平衡很费时间,并且涉及到大量其它磁盘的IO操作。但是有时侯磁盘可能会因为维护或其它原因暂时offline了,如果短时间的offline就发生重平衡,并且磁盘加回来时,又要发生重平衡,这有点不可接受。所以ASM提供了快速磁盘同步特性,在磁盘OFFLINE期间,ASM记录OFFLINE磁盘涉及的extent,而当磁盘恢复时,ASM会快速同步这个磁盘上发生变化的extent。
如果磁盘OFFLINE很长时间,这其实是有风险的,因为在NORMAL冗余的情况下,OFFLINE磁盘涉及的extent就只有一份了,所以ASM提供了一个磁盘组属性DISK_REPAIR_NAME,表明在这个磁盘组上的磁盘,OFFLINE多长时间后就被DROP,ASM开始重平衡,这个值默认是3.6小时。
如果是有计划磁盘OFFLINE维护,3.6小时也许不够,比如Exadata的Cell节点升级,所以可能需要先将该值调大。
在磁盘组正常情况下,设置该值的命令如下:

SQL> ALTER DISKGROUP DATA SET ATTRIBUTE 'disk_repair_time'= '36h';

但是如果磁盘已经被offline,那如何设置offline的磁盘多长时间drop呢?命令有些不同。

2. 判断多少时间后磁盘被drop

在ASM的alert日志里查看,磁盘被drop掉之前的倒计时,如下:

WARNING: Disk 0 (DATA_CD_00_DMORLCEL08) in group 1 will be dropped in: (12960) secs on ASM inst 1
WARNING: Disk 1 (DATA_CD_01_DMORLCEL08) in group 1 will be dropped in: (12960) secs on ASM inst 1
WARNING: Disk 2 (DATA_CD_02_DMORLCEL08) in group 1 will be dropped in: (12960) secs on ASM inst 1

检查DISK_REPAIR_NAME

SQL> column name format a30
SQL> column value format a30
SQL> select name,value from v$asm_attribute where group_number=1 and name like '%disk_repair_time%';

NAME                           VALUE
------------------------------ ------------------------------
disk_repair_time               3.6h

3. 延长DISK_REPAIR_TIME

如果一个failgroup失败,failgroup上的磁盘已经全部OFFLINE了,可以使用如下命令延长DISK_REPAIR_TIME

SQL> ALTER DISKGROUP <DISKGROUP NAME> OFFLINE DISKS IN FAILGROUP <FAILGROUP NAME> DROP AFTER 5H;

然后再检查ASM的alert日志,是否生效,例如:

WARNING: Disk 2 (DATA_CD_02_DMORLCEL08) in group 1 will be dropped in: (18000) secs on ASM inst 1
WARNING: Disk 3 (DATA_CD_03_DMORLCEL08) in group 1 will be dropped in: (18000) secs on ASM inst 1
WARNING: Disk 4 (DATA_CD_04_DMORLCEL08) in group 1 will be dropped in: (18000) secs on ASM inst 1
WARNING: Disk 5 (DATA_CD_05_DMORLCEL08) in group 1 will be dropped in: (18000) secs on ASM inst 1

如果只有1块盘offline,命令如下:

SQL> ALTER DISKGROUP <DISKGROUP NAME> OFFLINE DISK <DISK NAME> DROP AFTER 5H;

检查磁盘名称

SQL> col path format a59
SQL> set lines 200
SQL> set pagesi 400
SQL> select path, name, header_status, mode_status, mount_status, state, failgroup from v$asm_disk order by path;

4. 立即drop磁盘

如果磁盘的修复时间预计比较长,那可以立即drop掉磁盘,开始重平衡,而不是等完DISK_REPAIR_TIME时间后再开始。

如果failgroup失败,命令如下:

ALTER DISKGROUP <DISKGROUP NAME> DROP DISKS IN FAILGROUP <FAILGROUP NAME> FORCE;

如果某块磁盘失败,命令如下:

ALTER DISKGROUP <DISKGROUP NAME> DROP DISK <DISK NAME> FORCE;

关于紫砂壶

感悟技术人生
此条目发表在ASM分类目录,贴了标签。将固定链接加入收藏夹。