てぃぐれのプログラマwiki

ワクワクに従う

動的パラメータにSPFILE=BOTHつけて変更したら

 ORACLEデータベースで初期化パラメータを変更したい!っていう時、そのパラメータが動的か静的かによって変更の仕方が異なりますよね。

 例えば、動的初期化パラメータの場合、単純に下記のようにSQLを叩くと変更が即座に適用されます。

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=100M;

 

 静的初期化パラメータの場合、SCOPE=SPFILEを付けることで、インスタンス再起動後に変更が反映されます。静的初期化パラメータは設定が即座には反映されません。

ALTER SYSTEM SET SGA_MAX_SIZE=1G SCOPE=SPFILE;

 

では、

ALTER SYSTEM SET PGA_AGGREGATE_TARGET=100M SCOPE=BOTH;

とした場合は、どうなるのでしょうか。この場合、即座に反映されます。

この違いはなんなのでしょうか。実は違いはありません。何も指定せずに、動的初期化パラメータを変更するということは、デフォルトでSCOPE=BOTHになっているということだったのです。

 

 SCOPE=BOTHとはSCOPE=MEMORYとSCOPE=SPFILEの両方、つまりメモリもサーバーパラメータファイルの両方とも更新するということなのです。

 初期化パラメータが読み込まれるのは、インスタンス起動時のno mount中にサーバーパラメータファイルから読込まれ、メモリへとキャッシュされます。インスタンス起動後の初期化パラメータはこのメモリを参照するため、即座に変更する場合はメモリを変更しなければなりません。言い換えれば、SCOPE=MEMORYで変更する場合、SPFILEは変更しないということなので、次回の起動時は、再度、SPFILEが読込まれるため、設定は元に戻ってしまいます。

初期化パラメータ読み込みと変更

イメージ図

以前にORACLE DBA 12c BRONZEを受けた時に同内容のものが出てきたことがあり、動的初期化パラメータには何も指定しないと覚えていたため、悩んだので、調べてみました。