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
 
 
----这次出现这个错误,是因为数据库中的那个表中有两条重复的数据,所以读取的时候不能产生唯一结果导致的。
解决方法:找到对应表删除重复数据。

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

原文链接:http://blog.163.com/jet_it_life/blog/static/205097083201301410303931/ 收到一位测试人员RAISE的JIRA,说在某张...
  • mycdsnstudy
  • mycdsnstudy
  • 2015年08月29日 14:06
  • 1209

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

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

ArcGIS版本压缩(Compress)报ORA-00001: unique constraint 的解决方法

在使用ArcGIS版本压缩,经常会出现这样那样的问题,这个版本压缩就是一个等待的过程,如果出现问题,我们很难来确定问题的根源在哪里,下面我们就针对几个比较典型的压缩错误来看看怎么解决? sd...
  • linghe301
  • linghe301
  • 2012年05月02日 09:18
  • 3697

ORA-00001: unique constraint pk_****_key violated oracle imp 语句导入数据对oracle的数据字段操作顺序

最近在将测试环境上sql语句通过flyway migrate 导入产品环境的ORALCE数据库中的时候发现出现的一个unique constrain pk_****_key violated的错误。 ...
  • harryptter
  • harryptter
  • 2017年08月16日 16:29
  • 336

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

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

ORA-00001 unique constraint violated错误的解决

ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated ORA-06512: at "PERFSTAT.STATS...
  • yangdong0906
  • yangdong0906
  • 2013年01月23日 15:38
  • 264

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

注意:select 后的字段,必须要么包含在group by中,要么包含在having 后的聚合函数里。 1. GROUP BY 是分组查询, 一般 GROUP BY 是和聚合函数配合使用 g...
  • lanchengxiaoxiao
  • lanchengxiaoxiao
  • 2012年08月17日 09:36
  • 4358

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

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

impdp ORA-00001: unique constraint (SYS.I_JOB_JOB) violated

impdp system/******** directory=DUMP_DIR_TEST dumpfile=czyjpxdb1113.dmp logfile=czyjpxdb1113.log sch...
  • zhuxiaoliao
  • zhuxiaoliao
  • 2014年11月14日 16:25
  • 4668

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

开发的系统,今天客户反馈新增数据(插入到oracle)失败。检查日志,报错为: ORA-00001: unique constraint (CONTRACT_MGR.PK_T_SUPPLIER) vi...
  • sinat_32034679
  • sinat_32034679
  • 2017年06月07日 15:25
  • 280
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ORA-00001 unique constraint violated错误的解决
举报原因:
原因补充:

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