とあるITエンジニアたちの備忘録

新米エンジニア5人がお送りする、ちょっとためになる話

Oracleエラーを解決せよ(ORA-04031)

みなさん、こんにちは。

どうも、さいばーきゃっとです。

さてさて、今回は「なぜOracleサーバを再起動することで、ORA-04031が解決されるのか」について、追及していきたいと思います。

Oracleエラー(ORA-04031)

  • ORA-04031: 共有メモリーの4096バイトを割当てできません。

私はいつも下記のサイトを使用して、Oracleエラーの概要を調べます。

otn.oracle.co.jp

上記のサイトによると、今回のOracleエラー(ORA-04031)の解決法が記載されてました。

共有プールがメモリー不足の場合、大きいパッケージを確保するために、DBMS_SHARED_POOLパッケージを使用するか、共有メモリーの使用量を減らすか、または初期化パラメータSHARED_POOL_RESERVED_SIZEおよびSHARED_POOL_SIZEの値を増やして使用可能な共有メモリー量を増やしてください。ラージ・プールがメモリー不足の場合は、初期化パラメータLARGE_POOL_SIZEの値を大きくしてください。

どうやら、今回のエラーを解決するためには、初期化パラメータを変更しなければならないらしいです。

以前、私は「初期化パラメータ」の記事で、初期化パラメータファイルには、データベースの構成情報が記載されているということを説明しました。実際に、初期化パラメータファイルの構成情報を変更することは、運用上の理由でできないことが多いです。

 

なぜOracleサーバを再起動することで、ORA-04031が解決されるのか

次に、Oracleサーバを再起動するだけでエラーが解決できる理由に迫ります。

やはり、ここで頼りになるのがGoogle先生!!!

まずは、ググります。

f:id:cloudy0901:20161115015925p:plain


たくさんの検索結果が出てきました。

ここから、「なぜ再起動すると、エラーが解決できるのか」を解説しているサイトを探しましたが、結果的に、ほしい情報は見つかりませんでした。

そこで、状況を整理してみます。

今回発生したエラーは、共有プールが不足しているため発生していますので、「なぜ再起動すると、エラー解決できるのか」のではなく、「なぜ再起動することによって、共有プールの不足が解決されるのか」に重点を置き、再度検索してみます。

f:id:cloudy0901:20161115020027p:plain

ふむふむ・・・

どうやら、Oracleサーバをシャットダウンすることによって、共有プールにあるキャッシュがクリアされるそうです。

なるほど、だから共有プールの不足が解消されたのですね。

長期運用で定期的にシャットダウンできないような 24時間無停止状態で長期間運用を行なっている場合には、 稀に共有プールのメモリ内で著しいメモリの断片化 によりパフォーマンスに影響することがあるらしいです。

長期運用の際は、定期的に共有プールのキャッシュをクリアしたほうがいいですね。

次回は、せっかくなので、今回のキーワードになった「共有プール」について、調べてみようと思います。