同事在给客户做数据库巡检的过程中,发现其中一个数据库的alert日志中报了一个坏块的错误信息,具体如下:

Reading datafile '+DATA_DW/xtdw/datafile/sysaux.295.819217697' for corruption at rdba: 0x0081140e (file 2, block 70670)

Read datafile mirror 'DATA_DW_CD_05_DWCEL02' (file 2, block 70670) found same corrupt data (no logical check)

Read datafile mirror 'DATA_DW_CD_09_DWCEL01' (file 2, block 70670) found same corrupt data (no logical check)

Errors in file /u01/app/oracle/diag/rdbms/xtdw/xtdw1/trace/xtdw1_smon_12209.trc  (incident=128756):

ORA-01578: ORACLE 数据块损坏 (文件号 2, 块号 70670)

ORA-01110: 数据文件 2: '+DATA_DW/xtdw/datafile/sysaux.295.819217697'

Errors in file /u01/app/oracle/diag/rdbms/xtdw/xtdw1/trace/xtdw1_smon_12209.trc:

ORA-00604: 递归 SQL 级别 1 出现错误

ORA-01578: ORACLE 数据块损坏 (文件号 2, 块号 70670)

ORA-01110: 数据文件 2: '+DATA_DW/xtdw/datafile/sysaux.295.819217697'

Fri Jan 26 17:10:41 2018

Sweep [inc][128756]: completed

Corrupt Block Found

         TSN = 1, TSNAME = SYSAUX

         RFN = 2, BLK = 70670, RDBA = 8459278

         OBJN = 270, OBJD = 268, OBJECT = SMON_SCN_TO_TIME_AUX, SUBOBJECT = 

         SEGMENT OWNER = SYS, SEGMENT TYPE = Cluster Segment

从错误日志可以看出是SMON_SCN_TO_TIME_AUX表出现了坏块。为了谨慎起见,还是在测试环境中模拟了整个故障,并做了恢复测试。

1、模拟故障

[oracle@ggdb02 ~]$ bbed parfile=bbed.par

Password:

 

BBED: Release 2.0.0.0.0 - Limited Production on Sat Feb 24 13:22:38 2018

 

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

 

************* !!! For Oracle Internal Use only !!! ***************

 

BBED> set dba 2,411

DBA 0x0080019b (8389019 2,411)

 

BBED> corrupt

Warning: contents of previous BIFILE will be lost. Proceed? (Y/N) y

Block marked media corrupt.

 

BBED> sum

Check value for File 2, Block 411:

current = 0xda6e, required = 0xda6e

 

BBED> exit

使用BBED工具故意损坏(2,411)数据块。

SQL> startup force

ORACLE instance started.

 

Total System Global Area 835104768 bytes

Fixed Size 2257840 bytes

Variable Size 322964560 bytes

Database Buffers 507510784 bytes

Redo Buffers 2371584 bytes

Database mounted.

Database opened.

 

SQL> select * from SMON_SCN_TIME;

select * from SMON_SCN_TIME

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 2, block # 411)

ORA-01110: data file 2: '/u01/app/oracle/oradata/ggdb/sysaux01.dbf'

 

SQL>select tablespace_name, segment_type, owner, segment_name from dba_extents where file_id = 2 and 411 between block_id and block_id + blocks - 1;

 

TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME

--------------- --------------- ---------- ------------------------------

SYSAUX CLUSTER SYS SMON_SCN_TO_TIME_AUX

 

SQL>

可见,故障已经重现,SMON_SCN_TO_TIME_AUX表已经无法访问。

 

2、故障处理方案

(1).重启数据库,并设置12500 event

SHUTDOWN IMMEDIATE

STARTUP RESTRICT

ALTER SYSTEM SET EVENTS '12500 TRACE NAME CONTEXT FOREVER, LEVEL 10';

 

(2).获取SMON_SCN_TIME 和SMON_SCN_TO_TIME_AUX的表结构和相关索引结构

SET LONG 1000

SET LINESIZE 500

SELECT DBMS_METADATA.GET_DDL('CLUSTER', 'SMON_SCN_TO_TIME_AUX') FROM DUAL;

