转自:http://blog.csdn.net/huang_xw/article/details/6173891 吐槽下:标题字数限制好小,最后一个字母r写不上了
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