oracle RAC共享存储换盘操作指南

问题:

Oracle RAC 集群的共享存储需要换盘 (替换旧盘/故障盘)或扩容(增加可用空间),要求在尽量不影响集群与业务的前提下,安全完成共享磁盘的替换与容量扩展。


方案:

前置准备(换盘与扩容通用)

  1. 备份先行 :对数据库做完整备份;OCR 用 ocrconfig -export <文件名> 导出;表决盘用 dd if=<voting_disk> of=<备份文件> 备份。
  2. 存储侧规划:在新存储上划分与旧盘同等(或更大)的 LUN;扩容时额外预留空间用于 rebalance(重平衡期间需要同时容纳新旧副本数据)。
  3. 多路径与权限 :确认所有 RAC 节点都能看到新盘,且设备名、属主/属组、权限在全部节点保持一致(ASM 盘一般属主 grid、属组 asmadmin/asmdisk、权限 660;表决盘属主 oracle、属组 dba、权限 644)。
  4. 发现磁盘 :使用 ASMLIB 时执行 oracleasm scandisks、oracleasm listdisks;使用裸设备/多路径时确认 lsblk、multipath -ll 在所有节点 均能识别同一批设备。必要时调整 asm_diskstring。
  5. 清空新盘 :新盘加入前先清零盘头,避免残留元数据干扰,例如 dd if=/dev/zero of=<设备> bs=4096 count=1(⚠️ 高危,务必确认设备路径,误清会破坏 ASM 元数据)。

场景一:ASM 磁盘组扩容(加盘)

适用于数据/归档等 ASM 磁盘组空间不足,需要在线增加容量。

  1. 查看当前磁盘组容量与状态:

    sql 复制代码
    select name, state, type, total_mb, free_mb, offline_disks from v$asm_diskgroup;

    也可用 asmcmd lsdg 查看 Total_MB / Free_MB / Usable_file_MB。

  2. 向磁盘组添加新盘(在线操作,无需停库):

    sql 复制代码
    alter diskgroup DATA add disk '/dev/asm-diskN';

    也可带 rebalance 力度:... add disk '...' rebalance power 4;

  3. 监控重平衡进度:

    sql 复制代码
    select * from v$asm_operation;

    通过 asm_power_limit 调整重平衡力度(力度越大越快,但对业务 I/O 影响越大)。

  4. 验证:再次查询 v$asm_diskgroup,确认 free_mb 已增加、state 为 MOUNTED。

  5. 扩容后必做检查 :若采用「新建磁盘组」方式扩容,须同步更新 db_create_file_dest 参数或表空间的 default storage 属性,否则新数据文件仍会落在旧磁盘组上,新增空间无法被利用。


场景二:ASM 磁盘组换盘(替换旧盘 / 故障盘)

(1)计划内换盘(旧盘仍在线,推荐)------在线迁移法

思路:先加新盘 → 触发重平衡把数据搬过去 → 再删除旧盘 → 再次重平衡。全程在线。

  1. 添加新盘到目标磁盘组:

    sql 复制代码
    alter diskgroup DATA add disk '/dev/newdisk';
  2. 等待重平衡完成(v$asm_operation 无记录、v$asm_diskgroup 中各盘使用均衡)。

  3. 删除旧盘(按磁盘名删除,ASM 自动再次重平衡):

    sql 复制代码
    alter diskgroup DATA drop disk DATA_000N;

    查看盘名与状态:

    sql 复制代码
    select group_number, disk_number, name, path, state, mode_status, mount_status from v$asm_disk;
  4. 等待删除完成、重平衡结束,确认旧盘状态为 dropped 后即可在存储侧下线旧盘。

  5. 切勿中断加盘/删盘操作 :加盘过程中断(如 Ctrl+C 或连接中断)可能导致磁盘组被强制 dismount、控制文件写入报错,严重时需用 kfed 修复 PST 与 disk directory 元数据,风险很高。

