拡張バッファ・キャッシュ機能の設定に関するトラブルシューティング
拡張バッファ・キャッシュ機能の設定に問題がある場合、Oracleの起動時に様々なエラーが発生します。私が出遭ったエラーは以下のとおりです。
ORA-00824: cannot set sga_target due to existing internal settings
拡張バッファ・キャッシュを使用する場合、自動共有メモリー管理機能を同時に使用することができません。
そのため SGA_TARGET初期化パラメータに 0以外の値を設定していると上記のエラーが発生します。
ORA-27102: out of memory
Linux Error: 28: No space left on device
/dev/shmに割り当てたメモリーサイズには内部オーバーヘッドが発生するらしく、丸々拡張バッファ・キャッシュに割り当てることはできないようです。
例えば、/dev/shmに 8GBを割り当て、ブロックサイズが 8KBの場合、単純に計算すると DB_BLOCK_BUFFERS初期化パラメータに割り当てられるブロック数は 8589934592 / 8192 = 1048576 となりますが、これをそのまま設定すると上記のエラーが発生します。
このエラーが発生した場合は DB_BLOCK_BUFFERS初期化パラメータの設定値を若干少なめに調整します。
ORA-00371: not enough shared pool memory, should be atleast 213193932 bytes
データベース・バッファ・キャッシュ・サイズを大きくすると、それに比例して共有プールに必要なオーバーヘッドも増大します。
そのため、データベース・バッファ・キャッシュ・サイズに比して共有プール・サイズが著しく小さく設定していると上記のエラーが発生します。
このエラーが発生した場合は SHARED_POOL_SIZE初期化パラメータをエラーメッセージ中の最小値以上に調整します。
※オーバーヘッドのサイズは V$SGAINFOの "Startup overhead in Shared Pool"の値を見ればわかります。
ORA-27103: internal error
Linux Error: 11: Resource temporarily unavailable
Red Hat Enterprise Linux 3以降の場合、/etc/security/limits.confファイルの設定が漏れていると発生します。
※ちなみに、拡張バッファ・キャッシュ機能を設定して正常に起動している状態で、/etc/security/limits.confファイルの設定を元に戻し、SQL*Plusでログインしようとすると、以下のようなエラーが発生するようです。
SQL> connect / as sysdba
ERROR:
ORA-12547: TNS: 接続を失いました。
ORA-27123: unable to attach to shared memory segment
Additional information: 1
Additional information: 622592
拡張バッファ・キャッシュ機能の設定を元に戻すために初期化パラメータを元に戻してOracleを起動すると発生します。
/dev/shmを umountしてからOracleを起動するとうまく行くようです。
【関連記事】
[Oracle] x86 Linux 環境での拡張バッファ・キャッシュの利用(その1)
[Oracle] x86 Linux 環境での拡張バッファ・キャッシュの利用(その2)
[Oracle] x86 Linux 環境での拡張バッファ・キャッシュの利用(その3)