HelloDBA [English]
搜索Internet 搜索 HelloDBABA
  Oracle技术站。email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com   acoug  acoug 

12.1.0.2 bug ORA-00600: internal error code, arguments: [rwoirw: check ret val]

[English]

作者: fuyuncat

来源: www.HelloDBA.com

日期: 2017-08-10 03:34:51

分享到  新浪微博 腾讯微博 人人网 i贴吧 开心网 豆瓣 淘宝 推特 Facebook GMail Blogger Orkut Google Bookmarks

 一定条件下,在12.1.0.2中会触发该Bug.

重现该Bug的代码:

SQL代码
  1. Connected to:  
  2. Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production  
  3. With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics  
  4. and Real Application Testing options  
  5.   
  6. HelloDBA.COM>  
  7. HelloDBA.COM>  
  8. HelloDBA.COM>  
  9. HelloDBA.COM> alter session set "_optimizer_use_feedback_for_join"=true;  
  10.   
  11. Session altered.  
  12.   
  13. with  
  14.                            from fo ) )  
  15. ;  
  16. as (select dummy id from dual),  
  17. co as (select dummy id from dual),  
  18. fo as (select /*+ materialize */  
  19.                               distinct 'a' id  
  20.                        from o ,  
  21.                             co  
  22.                        where o.id = co.id )  
  23. select *  
  24. from dual oe  
  25. where (('%' = '%')  
  26.      or oe.dummy in (select id  
  27.                            from fo ) )  
  28.  14  ;  
  29. select *  
  30.        *  
  31. ERROR at line 9:  
  32. ORA-00600: internal error code, arguments: [rwoirw: check ret val], [], [], [], [], [], [], [], [],  
  33. [], [], []  
  34.   
  35.   
  36. HelloDBA.COM>  

 另外,修改cursor_sharing为EXACT也会触发该bug。

SQL代码
  1. HelloDBA.COM> alter session set "_optimizer_use_feedback_for_join"=false;  
  2.   
  3. Session altered.  
  4.   
  5. HelloDBA.COM> alter session set cursor_sharing=EXACT;  
  6.   
  7. Session altered.  
  8.   
  9. HelloDBA.COM> alter system flush shared_pool;  
  10.   
  11. System altered.  
  12.   
  13. with  
  14.                             co  
  15.                        where o.id = co.id )  
  16. as (select dummy id from dual),  
  17. co as (select dummy id from dual),  
  18. fo as (select /*+ materialize */  
  19.                               distinct 'a' id  
  20.                        from o ,  
  21.                             co  
  22.                        where o.id = co.id )  
  23. select *  
  24. from dual oe  
  25. where (('%' = '%')  
  26.      or oe.dummy in (select id  
  27.                            from fo ) )  
  28.  14  ;  
  29. with  
  30. *  
  31. ERROR at line 1:  
  32. ORA-00600: internal error code, arguments: [rwoirw: check ret val], [], [], [], [], [], [], [], [],  
  33. [], [], []  

 一个比较好的绕开该bug的方法是将语句中的数值换成绑定变量。

SQL代码
  1. HelloDBA.COM> var a varchar2(30)  
  2. HelloDBA.COM> exec :a := '%'  
  3.   
  4. PL/SQL procedure successfully completed.  
  5.   
  6. with  
  7.                             co  
  8.                        where o.id = co.id )  
  9. select *  
  10. as (select dummy id from dual),  
  11. ;  
  12. co as (select dummy id from dual),  
  13. fo as (select /*+ materialize */  
  14.                               distinct 'a' id  
  15.                        from o ,  
  16.                             co  
  17.                        where o.id = co.id )  
  18. select *  
  19. from dual oe  
  20. where ((:a = '%')  
  21.      or oe.dummy in (select id  
  22.                            from fo ) )  
  23.  14  ;  
  24.   
  25. D  
  26. -  
  27. X  

 

Top

Copyright ©2005,HelloDBA.Com 保留一切权利

申明
by fuyuncat