一套Linux上的10.2.0.4系统,日志中频繁出现ORA-00600[6711]内部错误:
MOS上有一个关于6711内部错误十分简单的Note,该文档声称出现6711错误极有可能是部分类型为簇(cluster)的数据字典表存在潜在的讹误,这个Note甚至没有告诉我们该错误argument参数的意义。 不过其实我们可以猜出来,因为是和corruption相关的错误,那么实际上可能关联的几个因素无非是obj#,file#,block#;4256248和4256242 两个数字像极了Data Block Address,把他们当做dba来看待,也就指向了1号数据文件的61938块和61944数据块,我们来看看这些块属于哪个对象:
不出意料是一个cluster,SMON_SCN_TO_TIME是SMON_SCN_TIME表的基簇,SMON_SCN_TIME表用以记录数据库中scn对应的时间戳。我们直接查看用以创建数据字典的sql.bsq文件,可以进一步了解他们的结构:
从以上脚本可以看到这个簇上存在多个索引,我们需要进一步validate验证所有这些对象:
到这里问题已经很清晰了,问题出在SMON_SCN_TO_TIME的索引smon_scn_to_time_idx身上,极有可能是该索引上出现了逻辑讹误。所幸有问题的仅仅是索引,找出问题所在后要解决就显得容易得多了:
1
2
3
4
5
|
Wed Sep 1 21:24:30 2010
Errors
in
file /s01/10gdb/admin/YOUYUS/bdump/youyus_smon_5622.trc:
ORA-00600: internal error code, arguments: [6711], [4256248], [1], [4256242], [0], [], [], []
Wed Sep 1 21:24:31 2010
Non-fatal internal error happenned while SMON was doing logging scn->
time
mapping.
|
1
2
3
4
5
6
7
8
9
10
|
SQL>
set
linesize 200;
SQL>
select
segment_name, segment_type
2
from
dba_extents
3
where
relative_fno = 1
4
and
(61938
between
block_id
and
block_id + blocks
or
5 61944
between
block_id
and
block_id + blocks);
SEGMENT_NAME SEGMENT_TYPE
--------------------------------------------------------------------------------- ------------------
SMON_SCN_TO_TIME CLUSTER
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
cat $ORACLE_HOME/rdbms/admin/sql.bsq|grep -A 24
"create cluster smon_scn_to_time"
create
cluster smon_scn_to_time (
thread number /* thread, compatibility */
)
/
create
index
smon_scn_to_time_idx
on
cluster smon_scn_to_time
/
create
table
smon_scn_time (
thread number, /* thread, compatibility */
time_mp number, /*
time
this recent scn represents */
time_dp
date
, /*
time
as
date
, compatibility */
scn_wrp number, /* scn.wrp, compatibility */
scn_bas number, /* scn.bas, compatibility */
num_mappings number,
tim_scn_map raw(1200),
scn number
default
0, /* scn */
orig_thread number
default
0 /*
for
downgrade */
) cluster smon_scn_to_time (thread)
/
create
unique
index
smon_scn_time_tim_idx
on
smon_scn_time(time_mp)
/
create
unique
index
smon_scn_time_scn_idx
on
smon_scn_time(scn)
/
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
SQL> analyze
table
SMON_SCN_TIME validate structure;
Table
analyzed.
SQL>analyze
table
SMON_SCN_TIME validate structure
cascade
;
Table
analyzed.
SQL> analyze cluster SMON_SCN_TO_TIME validate structure;
Cluster analyzed.
SQL> analyze cluster SMON_SCN_TO_TIME validate structure
cascade
;
analyze cluster SMON_SCN_TO_TIME validate structure
cascade
*
ERROR
at
line 1:
ORA-01499:
table
/
index
cross
reference failure - see trace file
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
SQL>
alter
index
smon_scn_to_time_idx rebuild ;
Index
altered.
/* 在索引出现讹误的情况下仅仅rebuild往往是无效的,在我们rebuild的同时告警日志中再次出现了ORA-00600[6711]错误 !!! */
/* 我们需要的彻底把有问题的索引
drop
掉,并再次创建!!! */
SQL>
drop
index
smon_scn_to_time_idx ;
Index
dropped.
SQL>
create
index
smon_scn_to_time_idx
on
cluster smon_scn_to_time;
Index
created.
/* 至此问题解决,告警日志中不再出现错误! * /
/* That's great! * /
|
本文转自maclean_007 51CTO博客,原文链接:http://blog.51cto.com/maclean/1277546