ORA-00001 unique constraint violated错误的解决

转载 2012年03月26日 16:28:06
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中已经修正。
  

       怪不得我前天加statpack时老报这个错,于是我随手加多一个字段address来作为唯一索引 
其实从sql优化角度来说。。。cursor_sharing有exact、similar、force三种值的选择,为了减少statement hard parse value,最好是使用绑定变量,如果无法全面改写程序,DBA的另外选择就是调整这个参数.

 完全相同的statement (包含整个statement的內容、大小写完全相同、where条件相同)在执行计划和parsing tree尚未被清除前可以被直接拿來执行,減少了hard parse的次数,但8i以前只能选择force或者exact,force有可能会造成optimizer执行计划选择失当,结果反而造成性能上的灾难,因此通常不用。 

从9i开始多了similar的选择,它具备了2者的优点,当对象表有统计值时,会选择最佳的执行计划,如果没有,就和force一样使用旧的执行计划。 

cursor_sharing=similar的效果就是这样:

如果你有2句sql:
select a1,a2 from t1 where a3=1;
select a1,a2 from t1 where a3=3;

那么oracle会自动转换为:
select a1,a2 from t1 where a3==:"SYS_B_0";

这样就可以避免硬解析带来的CPU开销,从而提高性能;但是如果这个表做过分析了,则每换一次条件值,就会做一次硬解析,以避免执行计划选择失当的问题。

更详细的分析看这里:http://blog.csdn.net/biti_rainy/archive/2004/07/12/39466.aspx

en... 找时间作个试验,验证一下这段话。看来oracle的确做得越来越不需要dba了,呵呵

还有一篇相关的,讨论是否使用preparedstatment的帖子,贴出来作为参考
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=121&threadID=10397&start=0&tstart=0
 
 
----这次出现这个错误,是因为数据库中的那个表中有两条重复的数据,所以读取的时候不能产生唯一结果导致的。
解决方法:找到对应表删除重复数据。

相关文章推荐

oracle数据库主键约束删除之后依然报错ORA-00001: unique constraint(违反唯一约束)

问题再现问题描述在oracle数据库中明明主键已经删除了,但是插入数据的时候还是报错违反唯一约束解决方案引起该现象的原因是因为当先创建唯一约束后再创建主键约束的情况下,如果使用普通方法删除主键约束后,...

ORA-00001: unique constraint (...) violated并不一定是数据冲突

收到一位测试人员RAISE的JIRA,说在某张表上INSERT不了数据,报ORA-00001: unique constraint violated的错误,但是仔细核查了一下,并没有发现有重复的数据,...

ORA-00001: unique constraint (.......) violated

在向Oracle数据库中增加记录的时候后报错: Caused by: java.sql.BatchUpdateException: ORA-00001: unique constraint (......
  • zyz0678
  • zyz0678
  • 2014年03月13日 13:47
  • 1915

ORA-00001 unique constraint violated错误的解决 (

注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里。 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 g...

ORA-00001: unique constraint violated并不一定是主键冲突

原文链接:http://blog.163.com/jet_it_life/blog/static/205097083201301410303931/ 原文内容: 收到一位测试人员RAISE的JIR...

ALTER SEQUENCE 修改序列解决唯一约束冲突 unique constraint violated

背景     自增序列会遇到也会遇到唯一约束冲突吗?是的,最常见的情况就是数据迁移之后,导致数据最大值超过序列值。     软件开发中不遇到些出乎意料的问题,总感觉不太够劲。 修改序列(AL...
  • rywaqpf
  • rywaqpf
  • 2016年01月20日 19:36
  • 1447

Statspack ORA-00001 unique constraint violated错误的解决

我这里分两部分,这个问题在网上查到一个解决方案,从mos里又看到更加全的。 ============================转载部分=========================...

truncate table 错误 ORA-02266: unique/primary keys in table referenced by enabled foreign keys

这两天在做一个feature

android sqlite新添唯一键constraint错误的解决方法

今天在做项目,需要在先前的表上面新增一个constraint,然后就用了“alter table mag_content_list add constraint unique(id);”这么一条语句。...
  • chant7
  • chant7
  • 2013年08月06日 16:39
  • 1430

ora-12519错误解决方案

  • 2014年10月24日 10:26
  • 554B
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORA-00001 unique constraint violated错误的解决
举报原因:
原因补充:

(最多只允许输入30个字)