[转]Oracle各种v$parameter区别

原文: http://blog.csdn.net/huang_xw/article/details/6173891
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

你可能感兴趣的:(parameter)