共计 5957 个字符,预计需要花费 15 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 oracle 中如何解决 asm 磁盘添加失败问题,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
生产环境存储划盘并做了多路径聚合,由于经验生疏忘记需要配置 udev。
在添加磁盘到 diskgroup 时,数据库报错权限不足,简单以为只是对应的字符设备的权限是 root:disk 导致无法添加到 diskgroup。
所以尝试使用 chown 命令在两个节点将该字符设备修改权限为 grid:oinstall 后,由于 suse 系统 udev 内部机制问题,在添加该字符设备到 diskgroup 过程中,字符设备的权限自动由 grid:oinstall 变为 root:disk,导致添加磁盘失败。此时该磁盘盘头已写入部分信息,HEADER_STATUS 为 NUMBER,导致无法重新添加到 diskgroup,也无法从磁盘组踢出,进退两难。
由于是生产环境,不敢随意操作,故在测试环境模拟问题并解决。
问题重现:
1 确认 /dev/raw/raw6 的 HEADER_STATUS 是 CANDIDATE 状态,说明可以添加到 asm 磁盘组。
SQL select PATH,NAME,DISK_NUMBER,GROUP_NUMBER,STATE,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk;
PATH NAME DISK_NUMBER GROUP_NUMBER STATE MOUNT_STATUS HEADER_STATUS MODE_STATUS
—————————— ——————– ———– ———— —————- ————– ———————— ————–
/dev/raw/raw6 0 0 NORMAL CLOSED CANDIDATE ONLINE
/dev/raw/raw1 DATA_0000 0 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw3 DATA_0002 2 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw4 DATA1_0000 0 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw5 DATA1_0001 1 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw2 DATA_0001 1 2 NORMAL CACHED MEMBER ONLINE
2 查看磁盘组,模拟将 /dev/raw/raw6 加进磁盘组 DATA。
SQL select GROUP_NUMBER,NAME from v$asm_diskgroup;
GROUP_NUMBER NAME
———— ——————–
1 DATA1
2 DATA
3 将 /dev/raw/raw6 加入磁盘组 DATA 的过程中(约等待 3s),另开窗口,将 /dev/raw/raw6 的权限由 grid:asmadmin 改为 root:disk,此时报错如下:
SQL alter diskgroup DATA add disk /dev/raw/raw6
alter diskgroup DATA add disk /dev/raw/raw6
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15075: disk(s) are not visible cluster-wide
4 重启 udev(即:将 /dev/raw/raw6 权限重新改为 grid:asmadmin)并重新查询。
SQL select PATH,NAME,DISK_NUMBER,GROUP_NUMBER,STATE,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk;
PATH NAME DISK_NUMBER GROUP_NUMBER STATE MOUNT_STATUS HEADER_STATUS MODE_STATUS
—————————— ——————– ———– ———— —————- ————– ———————— ————–
/dev/raw/raw6 0 0 NORMAL CLOSED MEMBER ONLINE
/dev/raw/raw1 DATA_0000 0 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw3 DATA_0002 2 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw4 DATA1_0000 0 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw5 DATA1_0001 1 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw2 DATA_0001 1 2 NORMAL CACHED MEMBER ONLINE
5 此时尝试再次将 /dev/raw/raw6 加入 DATA 中,出现报错,模拟故障成功。
SQL alter diskgroup DATA add disk /dev/raw/raw6
alter diskgroup DATA add disk /dev/raw/raw6
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15033: disk /dev/raw/raw6 belongs to diskgroup DATA
解决方法:
查了 oracle 官方文档,提供了如下三种解决方法(1453285.1):
方法一:
1 备份问题磁盘
dd if=/dev/oracleasm/disks/EMCORA43 of=/tmp/EMCORA43.txt bs=1M count=10
2 修改磁盘权限
chmod 000 /dev/oracleasm/disks/EMCORA47
3 重新挂载 diskgroup,确认 diskgroup 可以正常挂载,则可以使用 dd 命令清除盘头信息,并重新添加该磁盘。
dd if=/dev/zero of=/dev/oracleasm/disks/EMCORA43 bs=1M count=1
方法二:
使用 oracleasm 删除磁盘
/etc/init.d/oracleasm deletedisk EMCORA43
方法三:
使用 force 选项强制重新挂载该磁盘。
alter diskgroup XXXX add disk /dev/oracleasm/disks/EMCORA43 force;
本次实验采用第三种方法:
具体如下:
SQL select NAME, TOTAL_MB, FREE_MB, (TOTAL_MB – FREE_MB)
USED_MB, to_char((TOTAL_MB – FREE_MB) * 100 / TOTAL_MB, 99.99 ) || %
USED_PRECENT from v$asm_diskgroup;
NAME TOTAL_MB FREE_MB USED_MB USED_PRECENT
——————– ———- ———- ———- ————–
DATA1 1998 1901 97 4.85%
DATA 2997 630 2367 78.98%
SQL select PATH,NAME,DISK_NUMBER,GROUP_NUMBER,STATE,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk;
PATH NAME DISK_NUMBER GROUP_NUMBER STATE MOUNT_STATUS HEADER_STATUS MODE_STATUS
—————————— ——————– ———– ———— —————- ————– ———————— ————–
/dev/raw/raw6 0 0 NORMAL CLOSED MEMBER ONLINE
/dev/raw/raw1 DATA_0000 0 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw3 DATA_0002 2 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw4 DATA1_0000 0 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw5 DATA1_0001 1 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw2 DATA_0001 1 2 NORMAL CACHED MEMBER ONLINE
6 rows selected.
SQL alter diskgroup DATA add disk /dev/raw/raw6
alter diskgroup DATA add disk /dev/raw/raw6
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15033: disk /dev/raw/raw6 belongs to diskgroup DATA
SQL alter diskgroup DATA add disk /dev/raw/raw6 force;
Diskgroup altered.
SQL select PATH,NAME,DISK_NUMBER,GROUP_NUMBER,STATE,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS from v$asm_disk;
PATH NAME DISK_NUMBER GROUP_NUMBER STATE MOUNT_STATUS HEADER_STATUS MODE_STATUS
—————————— ——————– ———– ———— —————- ————– ———————— ————–
/dev/raw/raw1 DATA_0000 0 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw3 DATA_0002 2 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw4 DATA1_0000 0 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw5 DATA1_0001 1 1 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw2 DATA_0001 1 2 NORMAL CACHED MEMBER ONLINE
/dev/raw/raw6 DATA_0005 5 2 NORMAL CACHED MEMBER ONLINE
6 rows selected.
SQL select NAME, TOTAL_MB, FREE_MB, (TOTAL_MB – FREE_MB) USED_MB, to_char((TOTAL_MB – FREE_MB) * 100 / TOTAL_MB, 99.99 ) || % USED_PRECENT from v$asm_diskgroup;
NAME TOTAL_MB FREE_MB USED_MB USED_PRECENT
——————– ———- ———- ———- ————–
DATA1 1998 1901 97 4.85%
DATA 3497 1128 2369 67.74%
实际测试中,第一和第三种方法都可行(因本测试环境未使用 oracleasm,故不测试第二种)。
因第一种方法较为稳妥,故选择第一种方法在生产环境修复问题。
后续:
1、几天后在生产环境 pboss2-rdb1/2 江苏库使用第一种方法修复成功。但是引出一个问题:suse 系统和 rhel 系统在 udev 上有一些差异,rhel 修改完 /etc/udev/rules.d/ 下的 rules 文件,通过命令 start_udev 启动 udev 即可。但是 suse 则需要如下操作 /etc/init.d/boot.udev restart 重启 udev 配置,然后模拟拔插 udevadm test /sys/block/xxx 才能使设置生效。当时没发现这个差异,只能通过重启系统生效。
2、在 asmdisk 加进 diskgroup 后,正在做 rebalance 过程中,使用两种方法改变 asmdisk 权限。一种是直接操作系统 chown 命令改变两个节点的 asmdisk,结果发现 rebalance 正常进行,diskgroup 不受影响。另一种是使用 udev 改变 asmdisk 属性,重启 udev 使之生效,结果发现 diskgroup 异常,直接 unmount,数据库实例 down,把 asmdisk 权限修改回来后,重新 alter diskgroup xxx mount 后,发现 rebalance 继续进行,数据库重启后正常。
关于“oracle 中如何解决 asm 磁盘添加失败问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。