[Oracle] ORA-00600: 内部エラー・コード, 引数: [17059] ... | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

ある日突然、特定のテーブルへのINSERT文がことごとく失敗するようになりました。

アプリケーションのログを参照すると、以下のエラーが検出されました。

ORA-00600: 内部エラー・コード, 引数: [17059] ...

該当するテーブルやインデックスを再構築したりしてみましたが、解消せず。

ダメ元でいろいろ調べてみると、どうやらこの[17059]というのは、ライブラリキャッシュにロードされている特定の親カーソルで管理される子カーソル数が最大数に達した際に発生するようです。

以下のSQLで調べてみると、該当するSQLの子カーソル数(LOADED_VERSIONS)が32768に達していました。

SELECT SQL_ID, SQL_TEXT, LOADED_VERSIONS FROM V$SQLAREA WHERE SQL_TEXT LIKE 'INSERT INTO%';

このケースの場合、共有プールをflushしてライブラリキャッシュから子カーソルの情報をクリアすれば、エラーは解消するようです。

ALTER SYSTEM FLUSH SHARED_POOL;

通常、この子カーソルはせいぜい数個~数百個レベルで収まるものだと思われますが、ここまで増えるリスクがあるのであれば、定期的に子カーソル数を監視し、一定の数に達したら自動的に共有プールをflushするというようなツールを仕込んだほうがいいのかもしれません。


参考:「サポートエンジニアが語る!内部エラーのトラブルシューティング