暂无图片
暂无图片
8
暂无图片
暂无图片
暂无图片

ASM磁盘组状态PROVISIONED导致crs无法启动

原创 Xiaofei Huangfu 2023-04-23
1575

背景:ASM实例内存不足,调整内存后,无法重启crs,经过检查ASM磁盘组无法mount,修复asm磁盘组状态后,可以mount磁盘组,crs可以正常启动。
操作系统:AIX 6.1
数据库版本:11.2.0.3 2节点RAC

以下是分析和处理过程:
第一个过程是调整ASM实例内存,第二过程是修复ASM磁盘组状态使crs可以正常启动。

1、crs日志


[14398]SLOS :SLOS:cat=8, opn=kgfoI002, dep=4031, loc=kgfokge
ORA-04031:unable to allocate 3896 bytes of shared memory (“shared pool”,“unknown object”,“sga heap(1,0)”,“kglsim heap”)
ORA-06508:PL/SQL:count not find progr

从日志看到ASM实例内存不足,我们申请变更窗口调整ASM实例内存参数。

2、调整ASM实例内存

使用以下脚本调整ASM实例参数,重启crs使该参数生效。
su - grid -c “sqlplus / as sysasm<<EOF
alter system set memory_max_target=4096m scope=spfile;
alter system set memory_target=4096m scope=spfile;
exit;
EOF”

3、重启crs

我们先从第2节点重启,重启时由于ASM磁盘组无法mount,所以导致crs不能正常启动。

4、ASM实例日志:

asm实例日志:

ORA-15032: not all alterations performed
ORA-15017: diskqroup "DATA" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskgroup "DATA"
ORA-15017: diskgroup "OCR" cannot be mounted
ORA-15063: ASM discovered an insufficient number of disks for diskqroup"OCR"
…

从日志看到ASM磁盘组无法正常mount

5、ASM磁盘组状态

SQL>select group_number,disk_number,state,mount_stats,header_status,name,path from v$asm_disk; GROUP_NUMBER DISK_NUMBER STATE MOUNT_STATUS HEADER_STATUS NAME PATH ------------ ----------- ----- ------------ ------------- ------ ----------------- 2 0 NORMAL CACHED ==PROVISIONED== DATA_0000 /dev/asm_disk2 2 0 NORMAL CACHED ==PROVISIONED== DATA_0001 /dev/asm_disk3 2 0 NORMAL CACHED ==PROVISIONED== DATA_0002 /dev/asm_disk4 1 0 NORMAL CACHED ==PROVISIONED== OCR_0000 /dev/asm_disk1

从节点1和节点2查到磁盘组的状态均为PROVISIONED

6、手工mount磁盘组

SQL> alter diskgroup DATA mount force; * ERROR at line 1: ORA-15032: not all alterations performed ORA-15017: diskqroup "DATA" cannot be mounted ORA-15063: ASM discovered an insufficient number of disks for diskqroup"DATA"

手工无法mount磁盘组,报错与之前ASM实例日志报错一致。

7、使用kfed读取磁盘信息

什么是kfed
Kernel Files Metadata Editor (kfed) 用于读取和写入asm磁盘的元数据,可以在DiskGroup没有mount的情况下使用;因此在ASM无法启动、DiskGroup无法mount的时候可以尝试使用这个强大工具来进行修复ASM磁盘。
kfed工具支持对于ASM信息的READ/WRITE/MERGE/NEW/ FORM/FIND/STRUCT等操作

$GRID_HOME/bin/kfed read /dev/asm_disk1 kfbh.endian: 1 ; 0x000: 0x01 kfbh.hard: 130 ; 0x001: 0x82 kfbh.type: 1 ; 0x002: KFBTYP_DISKHEAD kfbh.datfmt: 1 ; 0x003: 0x01 kfbh.block.blk: 0 ; 0x004: blk=0 kfbh.block.obj: 2147483650 ; 0x008: disk=2 kfbh.check: 1321875653 ; 0x00c: 0x4eca38c5 kfdhdb.acdb.ents: 0 ; 0x1dc: 0x0000 kfdhdb.acdb.ub2spare: 0; 0x1de: 0x0000 <=====这个值是正常的 ... kfdhdb.dsknum: 2 ; 0x024: 0x0002 kfdhdb.grptyp: 1 ; 0x026: KFDGTP_EXTERNAL kfdhdb.hdrsts: 3 ; 0x027: KFDHDR_MEMBER <======磁盘组状态正常 kfdhdb.dskname: OCR_0000 ; 0x028: length=24 kfdhdb.grpname: OCR ; 0x048: length=19 kfdhdb.fgname: OCR_0000 ; 0x068: length=24 kfdhdb.capname: ; 0x088: length=0 ... kfdhdb.ub4spare[39]: 283863763; 0x198: 0x103b6ad3 <======此处值应该为0 kfdhdb.ub4spare[40]: 0; 0x19c: 0x0000000 kfdhdb.secsize: 512 ; 0x0b8: 0x0200 kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00400000 kfdhdb.mfact: 454272 ; 0x0c0: 0x0006ee80 $ kfed read /dev/asm_disk1 |egrep "ausize|blksize" kfdhdb.blksize: 4096 ; 0x0ba: 0x1000 kfdhdb.ausize: 1048576 ; 0x0bc: 0x00400000 <========ausize 1048576 即1M

aus为1M
*AUSize Blocksize Metadata Blocknumber=(AUSize/Blocksize)2-2
1048576 4096 510
2097152 4096 1022
4194304 4096 2046
8388608 4096 4094

8、修复磁盘组

$GRID_HOME/bin/kfed repair /dev/asm_disk1 aus=1048576 $GRID_HOME/bin/kfed repair /dev/asm_disk2 aus=1048576 $GRID_HOME/bin/kfed repair /dev/asm_disk3 aus=1048576 $GRID_HOME/bin/kfed repair /dev/asm_disk4 aus=1048576

通过kfed repair 命令设置aus大小为1m进行磁盘修复,使用kfed工具重新检查了损坏磁盘的头信息。现在,受影响磁盘的kfed输出查看kfdhdb.ub4spare[39]恢复正常。
kfdhdb.ub4spare[39]: 0; 0x198: 0x100000000

9、检查ASM磁盘组状态

SQL>select group_number,disk_number,state,mount_stats,header_status,name,path from v$asm_disk;
GROUP_NUMBER DISK_NUMBER STATE MOUNT_STATUS HEADER_STATUS NAME PATH


   2             0      NORMAL     CACHED       ==MEMBER==   DATA_0000    /dev/asm_disk2
   2             0      NORMAL     CACHED       ==MEMBER==   DATA_0001    /dev/asm_disk3
   2             0      NORMAL     CACHED       ==MEMBER==   DATA_0002    /dev/asm_disk4
   1             0      NORMAL     CACHED       ==MEMBER==   OCR_0000     /dev/asm_disk1

此时ASM磁盘组状态已恢复为MEMBER,为正常状态。

10、手工挂载ASM磁盘组

SQL> alter diskgroup DATA mount force;

可以正常挂载

11、重启启动crs

在节点2使用root用户进行如下操作

$GRID_HOME/bin/crsctl stop crs -f $GRID_HOME/bin/crsctl start crs

crs可以正常启动,在节点1执行同样操作。
-the end-

最后修改时间:2023-04-24 19:41:29
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论