(2)故障盘替换(磁盘已掉线/损坏)

  1. 确认冗余级别:v$asm_diskgroup.type(NORMAL/HIGH 有多副本,EXTERNAL 为单副本)。
    • NORMAL/HIGH:冗余副本仍可用,直接删除坏盘再补新盘:

      sql 复制代码
      alter diskgroup DATA drop disk DATA_000N;
      alter diskgroup DATA add disk '/dev/newdisk';
    • EXTERNAL:单副本,坏盘数据无冗余,需从备份恢复(RMAN restore/recover),不能仅靠加盘恢复。

  2. 用 kfed read <设备> 检查盘头状态(如 kfdhdb.hdrsts),辅助判断盘是否可用、是否仍属某磁盘组。
  3. 若盘被强制离线(state 显示 FORCING / mode_status 为 offline,或出现 _dropped 前缀盘),应先确认磁盘组剩余冗余与表决盘(voting disk)状态是否正常,避免集群因冗余不足而驱逐节点。

场景三:OCR 与 Voting Disk 换盘 / 迁移

当承载 OCR 和表决盘的 LUN 需要更换时,须用集群专用命令(不能用 cp/dd 直接搬运行中的文件)。

OCR(须以 root 执行,CRS 保持运行)

  1. 检查并备份:ocrcheck、ocrconfig -showbackup、ocrconfig -export <导出文件>。

  2. 替换/迁移 OCR 主副本(须已存在 ocrmirror,否则报 PROT-16/PROT-1):

    复制代码
    ocrconfig -replace ocr <OCR新位置>
  3. 替换/迁移 OCR 镜像:

    复制代码
    ocrconfig -replace ocrmirror <OCR镜像新位置>
  4. 在所有节点 执行 ocrcheck 校验,再用 crsctl check crs、crs_stat -t 确认集群资源正常。

Voting Disk(须停止 CRS,以 root 执行)

  1. 备份:ocrconfig -export <导出文件>,dd if=<voting_disk> of=<备份文件>。

  2. 所有节点停止集群:crsctl stop crs。

  3. 查看当前表决盘位置:crsctl query css votedisk。

  4. 添加新表决盘(CRS 停止时用 -force):

    复制代码
    crsctl add css votedisk <新位置> -force
  5. 删除旧表决盘:

    复制代码
    crsctl delete css votedisk <旧位置> -force
  6. 所有节点启动集群:crsctl start crs。

  7. 验证:crsctl query css votedisk、crsctl check crs、crs_stat -t。

⚠️ 风险提示:不得在 CRS 运行时增删表决盘,否则可能造成 OCR 损坏;换盘前务必确认备份可用。


风险提示汇总

  • ⚠️ 重平衡(rebalance)期间 I/O 明显上升,大磁盘组可能持续数天,务必避开业务高峰;必要时可下调 asm_power_limit 或暂缓。
  • ⚠️ 超大磁盘组、大量新盘加入时,ASM 实例共享池可能不足,出现 ORA-04031 导致实例 hang,需评估 ASM 内存配置。
  • ⚠️ 加盘/删盘命令一旦执行不要中断,避免元数据残留需 kfed 修复。
  • ⚠️ 所有节点设备名与权限必须一致,多路径未就绪会导致部分节点识别不到盘。
  • ⚠️ EXTERNAL 冗余磁盘组换盘无副本保护,须走备份恢复流程。

相关推荐
wangbing11251 小时前
重建oracle服务
数据库·oracle
唐小码1 小时前
MYSQL表中没有主键,怎么找到重复的数据
数据库
fengkai45451 小时前
十一、MySQL 第 4-7 章
运维·数据库·mysql
我科绝伦(Huanhuan Zhou)1 小时前
PostgreSQL 数据库小版本与大版本升级详解
数据库·postgresql
ao-weilai1 小时前
MySQL数据库:索引
数据库·mysql
shaibdoio1 小时前
瞬维AI落地经验:AI Agent工具调用准确率怎么提
数据库·人工智能·oracle
NPE~2 小时前
CMDB科普:配置管理数据库——运维相关
运维·数据库·科普·cmdb·配置管理数据库
Highcharts.js2 小时前
动态数据可视化架构:Highcharts + PHP + MySQL 从数据库到数据渲染
数据库·mysql·php·开发文档·实时数据·highcharts·图表开发
余槐i2 小时前
WAL 下写并发仍是 1:SQLite 单写者模型实测与绕开方案
数据库·python·性能优化·sqlite·wal