SELECT DBMS_METADATA.GET_DDL('TABLE', 'SMON_SCN_TIME') FROM DUAL;

SELECT DBMS_METADATA.GET_DDL('INDEX', A.INDEX_NAME) FROM DBA_INDEXES A WHERE TABLE_NAME IN('SMON_SCN_TO_TIME_AUX', 'SMON_SCN_TIME');

 

(3).删除相关的表

DROP TABLE SMON_SCN_TIME;

DROP CLUSTER SMON_SCN_TO_TIME_AUX;

 

(4).重新执行步骤2中获取的表结构语句,重新创建SMON_SCN_TO_TIME_AUX和SMON_SCN_TIME表(注意:要先创建SMON_SCN_TO_TIME_AUX表)

 

(5).禁用12500 event并重启数据库

ALTER SYSTEM SET EVENTS '12500 TRACE NAME CONTEXT OFF';

SHUTDOWN IMMEDIATE

STARTUP

 

3、处理过程中遇到的问题

SQL> DROP TABLE SMON_SCN_TIME;

DROP TABLE SMON_SCN_TIME

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 2, block # 411)

ORA-01110: data file 2: '/u01/app/oracle/oradata/ggdb/sysaux01.dbf'

 

SQL> DROP CLUSTER SMON_SCN_TO_TIME_AUX;

DROP CLUSTER SMON_SCN_TO_TIME_AUX

*

ERROR at line 1:

ORA-00951: cluster not empty

在执行方案的第3步时,无法成功删除SMON_SCN_TIME表,此时,尝试使用truncate cluster smon_scn_to_time_aux的方式来修复该故障,但仍然报错:

SQL> truncate TABLE SMON_SCN_TIME;

truncate TABLE SMON_SCN_TIME

*

ERROR at line 1:

ORA-03292: Table to be truncated is part of a cluster

 

 

SQL> truncate CLUSTER SMON_SCN_TO_TIME_AUX;

truncate CLUSTER SMON_SCN_TO_TIME_AUX

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 2, block # 411)

ORA-01110: data file 2: '/u01/app/oracle/oradata/ggdb/sysaux01.dbf'

 

最终,只能再次借用了删除数据的非常规方法,直接修改了基表信息,成功删除了SMON_SCN_TIME表,删除了SMON_SCN_TIME表之外,可正常删除SMON_SCN_TO_TIME_AUX。

SQL> select object_id, data_object_id , object_name from dba_objects where object_name='SMON_SCN_TIME';

 

OBJECT_ID DATA_OBJECT_ID OBJECT_NAME

---------- -------------- -----------------------------------

87932 87895 SMON_SCN_TIME

 

SQL> delete from tab$ where obj#=87932;

1 row deleted.

 

SQL> commit;

Commit complete.

 

SQL>

SQL> update obj$ set type#=10 where obj#=87932;

1 row updated.

 

SQL> commit;

Commit complete.

 

SQL> alter system flush buffer_cache;

System altered.

 

SQL> alter system flush shared_pool;

System altered.

 

SQL> DROP CLUSTER SMON_SCN_TO_TIME_AUX;

Cluster dropped.

 

SQL> select object_id, data_object_id , object_name from dba_objects where object_name like '%SMON%';

no rows selected

 

SQL>

重建完相关表和索引后,坏块故障成功解决。

