转自 http://www.eygle.com/archives/2005/10/statspack_unique_constraint_violated.html
有朋友遇到Statspack ORA-00001错误。
Errors in file /oracle/app/oracle/admin/shyz/bdump/shyz1_ora_2588734.trc:
ORA-12012: error on auto execute of job 328
ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated
ORA-06512: at “PERFSTAT.STATSPACK”, line 1361
ORA-06512: at “PERFSTAT.STATSPACK”, line 2471
ORA-06512: at “PERFSTAT.STATSPACK”, line 91
ORA-06512: at line 1
Sun Oct 16 00:43:39 2005
这个错误此前从未遇到,但是既然是主键冲突,那肯定是存在重复主键的数据。
肯定能暂时解决问题方法就是暂时禁用唯一约束检查:
ALTER TABLE PERFSTAT.STATS$SQL_SUMMARY MODIFY CONSTRAINT STATS$SQL_SUMMARY_PK DISABLE NOVALIDATE; |
然后观察数据来发现根本问题,最后彻底解决之。
到Metalink搜索了一下,发现存在一个相关Bug,Bug号为:2784796.
在设置了cursor_sharing为similar或者force之后,可能触发此Bug,导致主键冲突。
此bug据说在Oracle10g中已经修正。
===========
自己的问题
按照这个disable novalidate pk constraint以后,是可以正常进行statspack.snap了
但是之后发现有一个问题:
在做spreport 的时候,许久不能做出报告。10046追踪数据,则发现大量的scatter read 等待事件。
select count(*) from stats$sql_summary; 发现这个表的数据量很大,几百万。
而之前在disable novalidate pK的时候,默认已经把该表上的pk对应的unique index给删除了。
所以手动在原来位置上建立非unique index,解决问题。
