联系:手机/微信(+86 17813235971) QQ(107644445)
标题:O/S-Error: (OS 23) 数据错误(循环冗余检查)—故障处理
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
有客户由于磁盘坏道导致数据文件访问报ORA-27070 OSD-04016 O/S-Error等相关错误
rman 尝试读取88号文件
RMAN> backup datafile 88 format 'e:\rman\%d_%T_%I.%s%p'; 启动 backup 于 05-6月 -24 使用目标数据库控制文件替代恢复目录 分配的通道: ORA_DISK_1 通道 ORA_DISK_1: SID=2246 设备类型=DISK 通道 ORA_DISK_1: 正在启动全部数据文件备份集 通道 ORA_DISK_1: 正在指定备份集内的数据文件 输入数据文件: 文件号=00088 名称=E:\APP\ADMINISTRATOR\ORADATA\XFF\XIFENFEI.ORA 通道 ORA_DISK_1: 正在启动段 1 于 05-6月 -24 RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-03009: backup 命令 (ORA_DISK_1 通道上, 在 06/05/2024 18:33:43 上) 失败 ORA-19501: 文件 "E:\APP\ADMINISTRATOR\ORADATA\XFF\XIFENFEI.ORA", 块编号 322944 (块大小=8192) 上出现读取错误 ORA-27070: 异步读取/写入失败 OSD-04016: 异步 I/O 请求排队时出错。 O/S-Error: (OS 23) 数据错误(循环冗余检查)。
检查系统日志,发现有报:设备 \Device\Harddisk0\DR0 有一个不正确的区块
到目前为止基本上可以判断是文件系统或者磁盘层面出现坏道导致该问题(磁盘坏道概率更大),使用工具对损坏数据文件进行强制拷贝,提示少量扇区数据无法拷贝
通过dbv检查恢复出来文件效果
E:\check_db>DBV FILE=D:/XIFENFEI.ORA DBVERIFY: Release 11.2.0.3.0 - Production on 星期日 6月 9 22:17:28 2024 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. DBVERIFY - 开始验证: FILE = D:\XIFENFEI.ORA 页 323055 标记为损坏 Corrupt block relative dba: 0x1604edef (file 88, block 323055) Bad header found during dbv: Data in bad block: type: 229 format: 5 rdba: 0xe5e5e5e5 last change scn: 0xe5e5.e5e5e5e5 seq: 0xe5 flg: 0xe5 spare1: 0xe5 spare2: 0xe5 spare3: 0xe5e5 consistency value in tail: 0x4c390601 check value in block header: 0xe5e5 computed block checksum: 0x5003 DBVERIFY - 验证完成 检查的页总数: 524288 处理的页总数 (数据): 204510 失败的页总数 (数据): 0 处理的页总数 (索引): 127485 失败的页总数 (索引): 0 处理的页总数 (其他): 3030 处理的总页数 (段) : 0 失败的总页数 (段) : 0 空的页总数: 189262 标记为损坏的总页数: 1 流入的页总数: 0 加密的总页数 : 0 最高块 SCN : 184063522 (3470.184063522)
运气不错,就一个数据库block异常,通过dba_extents查询坏块所属对象,运气不太好是一个表数据
SQL> SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, A.PARTITION_NAME 2 FROM DBA_EXTENTS A 3 WHERE FILE_ID = &FILE_ID 4 AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1; 输入 file_id 的值: 88 原值 3: WHERE FILE_ID = &FILE_ID 新值 3: WHERE FILE_ID = 88 输入 block_id 的值: 323055 原值 4: AND &BLOCK_ID BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1 新值 4: AND 323055 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1 OWNER ------------------------------ SEGMENT_NAME -------------------------------------------------------------------------------- SEGMENT_TYPE TABLESPACE_NAME PARTITION_NAME ------------------ ------------------------------ ------------------------------ XFFUSER XFFTABLE TABLE XFFTBS_TAB2
设置跳过坏块导出数据,然后重命名原表导入数据,完成本次恢复,以前有过类似恢复:
一次侥幸的OSD-04016 O/S-Error异常恢复
O/S-Error: (OS 23) 数据错误(循环冗余检查) 数据库恢复