现象:
一台虚拟机强制重启后,ASM磁盘丢失,具体现象为:
[root@ora01 disks]# oracleasm status
Checking if ASM is loaded: yes
Checking if /dev/oracleasm is mounted: yes
ASM驱动加载正常
[root@ora01 disks]# oracleasm listdisks ------无ASM磁盘列出
进入到/dev/oracleasm/disks下
[root@ora01 disks]# ls -ltr
total 0
无法发现磁盘文件。
当然对应的磁盘组也就无法正常挂载了,数据库也无法正常启动。
解决方法:
通过dump ASM磁盘头查看,
[root@ora01 ~]# dd if=/dev/xvdc1 of=./d1 bs=4K count=1
1+0 records in
1+0 records out
4096 bytes (4.1 kB) copied, 0.000977898 s, 4.2 MB/s
[root@ora01 ~]# hexdump d1
0000000 8201 0101 0000 0000 0000 8000 2b02 d695
0000010 0000 0000 0000 0000 0000 0000 0000 0000
0000020 524f 4c43 4944 4b53 0000 0000 0000 0000
0000030 0000 0000 0000 0000 0000 0000 0000 0000
0000040 0000 0c10 0000 0302 4144 4154 3130 0000
0000050 0000 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 4144 4154 0000 0000
0000070 0000 0000 0000 0000 0000 0000 0000 0000
0000080 0000 0000 0000 0000 4144 4154 3130 0000
0000090 0000 0000 0000 0000 0000 0000 0000 0000
*
00000c0 0000 0000 0000 0000 6e10 01f8 0000 c59c
00000d0 7289 01f8 6800 7f26 0200 1000 0000 0010
00000e0 bc80 0001 77ff 0000 0003 0000 0001 0000
00000f0 0002 0000 000a 0000 0000 0000 0000 0000
0000100 0000 0a10 6e10 01f8 8800 c599 0000 0000
0000110 0000 0000 003c 0000 0001 0000 0001 0000
0000120 0000 0000 0000 0000 140a 2c01 bd86 5a39
0000130 0000 0000 0000 0000 0000 0000 0000 0000
*
0000160 0000 0000 0100 0c20 0000 0000 0000 0000
0000170 0000 0000 0000 0000 0000 0000 0000 0000
*
0001000
通过与正常的ASM磁盘头对比,并没有发现明显的异常,所以尝试手工建立ASM磁盘与设备的关系:
[root@ora01 disks]# mknod DATA01 b 202 33
[root@ora01 disks]# mknod DATA02 b 202 49
[root@ora01 disks]# chown grid:asmadmin ./*
[root@ora01 disks]# chmod g+w ./*
[root@ora01 disks]# chmod o-r ./*
这里通过mknod手工为ASM及设备建立了对应关系,然后用oracleasm listdisks查看:
[root@ora01 disks]# oracleasm listdisks
DATA01
DATA02
确实已经识别出了ASM磁盘,这时尝试挂载磁盘组:
SQL> alter diskgroup DATA mount;
Diskgroup altered.
磁盘组正确挂载。数据正常启动。
但是用oracleasm scandisks命令时:
[root@ora01 disks]# oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Cleaning disk "DATA01"
Cleaning disk "DATA02"
Scanning system for ASM disks...
会发现手工创建的两个ASM磁盘为stale状态,会被asm驱动清理掉,这个后续再研究。至少现在能保证正常使用了。