墨墨导读:某客户单位数据库出现异常,大致现象是:数据库状态是open的,但是其中一个数据文件无法访问,本文分享排查原因与解决问题的整个过程。
通过ls 查看文件都报错,如下所示:
[oracle@oracledata01 oracle]$ ls
ls: 无法访问zf4.dbf: 输入/输出错误
同时dd命令也无法读取该文件:
[oracle@oracledata01 fd]$ dd if=zf4.dbf bs=8192 count=1 skip=1|od -x|header -1
bash: header: command not found
dd: 正在打开"zf4.dbf": 没有那个文件或目录
此时在从数据库层面看到的信息类似如下:
Tue Apr 28 16:49:51 2020
Errors in file /oracle_app/Oracle12c/diag/rdbms/orcl/orcl/trace/orcl_ora_9146.trc:
ORA-01157: 无法标识/锁定数据文件 11 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 11: '/oracle_data/oracle/zf4.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...
Tue Apr 28 16:49:51 2020
Errors in file /oracle_app/Oracle12c/diag/rdbms/orcl/orcl/trace/orcl_m000_9152.trc:
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 5: Input/output error
Additional information: 3
ORA-01122: 数据库文件 11 验证失败
ORA-01110: 数据文件 11: '/oracle_data/oracle/zf4.dbf'
ORA-01565: 标识文件 '/oracle_data/oracle/zf4.dbf' 时出错
ORA-27037: 无法获得文件状态
Linux-x86_64 Error: 5: Input/output error
Additional information: 3
Tue Apr 28 16:50:19 2020
USER (ospid: 9309): terminating the instance
从上述信息来看,数据库第11号文件无法读取。
在我们进行恢复之前,客户进行了多次尝试,还遭遇了一些数据库坏块,也遇到了不少ora-00600 错误:
Wed Apr 29 03:10:12 2020
Errors in file /oracle_app/Oracle12c/diag/rdbms/orcl/orcl/trace/orcl_j009_65816.trc:
ORA-12012: 自动执行作业 "ZX_XT"."JS_XT_XZGLXX_XZXK_FR" 出错
ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小
ORA-06512: 在 "ZX_XT.PKG_双公示接收_邢_2019", line 1071
ORA-00942: 表或视图不存在
ORA-02063: 紧接着 line (起自 BM_SJJH)
alter database datafile 11 resize 20g
Completed: alter database datafile 11 resize 20g
Wed Apr 29 03:10:15 2020
Corrupt Block Found
CONT = 0, TSN = 1, TSNAME = SYSAUX
RFN = 3, BLK = 3, RDBA = 12582915
OBJN = 1, OBJD = -1, OBJECT = _NEXT_OBJECT, SUBOB