Chinaunix首页 | 论坛 | 博客
  • 博客访问: 926206
  • 博文数量: 358
  • 博客积分: 8185
  • 博客等级: 中将
  • 技术积分: 3751
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-15 16:27
个人简介

The views and opinions expressed all for my own,only for study and test, not reflect the views of Any Company and its affiliates.

文章分类

全部博文(358)

文章存档

2012年(8)

2011年(18)

2010年(50)

2009年(218)

2008年(64)

我的朋友

分类: Oracle

2010-08-14 12:37:07

昨天遇到了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,怪哉
阅读(2333) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~