[Oracle] x86 Linux 環境での拡張バッファ・キャッシュの利用(その3) | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

拡張バッファ・キャッシュ機能の設定に関するトラブルシューティング
拡張バッファ・キャッシュ機能の設定に問題がある場合、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)