REBALANCE失败本身不会直接导致RAC停机,但若卡在关键路径(如DROP DISK后无法重建或新磁盘加入后无响应),会引发连锁反应:磁盘组冗余受损→ASM实例拒绝挂载→CRS资源启动失败→数据库无法打开;真正卡点在I/O阻塞、元数据异常或硬件故障,而非内存不足。
REBALANCE 失败本身不会直接导致 RAC 停机,但若它卡在关键路径上(比如 DROP DISK 后无法完成重建、或新磁盘加入后 REBALANCE 无响应),会引发连锁反应:磁盘组冗余受损 → ASM 实例拒绝挂载 → CRS 资源启动失败 → 数据库无法打开。此时加内存不是解法,**真正卡点在 I/O 阻塞、元数据异常或底层硬件故障**。asm 实例的内存(sga_target、large_pool_size)主要用于缓存元数据(如 disk header、allocation table)、协调 rebalance 任务队列,不参与 au 迁移的实际读写。实测表明:rebalance 卡住时,v$asm_operation 中 sofar 和 est_work 长期不变,gv$session_longops 无进展,top -hp 显示 asm_server_process cpu 占用极低——说明不是内存不足,而是 i/o 层被阻塞。
large_pool_size 只影响 extent map 缓存容量,对坏道盘重试、HBA 超时、CSSD 心跳抖动等根本问题无效asm_power_limit 控制并发迁移线程数,asm_diskstring 决定扫描范围,这两项才直接影响 rebalance 行为这不是配置问题,是硬件在“假死”。90% 的挂起案例中,v$asm_disk 仍显示 STATE = 'NORMAL',但 smartctl -a /dev/sdX 已暴露风险:
Reallocated_Sector_Ct > 0 或 Current_Pending_Sector > 0 → 物理扇区已损坏,ASM 读取 AU 时反复 timeout/var/log/messages 出现 end_request: I/O error on device sdX,时间戳与 rebalance 启动时间吻合dd if=/dev/zero of=/dev/sdX bs=1M count=1024 oflag=direct 单次耗时 > 500ms 或报 Input/output error
asmcmd lsdsk ——它只校验设备节点存在,不校验可写性当磁盘被 FORCE DROP 后未清理干净,或 rebalance 被手动中断多次,v$asm_disk 中可能出现状态异常的“幽灵磁盘”:
SELECT name, state, header_status, mode_status FROM v$asm_disk WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATADG');
state = 'DROPPING' 且 repair_timer = 0,说明 ASM 已放弃但元数据未释放,后续 ADD DISK 或 REBALANCE 全部被阻塞ALTER DISKGROUP DATADG DROP DISK 'ORCL:OLDISK' FORCE; 强制清除(注意:仅限物理盘已不可见)ALTER DISKGROUP DATADG REBALANCE POWER 5;,否则磁盘组持续处于非冗余状态Oracle 19c RAC 强制使用 asmfd,若初始化不彻底,会导致 rebalance 在跨节点阶段静默失败:
asmcmd afd_lsdsk,输出必须完全一致(磁盘名、状态 a 或 f);若有节点返回空,说明 AFD 未接管该设备ls -l /dev/mapper/asm-data9:属主必须是 grid:asmadmin,权限必须是 brw-rw----,major/minor 号跨节点一致scsi_id -g -u -d /dev/sda 输出需与 /etc/multipath.conf 中 wwid 字段**逐字符一致**(含大小写、空格)oracleasm ——19c 中它已被移除,残留配置会导致 KFED-00322 或 ORA-15077
ALTER DISKGROUP ... SET ATTRIBUTE,都可能触发二次 rebalance 并中断当前流程,而这个中断不会报错,只会让 v$asm_operation 停滞。