天天看点

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