具体错误内容如下 dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)----- Current SQL Statement for this session (sql_id=g60zjruv1ddn8) -----
delete from WRM$_DATABASE_INSTANCE dbinst where dbinst.dbid = :dbid and NOT EXISTS (select 1 from WRM$_SNAPSHOT snap where snap.dbid = :dbid and snap.instance_number = dbinst.instance_number and snap.startup_time = dbinst.startup_time) and dbinst.startup_time < (select max(startup_time) from WRM$_DATABASE_INSTANCE where dbid = :dbid and instance_number = dbinst.instance_number and startup_time < (cast(SYSTIMESTAMP as TIMESTAMP) - :retention))
oracle 数据库在执行红色部分的是的sql语句 报 ORA-00600:
数据库 WRM$_DATABASE_INSTANCE 跟 WRM$_SNAPSHOT是数据库性能快照表,删除数据是每天要做的动作,数据库运行好几年没没问题,最近突然出现,而且数据库每做什么动作
查看这个delete 语句在数据库的的执行计划,如下:
![]()
从执行计划中,看出删除 只有 2 个 主键索引,问题应该就是主键 索引导致
解决办法(至于外键的约束关系,要考平时多注意积累,我就不在这多说了):
alter table WRM$_SNAPSHOT disable constraint WRM$_SNAPSHOT_FK;
alter table WRM$_DATABASE_INSTANCE disable constraint WRM$_DATABASE_INSTANCE_PK ;
select index_name ,status from dba_indexes where table_name = 'WRM$_DATABASE_INSTANCE';
select index_name ,status from dba_indexes where table_name = 'WRM$_SNAPSHOT';
alter table WRM$_DATABASE_INSTANCE enable constraint WRM$_DATABASE_INSTANCE_PK ;
alter table WRM$_SNAPSHOT enable constraint WRM$_SNAPSHOT_FK;
select index_name ,status from dba_indexes where table_name = 'WRM$_DATABASE_INSTANCE';
select index_name ,status from dba_indexes where table_name = 'WRM$_SNAPSHOT';
观察数据库几天, 没有出现 ora-00600 错误, 数据库正常运行