ORA-15081: failed to submit an I/O operation to a disk-存储挂载异常

本文记录了一次Oracle RAC服务因I/O错误无法启动的问题,表现为数据库日志中大量出现I/O失败警告。经检查发现是存储电源线松动导致的故障。解决方案是关闭服务器和存储,重新启动存储,然后依次启动RAC服务器,最终恢复正常。问题揭示了存储冗余和电源管理的重要性。

今天驻地运维的兄弟在QQ上找我,说报告系统的RAC使用不了,Oracle RAC服务无法启动,

现像:

 [oracle@rac1 ~]$ crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon. 

 [oracle@rac2 ~]$ crs_stat -t
CRS-0184: Cannot communicate with the CRS daemon. 

分析 数据库日志:

日志大量报I/O错误,根据经验这是存储层面出现问题,让驻地运维的兄弟去机房看看存储磁盘是不是挂了,10分钟后告诉我,存储电源线松了,我晕惊恐,电源竟然不搞冗余,省几千来块钱没必要了!还好这不是生产环境,不然肯定又被批了!

解决:

我让运维的兄弟先把服务器关掉,存储也关掉,先开存储-->(5分钟左右)开启一台DB服务器-(观察RAC服务器起来后)--->再开启另外一台DB服务

数据库RAC服务正常应用 。

2014-10-23 08:00:04.026000 +08:00

Thread 1 advanced to log sequence 273 (LGWR switch)
  Current log# 1 seq# 273 mem# 0: +DATA/reportdb/onlinelog/group_1.297.861203105
2014-10-23 11:30:15.832000 +08:00
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:835804
 iop:0x2b81f05f1000 bufp:0x2b81ef908a00 offset(bytes):876404064256 iosz:16384 operation:1(Read) synchronous:1
 result: 4 osderr:0x3 osderr1:0x2e pid:757
WARNING: failed to read mirror side 1 of virtual extent 4 logical extent 0 of file 300 in group 1 from disk DATA  allocation unit 835804 reason error; if possible,will try another mirror side 
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:835800
 iop:0x2b93fecec000 bufp:0x2b93ff189e00 offset(bytes):876399837184 iosz:16384 operation:1(Read) synchronous:1
 result: 4 osderr:0x3 osderr1:0x2e pid:15697
WARNING: failed to read mirror side 1 of virtual extent 0 logical extent 0 of file 300 in group 1 from disk DATA  allocation unit 835800 reason error; if possible,will try another mirror side 
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:835800
 iop:0x2b726c038dd0 bufp:0x2b726b947e00 offset(bytes):876399869952 iosz:16384 operation:2(Write) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:806
Errors in file /u01/app/oracle/diag/rdbms/reportdb/reportdb1/trace/reportdb1_ckpt_806.trc:
ORA-15080: synchronous I/O operation to a disk failed
WARNING: failed to write mirror side 1 of virtual extent 0 logical extent 0 of file 300 in group 1 on disk 0 allocation unit 835800
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1340069
 iop:0x2acf1ad87c30 bufp:0x2acf46893e00 offset(bytes):1405164191744 iosz:122880 operation:2(Write) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20870
Errors in file /u01/app/oracle/diag/rdbms/reportdb/reportdb1/trace/reportdb1_ora_20870.trc:
ORA-15080: synchronous I/O operation to a disk failed
WARNING: failed to write mirror side 1 of virtual extent 2045 logical extent 0 of file 299 in group 1 on disk 0 allocation unit 1340069
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:835804
 iop:0x2b81f05f1000 bufp:0x2b81ef908a00 offset(bytes):876404064256 iosz:16384 operation:1(Read) synchronous:1
 result: 4 osderr:0x3 osderr1:0x2e pid:757
WARNING: failed to read mirror side 1 of virtual extent 4 logical extent 0 of file 300 in group 1 from disk DATA  allocation unit 835804 reason error; if possible,will try another mirror side 
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1317163
 iop:0x2abfb9408a50 bufp:0x2abfddf46000 offset(bytes):1381145509888 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1040548
 iop:0x2abfb940a920 bufp:0x2abfddc46000 offset(bytes):1091093659648 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1040548
-----------------------------node2 alertlog

WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1040548
 iop:0x2abfb940b2b0 bufp:0x2abfddcc6000 offset(bytes):1091094183936 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1040548
 iop:0x2abfb94093e0 bufp:0x2abfddd06000 offset(bytes):1091094446080 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1317163
 iop:0x2abfb9406410 bufp:0x2abfddf86000 offset(bytes):1381145772032 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1317163
 iop:0x2abfb9408830 bufp:0x2abfddfc6000 offset(bytes):1381146034176 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: IO Failed. subsys:/opt/oracle/extapi/64/asm/orcl/1/libasm.so dg:1, diskname:ORCL:DATA disk:0x0.0xe968bd99 au:1317163
 iop:0x2abfb940d5c0 bufp:0x2abfde006000 offset(bytes):1381146296320 iosz:262144 operation:1(Read) synchronous:0
 result: 4 osderr:0x3 osderr1:0x2e pid:20757
WARNING: failed to read mirror side 1 of virtual extent 10915 logical extent 0 of file 318 in group 1 from disk DATA  allocation unit 1317163 reason error; if possible,will try another mirror side
WARNING: failed to read mirror side 1 of virtual extent 10540 logical extent 0 of file 309 in group 1 from disk DATA  allocation unit 1040548 reason error; if possible,will try another mirror side
Errors in file /u01/app/oracle/diag/rdbms/reportdb/reportdb1/trace/reportdb1_ckpt_806.trc:
ORA-00206: error in writing (block 3, # blocks 1) of control file
ORA-00202: control file: '+DATA/reportdb/controlfile/current.300.861203103'
ORA-15081: failed to submit an I/O operation to a disk
ORA-15081: failed to submit an I/O operation to a disk
Errors in file /u01/app/oracle/diag/rdbms/reportdb/reportdb1/trace/reportdb1_ckpt_806.trc:
ORA-00221: error on write to control file
ORA-00206: error in writing (block 3, # blocks 1) of control file
ORA-00202: control file: '+DATA/reportdb/controlfile/current.300.861203103'
ORA-15081: failed to submit an I/O operation to a disk
ORA-15081: failed to submit an I/O operation to a disk
CKPT (ospid: 806): terminating the instance due to error 221
System state dump is made for local instance
ORA-1092 : opitsk aborting process
System State dumped to trace file /u01/app/oracle/diag/rdbms/reportdb/reportdb1/trace/reportdb1_diag_745.trc
2014-10-23 11:30:17.953000 +08:00
Trace dumping is performing id=[cdmp_20141023113016]
Instance terminated by CKPT, pid = 806
-------------------------------------asm log
2014-10-17 15:48:57.878000 +08:00
Starting background process ASMB
ASMB started with pid=21, OS id=722
2014-10-17 15:49:03.009000 +08:00
NOTE: ASMB process exiting due to lack of ASM file activity for 5 seconds
2014-10-23 11:30:16.057000 +08:00
WARNING: Disk DATA in mode 0x7f is now being offlined
WARNING: Disk DATA in mode 0x7f offline aborted
Trace dumping is performing id=[cdmp_20141023113016]
2014-10-23 11:30:18.829000 +08:00
NOTE: ASM client reportdb1:reportdb died unexpectedly.
NOTE: ASM client orcl1:orcl died unexpectedly.
NOTE: Process state recorded in trace file /u01/app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_822.trc
NOTE: Process state recorded in trace file /u01/app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_ora_14782.trc
Trace dumping is performing id=[cdmp_20141023113018]
2014-10-23 11:30:27.118000 +08:00
 Received dirty detach msg from node 1 for dom 1
Dirty detach reconfiguration started (old inc 12, new inc 12)
List of nodes:
 0 1
 Global Resource Directory partially frozen for dirty detach
* dirty detach - domain 1 invalid = TRUE
 4530 GCS resources traversed, 0 cancelled
 7279 GCS shadows traversed, 3614 replayed
Dirty Detach Reconfiguration complete
Trace dumping is performing id=[cdmp_20141023113027]
NOTE: PST enabling heartbeating (grp 1)
2014-10-23 11:30:29.036000 +08:00
Errors in file /u01/app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_smon_13847.trc:
ORA-15032: not all alterations performed
ORA-29702: error occurred in Cluster Group Service operation
ORA-29702: error occurred in Cluster Group Service operation
SMON (ospid: 13847): terminating the instance due to error 15032
System state dump is made for local instance
System State dumped to trace file /u01/app/oracle/diag/asm/+asm/+ASM1/trace/+ASM1_diag_13823.trc
Trace dumping is performing id=[cdmp_20141023113029]
Instance terminated by SMON, pid = 13847

<think> 首先,用户的问题是关于Oracle RMAN恢复时出现ORA-19504和ORA-27040错误的解决方案。具体错误是:ORA-19504: failed to create file "/data/xluni/controlfile/control01.ctl" ORA-27040: file create error, unable to create file。 从系统级指令中,我需要: - 所有行内数学表达式使用$...$格式(但在这个上下文中,可能不涉及数学表达式)。 - 独立公式使用$$...$$格式(同样,可能不需要)。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 用户提供的引用包括: - 引用[1]:描述了RMAN恢复时出现ORA-19504、ORA-17502、ORA-15001、ORA-15040错误,原因是磁盘组“DATA”不存在或未挂载- 引用[2]:讨论了RMAN备份时报ORA-19504和ORA-27038错误,原因是控制文件和数据文件的块大小不同,不能在同一备份集中。 用户的当前错误是ORA-19504和ORA-27040,具体在创建控制文件时出错。错误信息指向"/data/xluni/controlfile/control01.ctl"。 关键点: - ORA-19504: failed to create file – 这表示创建文件失败。 - ORA-27040: file create error, unable to create file – 这是文件系统级别的错误,可能由于权限、路径不存在、磁盘空间不足等原因。 结合引用: - 引用[1]中提到ORA-15001和ORA-15040,表明磁盘组问题。 - 引用[2]中提到块大小不同导致控制文件不能和数据文件在同一备份集。 但用户的错误中没有提到磁盘组或块大小问题。用户错误是直接关于创建文件失败。所以,我需要基于常见原因提供解决方案。 常见原因和解决方案: 1. **路径不存在或权限问题**: - 确保"/data/xluni/controlfile/"目录存在。 - Oracle用户(通常是oracle)必须有权限写入该目录。 - 检查目录权限:`ls -ld /data/xluni/controlfile/`,并确保oracle用户有写权限。 2. **磁盘空间不足**: - 检查目标文件系统的磁盘空间是否充足。使用`df -h /data`或类似命令。 3. **文件已存在**: - ORA-27040可能与文件已存在相关,但错误中没有提到ORA-27038(文件已存在)。用户错误是ORA-27040,通常表示创建错误。 - 确认目标文件是否已经存在。如果是,可能需要删除或覆盖(但需谨慎)。 4. **ASM磁盘组问题**: - 如果使用ASM(Oracle自动存储管理),错误中提到了"+DATA",但用户错误是"/data/xluni/controlfile/control01.ctl",这看起来是文件系统路径,而不是ASM路径。 - 用户错误指定了文件系统路径,所以可能不是ASM问题。但需确认环境。 5. **控制文件恢复问题**: - 在RMAN中恢复控制文件时,需要指定正确的位置。可能恢复脚本指定了错误的位置。 - 检查RMAN脚本或命令是否正确指定了控制文件的恢复位置。 6. **其他原因**: - 文件系统损坏。 - Oracle实例未启动或参数问题。 - 网络问题(如果是远程文件系统)。 结构化回答: 1. **确认错误原因**:解释错误含义。 2. **逐步解决方案**: a. 检查目录存在和权限。 b. 检查磁盘空间。 c. 验证文件是否已存在。 d. 检查Oracle参数(如DB_CREATE_FILE_DEST)。 e. 尝试手动创建文件测试。 f. 确保RMAN命令正确。 3. **生成相关问题**:在回答末尾添加相关问题。 引用处理: - 如果我在回答中引用用户提供的引用,需要在末尾添加引用标识。 - 例如,提到块大小问题或磁盘组问题,可以引用[^1]或[^2]。 用户错误具体是:ORA-19504: failed to create file "/data/xluni/controlfile/control01.ctl" ORA-27040: file create error, unable to create file。 所以,重点在文件创建错误。 回答结构: 1. 解释错误。 2. 提供解决方案步骤。 3. 总结。 4. 添加相关问题。 相关问题生成: - 类似于示例中的快速排序问题。 - 例如: 1. 如何防止RMAN恢复时的文件创建错误? 2. Oracle ASM磁盘组的常见管理问题? 3. 控制文件恢复的最佳实践? 确保中文回答。 </think>### Oracle RMAN恢复时出现ORA-19504和ORA-27040错误的解决方案 在Oracle RMAN恢复过程中,出现ORA-19504(failed to create file)和ORA-27040(file create error, unable to create file)错误,通常是由于文件系统级别的问题导致控制文件创建失败。具体错误信息如`ORA-19504: failed to create file "/data/xluni/controlfile/control01.ctl"`表明目标路径或文件无法被创建。这可能是目录权限不足、路径不存在、磁盘空间不足或文件已存在等原因引起的。下面我将一步步指导您解决此问题,确保恢复顺利进行。解决过程需要以Oracle用户(通常为`oracle`)操作,并在数据库mount或nomount状态下执行RMAN命令。 --- ### 步骤1: 确认错误原因和基本检查 - **错误解释**: - ORA-19504: 表示文件创建失败。 - ORA-27040: 是操作系统级别的错误,常见于文件系统权限、路径无效或空间不足。 - **立即检查项**: 1. **确认目录存在**: - 通过命令行检查目标目录是否有效: ```bash ls -ld /data/xluni/controlfile/ ``` - 如果目录不存在,创建它并设置正确权限: ```bash mkdir -p /data/xluni/controlfile/ chown oracle:oinstall /data/xluni/controlfile/ chmod 775 /data/xluni/controlfile/ ``` 2. **检查磁盘空间**: - 使用`df -h /data`查看磁盘空间使用情况。如果空间不足(例如使用率超过90%),需要清理文件或扩展磁盘。 3. **验证文件是否已存在**: - 执行`ls -l /data/xluni/controlfile/control01.ctl`。如果文件存在,删除或移动它(但需谨慎,避免数据丢失): ```bash rm -f /data/xluni/controlfile/control01.ctl ``` 4. **测试手动创建文件**: -oracle用户尝试创建空文件,验证权限: ```bash sudo -u oracle touch /data/xluni/controlfile/testfile ``` - 如果失败,错误信息会提示具体原因(如权限不足),您需要调整目录所有权或SELinux设置(如果启用)。 如果以上步骤未解决,进入详细配置检查。 --- ### 步骤2: 检查Oracle配置和RMAN命令 - **验证Oracle参数**: - 确保`DB_CREATE_FILE_DEST`参数指向正确位置。登录SQL*Plus: ```sql SQL> show parameter db_create_file_dest; ``` - 如果参数值不是`/data/xluni/controlfile/`,修改它: ```sql SQL> ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/data/xluni/controlfile/' SCOPE=spfile; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP NOMOUNT; -- 重新启动到nomount状态以应用更改 ``` - 检查控制文件路径是否在`CONTROL_FILES`参数中: ```sql SQL> show parameter control_files; ``` 确保包含`/data/xluni/controlfile/control01.ctl`。如果没有,更新参数文件(spfile)。 - **修正RMAN恢复命令**: - 在RMAN中恢复控制文件时,确保指定正确路径。例如: ```bash RMAN> STARTUP NOMOUNT; RMAN> RESTORE CONTROLFILE FROM '/path/to/backup/controlfile_backup.ctl'; -- 替换为实际备份路径 RMAN> ALTER DATABASE MOUNT; ``` - 如果备份文件路径错误或不可访问,RMAN会报错。确认备份文件存在且可读: ```bash ls -l /path/to/backup/controlfile_backup.ctl ``` - **处理ASM或块大小问题(如果适用)**: - 如果使用ASM(如错误中提到`+DATA`),确保磁盘组已挂载(引用[1])。但您的错误路径是文件系统路径(`/data/...`),而非ASM格式,因此可能不涉及此问题[^1]。 - 控制文件和数据文件块大小不同可能导致备份问题(引用[2]),但这通常影响备份而非恢复。检查块大小一致性: ```sql SQL> SELECT name, block_size FROM v$controlfile; SQL> SHOW PARAMETER db_block_size; ``` 如果块大小不匹配(例如控制文件16KB vs 数据文件8KB),恢复时需确保控制文件备份独立[^2]。 --- ### 步骤3: 高级故障排除 - **文件系统检查**: - 运行`fsck /dev/sdX`(替换为数据分区)检查文件系统完整性。 - 如果是NFS挂载,添加`rw,hard,nointr`选项到`/etc/fstab`,并重新挂载- **使用RMAN的`SET`命令指定路径**: - 在RMAN会话中显式设置控制文件创建路径: ```bash RMAN> STARTUP NOMOUNT; RMAN> SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/data/xluni/controlfile/%F'; RMAN> RESTORE CONTROLFILE FROM AUTOBACKUP; ``` - **日志分析**: - 检查RMAN日志和Oracle alert log: ```bash tail -f $ORACLE_BASE/diag/rdbms/<DB_NAME>/<INSTANCE_NAME>/trace/alert_<INSTANCE_NAME>.log ``` 日志可能提供更详细的错误原因(如I/O错误)。 如果所有步骤失败,考虑: - 从有效备份还原到其他位置。 - 咨询系统管理员检查硬件或网络问题。 --- ### 总结 解决ORA-19504和ORA-27040错误的核心是确保目标路径可访问、有写权限且空间充足。多数情况下,修复目录权限或调整Oracle参数即可恢复。预防措施包括定期验证备份路径和设置正确的环境变量[^1][^2]。如果问题持续,提供更多上下文(如OS版本、Oracle版本)有助于进一步诊断。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值