ORA-15080是存储链路故障的最终告警,非孤立错误,常伴磁盘不可达、权限异常、多路径失败、NFS挂载异常或底层I/O错误;需结合group/disk/AU定位根因,并优先验证OS层磁盘可达性与权限。
ORA-15080 是什么信号,不是孤立错误
ora-15080: synchronous i/o operation to a disk failed 从不单独出现——它永远是存储链路出问题的“最后一声警报”。背后大概率是磁盘不可达、权限异常、多路径切换失败、nfs挂载异常、或底层存储返回 input/output error(linux error 5)或 connection timed out(aix error 78)。它本身不告诉你哪块磁盘坏了,但会附带关键线索:group:1 disk:0 au:462813、file 324、allocation unit 462813 这些字段才是定位根因的坐标。
立刻验证磁盘可达性与权限(别跳过这步)
很多 DBA 直接查 ASM 磁盘组状态,却漏掉最基础的 OS 层检查。执行以下三步必须串行:
- 用
ls -l /dev/asmdisk/mesdbdata2确认设备文件存在且属主为oracle:oinstall;若报Permission denied(如ORA-15025+Error: 13),立刻检查 udev 规则或asm_diskstring路径是否被 SELinux 拦截 - 用
dd if=/dev/zero of=/dev/asmdisk/mesdbdata2 bs=8192 count=100 oflag=direct测试裸写——oflag=direct绕过缓存,真实反映 ASM 路径 I/O 能力;失败则说明磁盘已离线或 LUN 不可见 - 在 RAC 环境中,确认所有节点都看到同一块盘:
ls -l /dev/asmdisk/*输出应完全一致;若某节点缺失,查 multipath 状态:mpathconf --show和systemctl status multipathd
ASM 磁盘头损坏时,kkfdrv 和 amdu 是唯二可信工具
当 asmcmd lsdg 显示磁盘组 MOUNTED 但无法读写,或 ALTER DISKGROUP ... CHECK 卡住,极可能是磁盘头(disk header)损坏。此时切忌用 dd 盲刷、更不能重建磁盘组。
- 先用
amdu提取元数据镜像:amdu -diskstring '/dev/asmdisk/*' -dump 'DATA',生成amdu_*.log和amdu_*.dmp,确认能否解析出 AU 分布和 file directory - 若解析失败,用
kkfdrv(Oracle 内部工具,需 MOS 文档1551384.1获取)检查磁盘头结构:kkfdrv -o /dev/asmdisk/data1;输出中state = 0x0表示磁盘未被 ASM 识别,state = 0x2才是正常 - 修复仅限于单块磁盘头损坏且有完整 mirror 的情况:用备份的磁盘头(来自
amdudump)+dd回写前 1MB(bs=4096 count=256),操作前务必dd if=/dev/asmdisk/data1 of=/backup/data1_hdr.bak bs=4096 count=256
别把 NFS 当本地盘用:DNFS 和 mount 参数是隐形雷区
在 12c+ GI 中用 NFS 做 ASM 磁盘,ORA-15080 常源于 DNFS 自动启用后与 NFS server 的端口协商失败,尤其当 export 配置了 secure(默认只允许
- 临时禁用 DNFS 验证是否为根因:
sqlplus / as sysasm→alter system set "_disable_dnfs"=true scope=spfile;,重启 ASM 实例 - 长期方案必须改 mount 选项:去掉
secure,加noac,nolock,intr,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=3;特别注意noac(关闭属性缓存),否则 ASM 元数据更新可能延迟数秒 - 验证 NFS 稳定性:用
time dd if=/dev/zero of=/nfs/disk1 bs=1M count=1024 oflag=direct多次运行,观察耗时波动是否 >20%——波动大说明网络抖动或 NFS server 负载过高
真正棘手的从来不是 ORA-15080 报错本身,而是它背后混杂的存储协议栈(FC/iSCSI/NFS)、OS 内核参数(如 vm.dirty_ratio)、多路径策略(path_fail_secs 设置过短会导致 ASM 误判磁盘离线)三层叠加故障。修完记得查 v$asm_disk_iostat 和系统日志 /var/log/messages,确认没有持续的 timeout 或 resend 记录——那才是隐患还在呼吸的证据。










