おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

12cへのアップグレード後、ora-600が発生する

最近、リリースしたばかりの環境で、特定のSQLを実行するとora-600が発生するとの連絡がありました。

環境は以下の通りです。

Oracle Restart(SIHA) EE 12.1.0.2
AIX Version 7.1

 

正確なエラーメッセージは以下の通りで、さっそくMOS(MyOracleSupport)で調べたところ、いくつか該当しそうな不具合がヒットしました。

ORA-00600: internal error code, arguments: [kkqcscpopnWithMap: 0]

まずはこちら。WITH句を使ったSQLなので、該当しうるケースです。

Bug 22077794 - ORA-600 [kkqcscpopnwithmap: 0] From Query Using WITH Clause (ドキュメントID 22077794.8)

2つの回避策をそれぞれ試してみました。一つは引数が変わったもののエラーが発生する事は変わらず、改善せず。

SQL> alter session set "_optimizer_cost_based_transformation"=off;

SQL> 対象SQLの実行

  ERROR at line 1:
ORA-00600: internal error code, arguments: [qctcte1], [0], , , , , , , , , ,

再接続

SQL> alter session set "_fix_control"='13836796:off';

SQL> 対象SQLの実行

  ERROR at line 1:
ORA-00600: internal error code, arguments: [kkqcscpopnWithMap: 0], , , , , , , , , , ,

次にこちら。distinctも使用しているので、こちらも該当する可能性ありです。

こちらも2つの回避策をそれぞれ試してみましたが、やはり一つは引数が変わったもののエラーが発生する事は変わらず、改善せず。

Bug 22566555 - ORA-600 [kkqcscpopnwithmap: 0] for query with DISTINCT placement (ドキュメントID 22566555.8)

SQL> alter session set "_fix_control"='13836796:off';

SQL> 対象SQLの実行

 ERROR at line 1:
ORA-00600: internal error code, arguments: [qctcte1], [0], , , , , , , , , ,

再接続

SQL> alter session set "_optimizer_distinct_placement" = false;

SQL> 対象SQLの実行

 ERROR at line 1:
ORA-00600: internal error code, arguments: [kkqcscpopnWithMap: 0], , , , , , , , , , ,  

更にこちらも該当の可能性はあるのですが、回避策がドキュメントID 22566555.8と被っているので改善は無し。

Query with Subquery Using Distinct Errors ORA-600 KKQCSCPOPNWITHMAP (ドキュメントID 2228101.1)

 

で、次がこちら。

ドキュメントID 22077794.8と同じバグ番号ですが、更に詳細に調査した内容で別の回避策が載っているので試してみました。

バグ 22566555 : ORA-00600 [KKQCSCPOPNWITHMAP: 0] FOR SUBQUERY FACTORING QUERY WITH DISTINCT

SQL> alter session set "_with_subquery"='MATERIALIZE ';

SQL> 対象SQLの実行

ERROR at line 1:
ORA-00600: internal error code, arguments: [kkqcscpopnWithMap: 0], , , , , , , , , , , []

再接続

SQL> alter session set "_with_subquery"='INLINE ';

SQL> 対象SQLの実行

(略)

22 rows selected 

このドキュメントの回避策は"_with_subquery"=をINLINE またはMATERIALIZE に設定する、というものでしたが、MATERIALIZE では回避できず、INLINEで回避できました。

 

リリース前にちゃんとテストしてくれていたら、リリース直後にこんなバグを踏んだりしなくて済むのですけどね・・・