1. 程式人生 > 其它 >oracle如何區分動態靜態引數及修改後是否需要重啟

oracle如何區分動態靜態引數及修改後是否需要重啟

檢視 v$parameter 中 ISSYS_MODIFIABLE 列能夠檢視引數屬性:

ISSYS_MODIFIABLE ='FALSE' 為靜態引數 、需要重啟DB

ISSYS_MODIFIABLE ='IMMEDIATE'為動態引數、馬上生效

ISSYS_MODIFIABLE ='DERERRED' 為延遲引數、馬上生效(當前會話不生效,後續的會話有效) 。

v$parameter和v$system_parameter結構完全一致

1. 引數總數:

SQL> select count(*) from v$system_parameter where issys_modifiable='IMMEDIATE';

COUNT(*)

----------

353

SQL> select count(*) from v$system_parameter where issys_modifiable='FALSE';

COUNT(*)

----------

116

SQL> select count(*) from v$system_parameter where issys_modifiable='DEFERRED';

COUNT(*)

----------

8

2. 檢視oracle引數是靜態或者是動態 (根據 ISSYS_MODIFIABLE 的值判斷)

例:

SQL> select name,value,ISSYS_MODIFIABLE from v$parameter where name ='undo_retention' ;

NAME VALUE ISSYS_MOD

-------------------- ---------- ---------

undo_retention 900 IMMEDIATE

SQL>

3. ALTER SYSTEM 中 SCOPE=SPFILE/MEMORY/BOTH 的區別:

SCOPE = SPFILE

(此更改寫入初始化引數檔案,更改將在下次啟動時生效。動態引數與靜態引數都一樣可以。是靜態引數唯一可以使用的方式。)

SCOPE = MEMORY

(只在記憶體上修改,立即生效,但重啟後將不再生效,因為並沒有寫入到初始化引數檔案。只適用於動態引數,靜態引數則不允許。)

SCOPE = BOTH.

(既寫入到初始化引數檔案,也在記憶體上修改,立即生效。同樣只適用於動態引數,靜態引數則不允許。)

4. 引數的修改

動態引數修改:

SQL> alter system set undo_retention=10800 scope=both sid='RAC1';--修改時一個例項一個例項修改,不要使用sid='*',個別有bug

System altered.

靜態引數修改,需要指定 scope=spfile 下次啟動:

SQL> alter system set processes=151 scope=both;

alter system set processes=151 scope=both

*

ERROR at line 1:

ORA-02095: specified initialization parameter cannot be modified

SQL> alter system set processes=151 scope=spfile;

System altered.

注意:(scope=spfile 或者 scope=both 下)任何引數的修改都不能自動同步到pfile中去,只會寫進spfile,所以修改完引數後最好create pfile from spfile ,手動同步引數建立pfile,以保證下次通過pfile能夠正常啟動資料庫。