Oracle ASM 日常运维与故障场景
Oracle难度: 高级耗时: 10 分钟 – 数小时(取决于 rebalance 时长)已安装的 Oracle Restart 或 RAC 环境中 ASM 磁盘组的日常运维与故障处理:容量检查(usable_file_mb)、rebalance 监控、添加/替换/删除磁盘、offline 磁盘、新建磁盘组、mount/dismount、ASM 配置备份和发现字符串。本指南不安装 ASM(安装见 Oracle Restart 或 RAC 指南);搜索错误代码(如 ORA-15041、ORA-15042)即可打开对应场景。每个场景都遵循 诊断 → 安全网 → 执行 → 验证 → 后续 的顺序;数据库保持打开(dismount 除外)。
架构: Oracle Restart(单服务器)或 2–8 节点 RAC,Grid Infrastructure 19c(23ai/26ai 差异见注释)
场景
- 检查容量与磁盘组健康状况 — 不做任何更改:磁盘组是否已满、剩余多少空间(按冗余级别正确解读 usable_file_mb)、offline 磁盘、磁盘不均衡以及兼容性属性。遇到空间问题、告警或例行检查时首选此卡片。
- 监控、加速或减速 rebalance — 正在进行的 rebalance/resync 的进度和剩余时间(v$asm_operation、est_minutes)以及修改 POWER。数据库保持打开;只改变 I/O 负载。
- 向磁盘组添加新磁盘 — 磁盘组空间不足或需要扩容:在所有节点上准备新 LUN(multipath/udev/ASMLib/AFD),用 ADD DISK 添加,并监控 rebalance。数据库保持打开。
- 用新磁盘替换磁盘(REPLACE DISK) — 一次操作即可用新磁盘替换故障(offline)或待更换的磁盘;只复制该磁盘的数据(12.1+,NORMAL/HIGH)。EXTERNAL 冗余下,添加 + 删除在一条命令中完成。数据库保持打开。
- 从磁盘组删除磁盘 — 用于归还 LUN 或从存储中移除:DROP DISK 会把数据迁移到其余磁盘;rebalance 完成且磁盘状态变为 FORMER 之前不得摘除磁盘。数据库保持打开。
- 磁盘 offline 或故障(NORMAL/HIGH 冗余) — NORMAL/HIGH 磁盘组中某磁盘显示为 OFFLINE,或 alert log 中有读写错误:诊断、disk_repair_time 时限、路径恢复后执行 ONLINE DISK(fast mirror resync)、修复时间较长时延长时限。数据库保持打开。
- 新建磁盘组 — 用于新建数据、FRA 或应用磁盘组:冗余级别、AU 大小、compatible.asm/rdbms 属性;RAC 中在所有节点上 mount 并注册 Clusterware 资源。现有磁盘组不受影响。
- Mount 或 dismount 磁盘组 — 用于计划内关闭磁盘组(dismount),或打开已关闭/无法打开的磁盘组(mount):在所有节点上使用 srvctl start/stop diskgroup。dismount 时不能有数据库正在使用该磁盘组;无法 mount 时按错误代码给出处理方向。
- 备份 ASM spfile、口令文件和元数据 — 无停机:将 ASM spfile、口令文件、磁盘组结构(md_backup)以及 RAC 中的 GPnP profile 备份到 ASM 之外,即使磁盘组丢失也能重建 ASM 配置。安装后以及每次结构变更后都要执行。
- 修改 ASM 磁盘发现字符串(asm_diskstring) — 用于修改 ASM 查找磁盘的路径模式(如切换到 multipath、新的 udev 目录、ASMLib/AFD):先用 kfod 测试,再执行 asmcmd dsset。所有现有磁盘(包括 OCR/voting)必须也能被新字符串发现。
开始之前
- 具有 root 权限,并可用 grid 用户登录 shell;grid 的 profile 设置了 ORACLE_HOME=… 和 ORACLE_SID(+ASM…N…)。SQL 步骤通过 sqlplus / as sysasm 运行。
- 存储团队已将新 LUN 映射…到所有节点…;大小与现有磁盘相同;已拿到 WWID(或 VM 磁盘序列号);磁盘为空(没有文件系统、LVM 或旧的 ASM 头)。
- 磁盘组中的数据库有最新的 RMAN 备份;由于操作会产生 I/O 负载,已选择业务低峰时段。
- … 上没有其他正在进行的 rebalance(不要同时启动两个大型操作)。
指南阶段
- 容量与健康检查 — 显示磁盘组使用率 · 检查磁盘均衡和状态 · 显示兼容性和修复属性 · 按磁盘组的使用情况和正在进行的操作
- Rebalance 监控与 power 设置 — 显示正在进行的操作和 power 设置 · 修改 rebalance power · 监控 rebalance 直至完成
- 添加磁盘:诊断 — 显示 … 磁盘组的状态
- 准备新磁盘 — 扫描并识别新 LUN…(…)… · 扫描并识别新 LUN…(…)… · 定义 multipath alias · 将新磁盘加入 udev 规则 · 在磁盘上创建分区并写入 ASMLib 标签…(仅节点 1)… · 在其他节点上读取标签(…) …
- 添加磁盘:执行 — 将磁盘添加到 … 磁盘组 · 监控 rebalance 直至完成
- 添加磁盘:验证 — 确认新磁盘已成为成员 · 后续
- 替换磁盘:诊断 — 显示 … 磁盘组的状态 · 显示要替换磁盘的状态
- 准备新磁盘 — 扫描并识别新 LUN…(…)… · 扫描并识别新 LUN…(…)… · 定义 multipath alias · 将新磁盘加入 udev 规则 · 在磁盘上创建分区并写入 ASMLib 标签…(仅节点 1)… · 在其他节点上读取标签(…) …
- 替换磁盘:执行 — 如果旧磁盘仍为 ONLINE,将其 offline · 用新磁盘替换该磁盘 · 添加新磁盘并删除旧磁盘(EXTERNAL) · 监控 rebalance 直至完成
- 替换磁盘:验证与后续 — 验证替换结果 · 检查旧磁盘的头部
- 删除磁盘:诊断 — 显示 … 磁盘组的状态 · 删除后空间是否足够
- 删除磁盘:执行 — 从 … 删除磁盘 · 监控 rebalance 直至完成
- 删除磁盘:验证并从操作系统中移除 — 确认被删除的磁盘为 FORMER · 从操作系统中移除磁盘
- 故障磁盘:诊断 — 显示 offline 磁盘和剩余时间 · 在操作系统中检查磁盘路径…(…)… · 在操作系统中检查磁盘路径 · 在 ASM alert log 中查找磁盘事件
- 故障磁盘:恢复磁盘(ONLINE) — 将磁盘 online · 监控 resync 直至完成 · 确认磁盘已 online
- 故障磁盘:延长删除时限 — 为 offline 磁盘设置新时限 · 修复之后
- 新磁盘组:诊断 — 显示现有磁盘组和候选磁盘
- 准备新磁盘 — 扫描并识别新 LUN…(…)… · 扫描并识别新 LUN…(…)… · 定义 multipath alias · 将新磁盘加入 udev 规则 · 在磁盘上创建分区并写入 ASMLib 标签…(仅节点 1)… · 在其他节点上读取标签(…) …
- 新磁盘组:创建 — 创建 … 磁盘组 · 在所有节点上 mount 磁盘组 · 验证磁盘组资源
- 新磁盘组:后续 — 启用磁盘组
- Mount / dismount:诊断 — 显示磁盘组状态及其使用者 · 显示 Clusterware 资源
- 备份 ASM spfile、口令文件和元数据 — 显示 ASM spfile 和口令文件的位置 · 创建备份目录 · 执行备份 · 将备份复制到服务器之外
- 发现字符串:诊断 — 显示当前字符串和成员磁盘的路径 · 确认新字符串能找到所有成员磁盘
- 发现字符串:执行与验证 — 修改发现字符串 · 在所有 ASM 实例上验证