ORA-04031: Unable to allocate N bytes of shared memory(共有メモリを割り当てられない)
Oracle意味
共有メモリプール (通常は shared pool または large pool) に、要求サイズの連続メモリを割り当てられなかった。SGA コンポーネントがメモリ不足の状態にある。
原因
バインド変数を使わない (リテラルだらけの) 一意な SQL 文の多発による shared pool の断片化、不十分な SHARED_POOL_SIZE、過剰な同時接続、大きな PL/SQL パッケージ、または ASMM/AMM のサイズ設定の誤り。
対処方法
エラーメッセージがどのプール (shared pool、large pool など) を示しているか確認する。短期対応: ALTER SYSTEM FLUSH SHARED_POOL (注意: 本番ではすべての SQL の再解析、つまり一時的なハードパースの嵐を招き、断片化を恒久的には解消しない)。恒久対応: バインド変数の使用を徹底する (CURSOR_SHARING を含む)。SGA_TARGET / SHARED_POOL_SIZE / LARGE_POOL_SIZE を増やす。頻繁に使うパッケージは DBMS_SHARED_POOL.KEEP でメモリに固定する。メモリ配分は V$SGASTAT で調べる。
同じデータベースの他の項目
- ORA-01017Invalid username/password; logon denied(ユーザー名/パスワードが無効。ログオン拒否)
- ORA-01555Snapshot too old: rollback segment number too small(スナップショットが古すぎる)
- ORA-01652Unable to extend temp segment by N in tablespace(表領域で一時セグメントを拡張できない)
- ORA-12154TNS: could not resolve the connect identifier specified(接続識別子を解決できない)
- ORA-12514TNS: listener does not currently know of service requested in connect descriptor(リスナーが要求されたサービスを認識していない)
- ORA-00942Table or view does not exist(表またはビューが存在しない)
- ORA-01031Insufficient privileges(権限不足)