潜伏バグからのロングフリーズ

Javaっぽいエンジニアの徒然草

かの有名なORA-00600に遭遇した話

以前(2013/10/19)業務中に起こったお話。

 

業務アプリからOracleにアクセスしようとしたら、ORA-00600が発生した。

調べてみると、有名なエラーコードらしい。

 

オラクルの内部エラー。

解決方法は次の2つしかない。

①サポート契約を結んでオラクルに問い合わせる

②原因と思われるものをあきらめる

 

①について

サポート契約を結んでいなければ不可。

また、契約を結んでおり、問い合わせた結果解決方法を得た場合でも、

守秘義務があるため他の人が同じ状態になっていたとしても教える事は出来ない。

これにより、第三者から情報を得て問題を解決することはできないため、

サポート契約を結んでいない場合は②の手段を取らざるを得ない。

 

②について

今回の件で言うと、原因と考えられるのはメモリ割当の変更だった。

エラーが発生した当日早朝に、とある2つのインスタンスに対して、SGAのメモリ割当を512MB→2GBに変更していた。

そのうち片方のインスタンスで、照会を行うとJDBCドライバ内部でぬるぽが発生するようになった。

ちなみに挿入は普通に出来た。

同条件のもう片方のインスタンスではエラーは発生していない。

Oracleサーバマシン自体のメモリも、充分に余裕がある状態。

原因不明。

謎。

なぞなぞ。

結局2GBまで増やす事を諦め、SGAの割当を1.5GBまで減らしてみたところ、内部エラーが発生しなくなった模様。

 

管理者に話を聞いてみると、朝の自動DB再起動時に、MOUNTで止まってOPENできていなかったらしい。

手動でオープンしたら動いたので気にしていなかったとのこと。

 

MOUNTで止まるということは、OPENの際に読み込むデータが壊れている可能性が高い。

つまり、データファイル or REDOログ あたりが壊れたのかな?

Oracle Master Bronze取得のために勉強したことが、管理者との会話にて少しだけ生きた。

感動。

 

一応、似たようなケースで参考になりそうなサイトがあったのでメモ。

<http://kawabata-eye.jp/modules/d3blog/details.php?bid=75>

 

今回はメモリを下げることで対処してしまったため、上記サイトの内容は未検証。

いつか役に立てばいいな。