v$parameter
Oracle參數的修改比較複雜,有些參數是可以在session層級修改,有些則必須在system層級修改,有些參數修改後馬上生效(不需要重啟),有些參數則必須重啟才會生效,那麼我們如何知道這些資訊呢?可以查詢動態視圖v$parameter中的兩列(如下所示)得知:
1. ISSES_MODIFIABLE
指示參數是否可以在session層級( Alter session set )修改(True or False)
2. ISSYS_MODIFIABLE
指示參數是否可以在system層級(Alter system set)修改,有如下3個取值:
1)IMMEDIATE - 立即生效
2)DEFERRED - 下個session生效
3)False - 必須得重啟才會生效(必須指定Scope=spfile)
我們來看下面的例子:
SYS@TEST16>select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name in ('workarea_size_policy','audit_file_dest','sga_target','sga_max_size');
NAME ISSES_MODIFIABL ISSYS_MODIFIABL
-------------------------------------------------------------------------------- --------------- ---------------
sga_max_size FALSE FALSE
sga_target FALSE IMMEDIATE
audit_file_dest FALSE DEFERRED
workarea_size_policy TRUE IMMEDIATE
其中只有workarea_size_policy可以在session層級修改,其它3個都只能在system層級修改。
sga_target修改後立即生效,audit_file_dest修改後下一個session生效,sga_max_size修改後必須重啟才會生效(spfile)。
ALTER SESSION/SYSTEM SET
alter session set的文法如下:
alter session set parameter_name = parameter_value;
如上所述,並不是所有的參數都可以在session層級修改,只有isses_modifiable為true才可以。
alter system set的文法如下:
其中:
Comment(可選):修改時可附加說明;
Deferred(可選):如果v$parameter的issys_modifiable為deferred,修改時必須加上deferred選項,表示下個session才生效。
Scope(預設:both):有如下3個取值:
-- memory 表示只在記憶體中修改,執行個體重啟後失效;
-- spfile表示只在spfile中修改,只有當重啟重新讀取spfile之後才生效;
-- both表示同時在memory和spfile中修改(推薦)
Sid (預設:*):該選項針對RAC,預設為*,表示RAC的所有執行個體同時修改,如果不想全部修改,用Sid指定Oracle執行個體即可。
一個例子
今天,開發人員抱怨Oracle資料庫時常串連不上,報如下錯誤:
ORA-12519, TNS:no appropriate service handler found該錯誤是因為Oracle參數processes設定過小,需要調整它,processes當前的值為:
SYS@TEST16>show parameter processes;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
processes integer 100
通過查詢v$parameter(如下所示)可知,該參數是系統層級的,且必須重啟才會生效:
select name,ISSES_MODIFIABLE,ISSYS_MODIFIABLE from v$parameter where name='process';
NAME ISSES_MODIFIABL ISSYS_MODIFIABL
-------------------------------------------------------------------------------- --------------- ---------------
processes FALSE FALSE
通過alter system set修改:
SYS@TEST16>alter system set processes=1500 comment='change from 100 to 1500' scope=spfile;
System altered.
注意:這裡一定要加上scope=spfile,否則會報如下錯誤,因為issys_modifiable=false
ORA-02095: specified initialization parameter cannot be modified
推薦閱讀:
Oracle基礎教程之通過RMAN複製資料庫
RMAN備份策略制定參考內容
RMAN備份學習筆記
OracleDatabase Backup加密 RMAN加密