问题描述
在客户的数据库中,恢复之后打开数据库后遇到如下问题,ORA-00600 kdsgrp1错误,这个错误主要指对应索引ROWID,在数据表中找不到记录,这表明出现了数据一致性问题.
专家解答
我们可以通过重建索引来解决,以下错误提示表明问题出现在file 3 block 32538号数据块上.
以下摘录了一段error stack :
*** ACTION NAME:(Advisor Task Maintenance) 2011-07-12 08:52:46.971 *** MODULE NAME:(MMON_SLAVE) 2011-07-12 08:52:46.971 *** SERVICE NAME:(SYS$BACKGROUND) 2011-07-12 08:52:46.971 *** SESSION ID:(158.5) 2011-07-12 08:52:46.971 row 00c07f1a.4d continuation at file# 3 block# 32538 slot 78 not found ************************************************** KDSTABN_GET: 0 ..... ntab: 1 curSlot: 78 ..... nrows: 192 ************************************************** *** 2011-07-12 08:52:46.985 ksedmp: internal or fatal error ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [] Current SQL statement for this session: SELECT T.ID FROM WRI$_ADV_TASKS T, WRI$_ADV_PARAMETERS P WHERE T.ID = P.TASK_ID AND T.STATUS <> :B4 AND BITAND(T.PROPERTY, :B3 + :B2 ) = 0 AND P.NAME = 'DAYS_TO _EXPIRE' AND DECODE(P.NAME, 'DAYS_TO_EXPIRE', DECODE(P.VALUE, 'UNLIMITED', :B1 + 1, 'UNUSED', T.MTIME + 30, DECODE(TO_NUMBER(P.VALUE), 0, :B1 + 1, T.MTIME + TO_ NUMBER(P.VALUE))), :B1 + 1) < :B1
我们可以找到这个对象:
SQL> select owner,segment_name,segment_type from dba_extents where file_id=3 and block_id<=32538 and (block_id+blocks)>=32538; OWNER SEGMENT_NAME ------------------------------ ------------------------------ SEGMENT_TYPE ------------------------------------ SYS WRI$_ADV_PARAMETERS TABLE SQL> select count(*) from WRI$_ADV_PARAMETERS; COUNT(*) ---------- 35195
这个对象是AWR的历史表,其数据并不重要,简单点的,我们直接Truncate删掉了所有数据,消除了错误隐患:
SQL> truncate table WRI$_ADV_PARAMETERS; Table truncated.
如果问题出现在字典表上,则删除数据和重建索引就都不可能,只能通过BBED修改块来完成了.
在第一次启动数据库之后出现如下错误:
Starting background process QMNC QMNC started with pid=21, OS id=1020126 Tue Jul 12 08:52:46 2011 Completed: ALTER DATABASE OPEN Tue Jul 12 08:52:46 2011 Errors in file /oracle/so/admin/bdump/so_m000_905446.trc: ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [] Tue Jul 12 08:53:02 2011 Errors in file /oracle/so/admin/bdump/so_m000_905446.trc: ORA-00600: internal error code, arguments: [kdsgrp1], [], [], [], [], [], [], [] ORA-06512: at "SYS.PRVT_ADVISOR", line 4889 ORA-06512: at line 1
在完成数据清理后,启动数据库,原有的错误就不再出现了:
Database Characterset is ZHS16CGB231280 Opening with internal Resource Manager plan where NUMA PG = 1, CPUs = 6 replication_dependency_tracking turned off (no async multimaster replication found) Starting background process QMNC QMNC started with pid=16, OS id=913466 Tue Jul 12 09:16:08 2011 Completed: ALTER DATABASE OPEN
逐个修正该错误,数据库可以恢复正常运行.
由于AWR数据是较为频繁写入的,所以在断电等故障时最容易遭遇损坏和不一致.
请牢记:断电是数据库的大敌.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。