[Oracle] spreport.sqlの実行時にORA-01476エラーが発生 | Archive Redo Blog

Archive Redo Blog

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

Oracle 10.1.0.2.0 で Statspackレポートを出力しようとして、spreport.sql を実行すると、以下のエラーが発生しました。

Instance Activity Stats  DB/Inst: ORCL/orcl  Snaps: 1-2
-> Statistics identified by '(derived)' come from sources other than SYSSTAT

Statistic                                      Total  per Hour
--------------------------------- ------------------ ---------
log switches (derived)                             0       .00
          -------------------------------------------------------------
                    , 'D'  , size_for_estimate*1024/:def_cache
                                                   *
行10でエラーが発生しました。:
ORA-01476: 除数がゼロです。

スクリプトの該当箇所を探してみると、spreport.sql から呼び出されている sprepins.sql の 2600行目前後でこの :def_cache という変数を使っており、この変数には初期化パラメータ db_cache_size の値がセットされています。

Oracle 10g で自動共有メモリ管理機能を利用している場合、db_cache_size には 0 に設定されていることがありますが、このような場合に上記のエラーが発生するようです。

このエラーを回避するには、初期化パラメータ db_cache_size に 0 以外の値を設定する(自動共有メモリ管理機能における最小設定値を明示的に指定する)か、sprepins.sql で初期化パラメータ db_cache_size を取得している箇所(3箇所あり)を __db_cache_size に変更する(自動共有メモリ管理機能における実際の設定値に変更する)必要があるようです。