ASM Label丢失导致集群重启失败

2020-08-15 00:00:00 集群 专区 生产 磁盘 发现


这是一个测试环境,开发反映服务器重启后数据库无法访问,这是一个两节点集群,查询集群状态发现,在ora.cssd处于starting 状态

那么就需要查询cssd.log看这个Demon发生了什么。(用来自MOS的一个例子说明吧,虽然实际无法发现的Label名字有差异,但是解决步骤

都是一样的)


 [    CSSD][922285824]clssnmReadDiscoveryProfile: voting file discovery string(/dev/oracleasm/disks/*)

 [    CSSD][922285824]clssnmvDDiscThread: using discovery string /dev/oracleasm/disks/* for initial discovery

 [   SKGFD][922285824]Discovery with str:/dev/oracleasm/disks/*:

...

 [   SKGFD][922285824]Handle 0x7fd920153400 from lib :UFS:: for disk :/dev/oracleasm/disks/Disk1:

...

 [   SKGFD][922285824]Lib :UFS:: closing handle 0x7fd920153400 for disk :/dev/oracleasm/disks/Disk1:

...

 [    CSSD][922285824]clssnmvDiskVerify: Successful discovery of 0 disks                                   

 [    CSSD][922285824]clssnmCompleteInitVFDiscovery: Completing initial voting file discovery

 [    CSSD][922285824]clssnmvFindInitialConfigs: No voting files found


这里原因也比较直观,就是无法发现voting file。也就是服务器重启后,Oracle无法发现asm磁盘Label

我们查询,确实没有发现 Label信息

$ ls -l /dev/oracleasm/disks

目前的问题是OCR对应的磁盘是存在的,但是由于未知的原因,这个Label没有了,此时我们需要使用如下指令

重建出这个Lable

使用root用户,执行如下操作

# /usr/sbin/oracleasm renamedisk -f <device name> <label>

目前我们需要确认磁盘设备和ASMLabel的对应关系,此时我们就需要一个kfed工具,来读取并解析磁盘设备记录的

相关信息,从而修复ASM磁盘头。如果有安装文档,我们就知道这个对应关系,我们也可以读取磁盘信息,来获取一般都记录

了特殊的kfdhdb.grpname对应的名字,如DATADISK,OCRDISK,ARCHDISK等。

$kfed read /dev/sdc1

....

kfdhdb.driver.provstr: ORCLDISK ; 0x000: length=8                          <<<<< 无法发现磁盘Label

kfdhdb.driver.reserved[0]: 0 ; 0x008: 0x00000000                           <<<<<

kfdhdb.driver.reserved[1]: 0 ; 0x00c: 0x00000000                           <<<<<

kfdhdb.driver.reserved[2]: 0 ; 0x010: 0x00000000

kfdhdb.driver.reserved[3]: 0 ; 0x014: 0x00000000

kfdhdb.driver.reserved[4]: 0 ; 0x018: 0x00000000

kfdhdb.driver.reserved[5]: 0 ; 0x01c: 0x00000000

...

kfdhdb.dskname:           OCRDISK1_0000 ; 0x028: length=13

kfdhdb.grpname:                OCRDISK1 ; 0x048: length=8                 <<<<< 对应ASM磁盘

kfdhdb.fgname:            OCRDISK1_0000 ; 0x068: length=13

...

kfdhdb.vfstart:                     352 ; 0x0ec: 0x00000160

kfdhdb.vfend:                       384 ; 0x0f0: 0x00000180


我们通过如下方式修复ASM磁盘头信息

# /usr/sbin/oracleasm renamedisk -f /dev/sdc1 OCRDISK1

下面检查

$ ls -l /dev/oracleasm/disks

total 0

brw-rw---- 1 oragrid asmadmin 8, 113 May 29 19:40 OCRDISK1

brw-rw---- 1 oragrid asmadmin 8, 129 May 29 00:38 OCRDISK2

brw-rw---- 1 oragrid asmadmin 8, 145 May 29 00:38 OCRDISK3

进一步通过kfed获得ASMLIB驱动信息

kfdhdb.driver.provstr: ORCLDISKOCRDISK1 ; 0x000: length=16            <<<<

kfdhdb.driver.reserved[0]:   1146241871 ; 0x008: 0x4452434f           <<<<

kfdhdb.driver.reserved[1]:    827020105 ; 0x00c: 0x314b5349             <<<<

...

kfdhdb.dskname:           OCRDISK1_0000 ; 0x028: length=13

kfdhdb.grpname:                OCRDISK1 ; 0x048: length=8

kfdhdb.fgname:            OCRDISK1_0000 ; 0x068: length=13

重启集群状态,正常

相关文章