1 v$parameter
v$parameter顯示的是session級的參數. 如果沒有使用alter session單獨設定目前session的參數值.
每一個新Session都是從 v$system_parameter上取得系統的目前值而産生Session的v$parameter view. (實驗1)
在運作過程中, v$parameter可能被使用者改變.
2 v$parameter2
v$parameter2顯示的是session級的參數.
與v$parameter之間的差別則在于v$parameter2把LIST的值分開來了, 一行變多行資料, 用ORDINAL來訓示相對的位置. (實驗2)
3 v$system_parameter
v$system_parameter顯示的是system級的參數, 儲存的是使用alter system修改的值(scope=both或者memory). 上面兩個都是目前已經生效的參數值.
4 v$system_parameter2
v$system_parameter2顯示的是system級的參數.
5 v$spparameter
v$spparameter顯示的就是儲存在spfile中的參數值(scope=both或者spfile).
6 字段解釋
字段 | 字段值 | 說明 |
isses_modifiable | true | 表示這個參數可以使用alter session修改 |
false | 表示不能使用alter session指令修改 | |
issys_modifiable | immediate | 表示這次對這個參數的修改會在目前所有會話中就"立即"發生作用, 即修改立即生效. |
deferred | 表示這次修改對目前會話不發生作用, 在以後打開的會話中起作用, 故它有"推遲"影響的效果. 修改該參數值時需要使用alter system set...deferred. 如果不加deferred關鍵字則報錯ORA-02096: specified initialization parameter is not modifiable with this option. | |
false | 表示不能使用alter system指令修改, 隻能alter system ...... scope=spfile |
7 show parameter
通過sql_trace發現,sqlplus中的show parameter其實查詢的是v$parameter,實際的查詢語句如下:
select name name_col_plus_show_param,
decode(type,
1,
'boolean',
2,
'string',
3,
'integer',
4,
'file',
5,
'number',
6,
'big integer',
'unknown') type,
display_value value_col_plus_show_param
from v$parameter
where upper(name) like upper('%db_file%')
order by name_col_plus_show_param, rownum;
8 底層表解釋
通過autotrace,可以知道:
v$parameter,v$system_parameter的底層表是x$ksppcv和x$ksppi
v$parameter2,v$system_parameter2的底層表是x$ksppcv2和x$ksppi
v$spparameter的底層表是x$kspspfile
9 實驗1
SQL> select t1.value sesvalue, t2.value sysvalue
2 from v$parameter t1, v$system_parameter t2
3 where t1.num = t2.num
4 and t1.value <> t2.value;
SESVALUE SYSVALUE
------------------- -------------------
SQL> select value from v$system_parameter where name = 'global_names';
VALUE
-------------------
FALSE
SQL> select value from v$parameter where name = 'global_names';
VALUE
-------------------
FALSE
SQL> alter session set global_names = true;
Session altered
SQL> select t1.name, t1.value sesvalue, t2.value sysvalue
2 from v$parameter t1, v$system_parameter t2
3 where t1.num = t2.num
4 and t1.value <> t2.value;
NAME SESVALUE SYSVALUE
------------------- ------------------- -------------------
global_names TRUE FALSE
10 實驗2
SQL> column value format a106;
SQL> select value from v$parameter where name like 'control_files';
VALUE
----------------------------------------------------------------------------------------------------------
D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL01.CTL, D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL02.CTL,
D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL03.CTL
SQL> column name format a15;
SQL> column value format a53;
SQL> column ordinal format a8;
SQL> select name ,value, ordinal from v$parameter2 where name like 'control_files';
NAME VALUE ORDINAL
--------------- ----------------------------------------------------- --------
control_files D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL01.CTL 1
control_files D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL02.CTL 2
control_files D:/ORACLE/PRODUCT/10.2.0/ORADATA/TEST/CONTROL03.CTL 3