oracle中如何解决asm磁盘添加失败问题

59次阅读
没有评论

共计 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 磁盘添加失败问题”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-17发表,共计5957字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)