新規構築中の環境で、初期化パラメータ設定後のDB起動時にORA-00700が発生したとの連絡がありました。
環境は以下の通りです。
発生したエラーの詳細は以下の通りです。
PGA_AGGREGATE_TARGET specified is high
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_18278.trc (incident=40961):
ORA-00700: soft internal error, arguments: [pga physmem limit], [5033164800], [4708822425], , , , , , , , , []
早速MOS(My Oracle Support)で調べたところ、以下のドキュメントが見つかりました。
ORA-700 [sms physmem limit] / [pga physmem limit] Errors while Starting the Database (ドキュメントID 2610312.1)
このドキュメントの最後のNOTEで、以下の事が記載されています。
unpublished Bug 32255740 - PART: ORA 700 [SMS PHYSMEM LIMIT] AND ORA 700 [PGA PHYSMEM LIMIT]
(which was closed as Not a Bug), Development confirmed that this error is meant to indicate a configuration problem. The recommended configuration is:
"The threshold for the ORA-700 is that twice the PGA target plus the SGA size must be less than 90% of physical memory."
非公開のバグ32255740(バグでは無いとしてクローズ済)により、PGA targetの2倍+SGAが物理メモリの90%以上であればこのエラーが発生する、という内容ですね。
エラーは発生するもののDB自体は起動します。とは言えORA-700を放置はできないので対処はしなければなりません。
…が、計算してもPGA target×2+SGAはRAMの90%を超えてはいませんでした。
また、上記ドキュメント中には「PGA target×2+SGAはRAMの80%を超えるべきではない」との記述もあります。
基本的には現行踏襲を要望されているリプレース案件なのでメモリサイジングは現行踏襲したのですが、PGA target×2+SGAはRAMの80%を超えていました。
そこでPGAサイズを減らしてRAMの80%を超えないよう初期化パラメータを修正したところ、ORA-700は発生しなくなりました。
この案件ではLinux,Windows合わせて20近くのDBを構築するので、他のDBでも該当するものが無いか調べたところ、全部で7DBある事がわかりました。
該当すると言っても、PGA target×2+SGAはRAMの80%を超えていますが、90%は超えない状態です。
で、実際に構築を進めたところ、最初にエラーが発生したDBを含めて2DBでエラーが発生し、残り5DBでは発生しませんでした。
ですのでエラー発生の閾値が80%なのか90%なのか不明です。
また、PGA使用量の上限を定めるpga_aggregate_limitはデフォルトではpga_aggregate_targetの2倍ですが、このエラーが発生するのはあくまでpga_aggregate_target×2+SGAがRAMの80%(または90%)を超えた時で、pga_aggregate_limit+SGAがRAMの80%(または90%)を超えでもエラーは発生しないようです。
一部、不明点が残ってしまいましたが、19c以降で同様のエラーが出た時の対処法としてはpga_aggregate_targetを減らす、が有効という結論で落ち着きました。