突发,亲历数据仓库ORA-01578:ORACLE data block corrupted

来源:这里教程网 时间:2026-03-03 19:45:43 作者:

???? 1.故障现象 [oracle@rptdb1 ~]$ rman target / Recovery Manager: Release 19.0.0.0.0 - Production on Sat Mar 2 08:22:42 2024 Version 19.3.0.0.0 Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved. RMAN-00571: =========================================================== RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS =============== RMAN-00571: =========================================================== RMAN-00554: initialization of internal recovery manager package failed RMAN-12001: could not open channel default RMAN-10008: could not create channel context RMAN-10024: error setting up for rpc polling RMAN-10006: error running SQL statement: select action from gv$session where sid=:1 and serial#=:2 and inst_id=:3 RMAN-10002: Oracle error: ORA-00604: error occurred at recursive SQL level 2 ORA-01578: ORACLE data block corrupted (file # 1, block # 115747) ORA-01110: data file 1: '+DATA/RPTDB/system01.dbf' 同时查询alert日志,报system表空间有坏快 2024-03-02T08:22:42.694285+08:00 Errors in file /u01/app/oracle/diag/rdbms/rptdb/rptdb1/trace/rptdb1_ora_32329.trc  (incident=24462): ORA-01578: ORACLE data block corrupted (file # 1, block # 115747) ORA-01110: data file 1: '+DATA/RPTDB/system01.dbf' ???? 2.坏快校验 ✨ 2.1 DBV工具 dbv file=+DATA/RPTDB/system01.dbf DBVERIFY - Verification complete Total Pages Examined         : 116480 Total Pages Processed (Data) : 80901 Total Pages Failing   (Data) : 0 Total Pages Processed (Index): 13056 Total Pages Failing   (Index): 0 Total Pages Processed (Other): 5087 Total Pages Processed (Seg)  : 1 Total Pages Failing   (Seg)  : 0 Total Pages Empty            : 16667 Total Pages Marked Corrupt   : 769 Total Pages Influx           : 0 Total Pages Encrypted        : 0 Highest block SCN            : 2742156 (0.2742156) 这里Total Pages Marked Corrupt:769 说明有了坏块   ✨ 2.2 查询坏块对象 先查看损坏的是什么类型的数据库对象: SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME FROM DBA_EXTENTS  WHERE FILE_ID = 1   AND 115760 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS;   发现这是sys用户的一个簇 说明:cluster是簇,可以将两个或多个表捆绑在一起, 它是一种数据库结构,在这个结构中, 可以将两个或者多个表储存在相同的数据块或段中, 加入到cluster中的每个表行将物理地存储在相同的块中, 好像这些表在cluster key 处连接起来了一样 ???? 3.故障处理 ✨ 3.1 坏块验证 set linesize 200 select * from v$database_block_corruption; rman target / run{     allocate channel d1 type disk;     backup check logical validate datafile 1;     release channel d1; }; select * from v$database_block_corruption; ### 3.2 recoverblock恢复 rman target / RMAN> blockrecover datafile 1 block 115760; ???? 4.总结 >遇到ORA-01578后,第一步应首先确定rman备份情况,如果有可用备份, 一切都不太糟糕,几条rman命令就可以修复 如果没有再确定坏块对应的是什么对象, 如果是索引等非数据对象,可以考虑drop后再create一次; 如果坏块落在数据上,设置10231内部事件, 然后可以试一下用bbed或者其他工具直接对数据文件进行二进制编辑从而手动修复数据文件

相关推荐