HelloDBA [中文]
Search Internet Search HelloDBA
  Oracle Technology Site. email: fuyuncat@gmail.com  MSN: fuyuncat@hotmail.com Add to circle  acoug  acoug 

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

[中文]

Author:  fuyuncat

Source:  www.HelloDBA.com

Date:  2017-08-10 03:34:51

Share to  Twitter Facebook GMail Blogger Orkut Google Bookmarks Sina Weibo QQ Renren Tieba Kaixin Douban Taobao

This bug will be hit under special conditions. It's easy to be reproduced. 

This is the sample code to reproduce this problem to hit the 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>  

 It can also be triggerred by changing cursor_sharing to EXACT.

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. [], [], []  

 A workaround solution is changing the value to bind variable.

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 All reseverd.

Declaration
by fuyuncat