天天看點

v$parameter, v$parameter2, v$system_parameter, v$system_parameter2, v$spparameter差別

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