今天遇到了一个数据块损坏的错误,具体如下:
Alert日志的信息

Trace文件的信息

可以看到,损坏的数据文件是:
data file 3: ‘/OraPub/SM/oradata/SMMIS/datafile/o1_mf_sysaux_4vd6r5j2_.dbf’
坏块位置:(file # 3, block # 53337)

DBV:

注意“Total Pages Marked Corrupt : 1”,表明扫到了一处坏块。

根据坏块报错的File和Block确定损坏的Segment:

如上所示,这里损坏的是索引对象。
将该索引对象重建即可。

要重建该索引,无法通过普通的索引重建指令实现:

因为SYS_IOT_TOP_8798是AQ$_ALERT_QT_H的主键,所以不能够通过简单的rebuild实现重建。

对此,官方文档给出了说明:How to recreate the SYS.ALERT_QUE (文档 ID 430146.1)
惜分飞(程飞)对此也有所描述:http://www.xifenfei.com/3500.html

以下,为我的环境中的实践:

对于10.2版本的数据库,执行以下脚本,重建表、序列… 等对象
To re-create tables, sequence, type and queue for server alert in version 10.2:
SQL>@$ORACLE_HOME/rdbms/admin/dbmsslrt.sql
SQL>@$ORACLE_HOME/rdbms/admin/catalrt.sql

对于11以及更高版本的数据库,则需要执行如下脚本:
To re-create tables, sequence, type and queue for server alert in version 11 and above:
SQL>@$ORACLE_HOME/rdbms/admin/dbmsslrt.sql
SQL>@$ORACLE_HOME/rdbms/admin/catalrt.sql
SQL>@$ORACLE_HOME/rdbms/admin/catmwin.sql
SQL>@$ORACLE_HOME/rdbms/admin/exechae.sql

当前数据库版本

执行适用于10.2数据库版本的脚本:
dbmsslrt.sql

catalrt.sql

最后,重新编译失效对象:
To recompile the invalid objects:
@$ORACLE_HOME/rdbms/admin/utlrp.sql

In My Environment:

上述重建ALERT_QUE过程中,ALERT日志中的呈现:

再次查看数据库之前坏块的表的状态:

至此,修复完成。
——————————————————————————————
Done。

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

隐藏
变装