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

【ピアソンVUE専用】Oracle会場試験用受験チケット(電子チケット)
- ジャンル: パソコン・周辺機器 > ソフトウェア > 教育・教養 > その他
- ショップ: IT試験ドットコム楽天支店
- 価格: 27,280円
正確なエラーメッセージは以下の通りで、さっそく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;
ERROR at line 1:
ORA-00600: internal error code, arguments: [qctcte1], [0], , , , , , , , , ,
再接続
SQL> alter session set "_fix_control"='13836796:off';
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';
ERROR at line 1:
ORA-00600: internal error code, arguments: [qctcte1], [0], , , , , , , , , ,
再接続
SQL> alter session set "_optimizer_distinct_placement" = false;
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 ';
ERROR at line 1:
ORA-00600: internal error code, arguments: [kkqcscpopnWithMap: 0], , , , , , , , , , , []
再接続
SQL> alter session set "_with_subquery"='INLINE ';
(略)22 rows selected
このドキュメントの回避策は"_with_subquery"=をINLINE またはMATERIALIZE に設定する、というものでしたが、MATERIALIZE では回避できず、INLINEで回避できました。
リリース前にちゃんとテストしてくれていたら、リリース直後にこんなバグを踏んだりしなくて済むのですけどね・・・