解决SMON_SCN_TO_TIME_AUX表损坏故障的更多相关文章

  1. 解决数据库 Table 'content_tags' is marked as crashed and should be repaired 表损坏问题

    今天突然网站TAG页面打不开了,打开debug,发现提示 Table 'content_tags' is marked as crashed and should be repaired 这样的错误 ...

  2. 怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障

    怎样修复“Windows/System32/Config/System中文件丢失或损坏”故障 英文原文引自 http://xphelpandsupport.mvps.org/how_do_i_repa ...

  3. MySQL表损坏预防与修复

    1.       表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. 3. mysqld 进程在写表时 ...

  4. sql2005数据库置疑修复断电崩溃索引损坏 数据库索引错误修复/数据库表损坏/索引损坏/系统表混乱等问题修复

    sql2005数据库置疑修复断电崩溃索引损坏 数据库索引错误修复/数据库表损坏/索引损坏/系统表混乱等问题修复 客 户 名 称 济南某电子商务公司 数 据 类 型 SQL2005数据库 故 障 检 测 ...

  5. win7注册表损坏的修复方法

    win7注册表损坏的修复方法 发布时间:2013-07-19 09:31发布者:系统城-小薇浏览数:3129 注册表是window系统中的一个非常重要的数据库,用于存储电脑系统和应用程序的设置信息,我 ...

  6. 数据表损坏:Incorrect key file for table

    最近做项目过程中,调用数据库内容,老是出现一些类似于数据表损坏的提示信息(Incorrect key file for table edison_category),查询不到数据,很是恼火,后来冷静下 ...

  7. MYSQL数据表损坏的原因分析和修复方法小结

    MYSQL数据表损坏的原因分析和修复方法小结 1.表损坏的原因分析 以下原因是导致mysql 表毁坏的常见原因: 1. 服务器突然断电导致数据文件损坏. 2. 强制关机,没有先关闭mysql 服务. ...

  8. C/C++编译和链接过程详解 (重定向表,导出符号表,未解决符号表)

    详解link  有 些人写C/C++(以下假定为C++)程序,对unresolved external link或者duplicated external simbol的错误信息不知所措(因为这样的错 ...

  9. mysql数据库 myisam数据存储引擎 表由于索引和数据导致的表损坏 的修复 和检查

    一.mysqlcheck 进行表的检查和修复 1.检查mysqlisam存储引擎表的状态 #mysqlcheck -uuser -ppassword database  table  -c  #检查单 ...

随机推荐

  1. sql语句优化方案

    1. 为查询缓存优化你的查询 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启查询缓存,因为这些函数的返回是会不定的易变的. 所以,你所需要的就是用一个变量来代替MySQL的函数 ...

  2. pa14-30条职场经验

    可以说是很多本厚厚的职场经验书籍的精华部分,掌握了这30条可以说是天下无敌了,但真要掌握这30条经验可不是什么容易的事情,他们都是环环相 扣的,一条做不好可能有些能做好的项目就会落空,耐下性子,看看你 ...

  3. C#log4net引入配置文件后,数据库连接找不到并且有很多 未能找到元素“appender”的架构信息

    今天用了log4net加入配置信息后,数据库链接的字符串就报错,无法连接数据库.后来发现,只需要调整一下位置就可以了 configSections 节点必须写在 connectionStrings 节 ...

  4. ListView的ScrollListener

    @Override public void onScrollStateChanged(AbsListView paramAbsListView, int paramInt) { //当屏幕停止滚动时为 ...

  5. JAVA基础知识总结8(设计模式)

    设计模式:JAVA中有23种设计模式 1.解决问题最行之有效的思想. 2.是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结. 3.使用设计模式是为了可重用代码.让代码更容易被他人理解 ...

  6. git push是报Permission denied (publickey)错误解决

    今天晕了半天了,搞了个git工程到github上,以为很简单,因为之前也弄过,那知道搞了大半天都搞不好,一直报如下错误 D:\javawork\ee-0.0.1-SNAPSHOT>git pus ...

  7. Ubuntu14.04文件目录说明

    一.Dev设备目录 二.etc配置文件目录 三.bin默认程序安装目录 四.boot系统启动用到的配置文件以及内核镜像 五.home用户目录 六.lib库文件目录 七.media系统自动挂载设备会选择 ...

  8. BuilderPattern(23种设计模式之一)

    设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大 ...

  9. 如何使用ArcPy

    ArcPy可以很方便的通过脚本调用ArcGIS的各种函数和功能.在此简单介绍一下.方法包括两种,第一种是直接使用ArcGIS中的命令行,输入一句,执行一句:第二种是创建一个Python脚本,直接执行其 ...

  10. [转载]Redhat Enterprise 6.1 如何使用免费的CentOS的yum源

    Redhat Enterprise 6.1 如何使用免费的CentOS的yum源 graybull posted @ 2013年2月18日 22:29 in Unix/Linux with tags  ...