概要
Oracle ORA-04031は,メモリー不足に起因するエラー。自動メモリー管理を有効にしていても,物理メモリーを増設しても発生する場合がある。「共有メモリーのxxxバイトを割当てできません」


解決方法
ひとまずサーバーを再起動
なにせ停止したままだと都合がわるいので,サーバーを再起動すれば稼働し始める。メモリーが一旦リセットされることにより,不具合が解消されるのだろう。何か不具合があればとりあえず再起動させるというセオリー通り。ただし,根本的な解決にはなっていない。再発する。
物理メモリーを増やしたはずなのに…。自動メモリ管理が有効なはずなのに…10日後にエラー再発。「最大メモリーサイズ 」の設定が要因?
メモリ不足が発生しているとのことなので,メモリーを増やしたりしたが再発した。自動メモリ管理も有効になっている。色々調べてみると,どうも最大メモリーサイズが小さいままになっていた。下図は,サーバー – メモリーアドバイザ で表示

Oracle インストール時のまま 最大メモリーサイズは変更していなかった。412MBのままであった。これを 2048MBまで増やしてみたが再発。4096MBに変更しさらに経過観察
初期化パラメータ SHARED_POOL_RESERVED_SIZE を増やす
増やすかどうかは,以下のSQLでまず判断する
SELECT free_space, used_space, request_misses, last_failure_size
FROM v$shared_pool_reserved;
値の意味
FREE_SPACE USED_SPACE の合計が 共有プール領域のサイズ
REQUEST_MISSES 確保場所 この値が 0以外なら,SHARED_POOL_RESERVED_SIZE を増やす
LAST_FAILURE_SIZE 確保しようとして失敗したサイズ
(サイズ単位はbyte)

上記の例では最初3Mほどだったので,6Mに倍増させてみた
DBを再起動
プロパティ
Oracle Server 11.2.0.4.0 (Hyper-V上で動作。本文で「物理メモリー」と記載しているが,実際は仮メモリの割当サイズのことを意味する。
コメント
[…] [ORA-04031] unable to allocate xx bytes of shared memoryORA-04031 unable to allocate 760 bytes of shared memory 物理メモリーを増やしたはずなのに…。自動メモリ管理が有効なはずなのに…10日後にエラー再発。「 […]