sunos 5.10oracle 10.2.0.2.0开发环境某一数据库出现ora-600报错。
sunos 5.10
oracle 10.2.0.2.0
开发环境某一数据库出现ora-600报错。
alert.log中的报错信息:
thu nov 13 15:11:43 2014
errors in file /oracle/admin/sun/bdump/sun_j000_29589.trc:
ora-00600: internal error code, arguments: [13011], [298314], [4277430], [0], [4277430], [17], [], []
thu nov 13 15:11:45 2014
errors in file /oracle/admin/sun/bdump/sun_j000_29589.trc:
ora-00600: internal error code, arguments: [], [], [], [], [], [], [], []
ora-06512: at repadmin.cef_push_purge, line 145
ora-06512: at line 1
在 /oracle/admin/sun/bdump/sun_j000_29589.trc trace文件中看到当前sql是删除system.def$_aqcall的一条记录:
ksedmp: internal or fatal error
ora-00600: internal error code, arguments: [13011], [298314], [4277430], [0], [4277430], [17], [], []
current sql statement for this session:
delete from system.def$_aqcall where (enq_tid = :1)
根据mos ora-600 [13011] problem occurred when trying to delete a row (文档 id 28184.1)各参数对比;
sql> select object_type,object_name,owner from dba_objects where data_object_id='298314';
object_type object_name owner
------------------- ---------------------------------------- ------------------------------
table def$_aqcall system
关于def$_aqcall表,,该表是高级复制的默认队列表,从ora-06512: at repadmin.cef_push_purge, line 145这边也可以看出确实是高级复制出现了问题,复制及时完成后,该表会被清空。
出现该ora-600报错是因为在更新语句中使用索引找到一条记录,然后到表中去查询时该记录不存在,出现此报错,一般解决方法是重建索引。
首先对表做分析:
sql> analyze table system.def$_aqcall validate structure cascade;
analyze table system.def$_aqcall validate structure cascade
*
error at line 1:
ora-01499: table/index cross reference failure - see trace file
sql> select index_name,owner,status from dba_indexes where table_name='def$_aqcall';
index_name owner status
------------------------------ ------------------------------ --------
sys_il0000004874c00025$$ system valid
sys_c001407 system valid
def$_tranorder system valid
sql> select index_name,column_name,column_position from dba_ind_columns where table_name='def$_aqcall';
index_name column_name column_position
------------------------------ ------------------------------ ---------------
sys_c001407 enq_tid 1
sys_c001407 step_no 2
def$_tranorder cscn 1
def$_tranorder enq_tid 2
比对数据:全表扫描和走索引时数据对比:
sql> select /*+ index(t def$_tranorder) */ cscn,enq_tid from system.def$_aqcall where cscn is not null or enq_tid is not null
2 minus
3 select /*+ full(t1) */ cscn,enq_tid from system.def$_aqcall
4 /
cscn enq_tid
---------- ------------------------------
4755684454 8.37.2233719
4755684456 3.14.2235620
4755684458 8.2.2233699
4755684460 10.30.2223096
果然索引上的记录比表上的数据多了四条。
在线重建索引:
sql>alter index system.def$_tranorder rebuild onlie;
index altered.
再次对比索引上和表上的数据:
sql> select /*+ index(t def$_tranorder) */ cscn,enq_tid from system.def$_aqcall where cscn is not null or enq_tid is not null
2 minus
3 select /*+ full(t1) */ cscn,enq_tid from system.def$_aqcall
4 /
no rows selected
没有多余数据,通过对alert.log的监控,后续未发现ora-600[13011]的报错。
oracle 单实例 从32位 迁移到 64位 方法
在centos 6.4下安装oracle 11gr2(x64)
oracle 11gr2 在vmware虚拟机中安装步骤
debian 下 安装 oracle 11g xe r2
本文永久更新链接地址: