ITPub博客

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

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

原创 Oracle 作者:wddwr7307914 时间:2024-03-20 06:35:31 0 删除 编辑

📣 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或者其他工具直接对数据文件进行二进制编辑从而手动修复数据文件







来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69947868/viewspace-3009489/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
中国DBA联盟(ACDU)成员,Oracle PostgreSQL ACE,CSDN博客专家及B站知名UP主,全网粉丝10万+,目前服务于工业互联网,擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复,安装迁移,性能优化、故障应急处理。

注册时间:2020-06-13

  • 博文量
    203
  • 访问量
    212831