oracle 的insert 与select结果集不一致的BUG

2477阅读 0评论2010-08-14 lukeunique
分类:Oracle

昨天遇到了insert 与select结果集不一致的问题,上网查和问了个朋友,终于有点眉目了。。
下周一回公司再查查,metalink 4604970

select * from nnnn where ....的时候,检索出2条,用insert into XX select * from nnnn where ....就插进去4条。。
 是个优化器的bug.
 解决方法有四个。
 1.打patch<<4604970>>,升级
 2.加个rule的hint.让它走RBO
 3.设定:_gby_hash_aggregation_enabled=false
 4.把optimizer_features_enable设置成10.1.0
这个bug出现在10.0.1.0---10.0.2.0版本,升到3,4,5就没有了,查询条件比较复杂时,优化器有bug.
可能性:
和query rewrite和/*+all row*/的优化方式有关。
hash group by会引起这个问题

 *********************************************
参考
  最近工作,突然发现发现一个ORACLE的BUG, 就是INSERT与SELECT的结果集不一致,比如,加入A表中有10条记录,B表结构与A表一样,执行语句 INSERT B SELECT * FROM A,结果执行完后查询A表,无一条记录,怪哉。上网查看,原来是ORACLE的一个BUG,该BUG出现诡异,不知道真正触发的话需要什么条件,该BUG在ORACLE 10.0.2.4版本中解决了。但是针对自己实践,以下条件有可能触发: 
     1. SELECT 的操作语句比较复杂,另外SELECT操作中涉及4张以上的表 
     2. SELECT 操作中如果涉及2张以上的表,等值关联情况容易出现,将等值关联改为LEFT JOIN就OK,怪哉
参考:http://jerrychenjj.javaeye.com/blog/390212
上一篇:Differences BetweenEditions 10G Release1
下一篇:20101027