Oracle提供了大量的系统参数,下面是查询方法小结。
系统当前参数涉及到这些视图:v$parameter、v$parameter2、v$system_parameter、v$system_parameter2和v$spparameter。
存放session级的参数,如果没有被"alter session"修改,默认和system级的参数值相同,下面是该视图的关键字段:
1)NUM:参数编号;
2)NAME:参数名;
3)TYPE:参数类型:
1-Boolean;
2-String;
3-Integer;
4-Parameter file;
5-保留;
6-Big integer;
4)VALUE:当前session的参数值;
5)DISPLAY_VALUE:用户友好的参数值;
6)ISSES_MODIFIABLE:true表示参数能通过"alter session"被改变,false表示不能改变;
7)ISSYS_MODIFIABLE:参数是否能被"alter system"改变,改变后:
IMMEDIATE:参数可以通过"alter system"改变,立即生效
DEFERRED:参数可以通过"alter system"改变,在下一个session开始生效
false表示不能改变;
8)ISINSTANCE_MODIFIABLE:true表示参数值在每个实例下可以是不同的,false表示所有实例必须具有相同的值。如果ISSYS_MODIFIABLE为false,则该值总是false;
9)ISMODIFIED:表示参数是否在实例启动后被修改
MODIFIED:参数被使用"alter session"修改
SYSTEM_MOD:参数被使用"alter system"修改
FALSE:在实例启动后没有被修改
10)ISDEPRECATED:true表示该参数被弃用,否则false;
11)DESCRIPTION:参数的描述信息;
12)UPDATE_COMMENT:最近一次修改的注释;
13)HASH:参数名的哈希值。
存放实例级别的参数,新的session将从这里继承参数值。下面是该视图的关键字段:
1)NUM:参数编号;
2)NAME:参数名;
3)TYPE:参数类型:
1-Boolean;
2-String;
3-Integer;
4-Parameter file;
5-保留;
6-Big integer;
4)VALUE:实例级的参数值;
5)DISPLAY_VALUE:用户友好的参数值;
6)ISSES_MODIFIABLE:true表示参数能通过"alter session"被改变,false表示不能改变;
7)ISSYS_MODIFIABLE:参数是否能被"alter system"改变,改变后:
IMMEDIATE:参数可以通过"alter system"改变,立即生效
DEFERRED:参数可以通过"alter system"改变,在下一个session开始生效
false表示不能改变;
8)ISINSTANCE_MODIFIABLE:true表示参数值在每个实例下可以是不同的,false表示所有实例必须具有相同的值。如果ISSYS_MODIFIABLE为false,则该值总是false;
9)ISMODIFIED:表示该参数怎么被修改。如果"alter system"被执行,这个值将是MODIFIED;
10)ISDEPRECATED:true表示该参数被弃用,否则false;
11)DESCRIPTION:参数的描述信息;
12)UPDATE_COMMENT:最近一次修改的注释;
13)HASH:参数名的哈希值。
和v$parameter相同,唯一的区别是如果一个参数有多个值,那么在v$parameter2中将有多行,而在v$parameter中则只有一行,在value中使用逗号分隔多个值。
例如参数control_files,在v$parameter中为:
name value
--------------------------------------------------------------------------------------
control_files E:\ORACLE\ORADATA\LY\CONTROL01.CTL, E:\ORACLE\ORADATA\LY\CONTROL02.CTL, E:\ORACLE\ORADATA\LY\CONTROL03.CTL
在v$parameter2中为:
name value
--------------------------------------------------------------------------------------
control_files E:\ORACLE\ORADATA\LY\CONTROL01.CTL
control_files E:\ORACLE\ORADATA\LY\CONTROL02.CTL
control_files E:\ORACLE\ORADATA\LY\CONTROL03.CTL
类似于v$parameter2。
用于存放服务器参数文件(spfile)的参数信息,如果服务器参数文件没有被用于启动实例,则视图每行的ISSPECIFIED列的值都为false,视图的关键字段如下:
1)SID:参数的SID;
2)NAME:参数名;
3)VALUE:参数值(如果服务器参数文件没有被用于启动实例,则为null);
4)DISPLAY_VALUE:参数值,采用用户友好的格式;
5)ISSPECIFIED:true表示参数在服务器参数文件中指定,否则false;
6)ORDINAL:参数值的位置(序号)(如果服务端配置文件没被用于启动实例,则为0)。只有当参数值为一个列表时才使用;
7)UPDATE_COMMENT:最近一次修改的注释(如果服务器参数文件没有被用于启动实例,则为null)。
Oracle系统中还有一类参数称之为隐藏参数(hidden parameters),是系统中使用,但Oracle官方没有公布的参数,这些参数可能是那些还没有成熟或者是系统开发中使用的参数。这些参数在所有Oracle官方提供的文档中都没有介绍,他们的命名有一个共同特征就是都以'_'作为参数的首字符,和隐藏参数相关的视图有x$ksppi、x$ksppcv和x$ksppsv。
x$ksppi是v$parameter、v$parameter2、v$system_parameter和v$system_parameter2的基础表,保存参数信息,关键字段如下:
1)ADDR:内存地址
2)INDX:序号
3)INST_ID:实例编号
4)KSPPINM:参数名称
5)KSPPITY:参数类型:
1-Boolean;
2-String;
3-Integer;
4-Parameter file;
6)KSPPDESC:参数描述信息
7)KSPPIFLG:标志,用来说明isses_modifiable或者issys_modifiable
保存当前session的参数值,和x$ksppi用indx关联,关键字段如下:
1)ADDR:内存地址
2)INDX:序号
3)INST_ID:实例编号
4)KSPPSTVL:参数的当前值
5)KSPPSTDF:参数的默认值
6)KSPPSTVF:标志字段,用来说明('Modified'、'System Modified'或is_adjusted)
7)KSPPSTCMNT:注释
保存系统参数值,和x$ksppi用indx关联,字段和x$ksppcv基本一致。
查询隐藏参数和当前session的参数值和默认值:
select ksppinm "Parameter Name", ksppstvl "Value", ksppstdf "Default"
from x$ksppi x, x$ksppcv y
where x.indx = y.indx
and ksppinm like '/_%trace%' escape '/';
查看隐藏参数,并显示当前session和实例的参数值:
select a.ksppinm Parameter,
a.ksppdesc Description,
b.ksppstvl "Session Value",
c.ksppstvl "Instance Value"
from x$ksppi a, x$ksppcv b, x$ksppsv c
where a.indx = b.indx
and a.indx = c.indx
and a.ksppinm like '\_%' escape '\';
将a.ksppinm指定特定的参数名,可以查看指定参数的对应的值。
Oracle中存在一些以前的版本中存在,但新版本中废弃的参数,可以在视图V$OBSOLETE_PARAMETER中查找到,该视图值包含两个字段,name(参数名)和ISSPECIFIED(true表示参数在参数文件中指定,false表示没有。一般情况下该值都应该为false)。
下面是查询隐藏参数和ISSPECIFIED值的方法:
SELECT name, isspecified FROM v$obsolete_parameter;
视图v$parameter_valid_values包含了参数的有效值列表,主要字段如下:
1)NUM:参数编号
2)NAME:参数名
3)ORDINAL:同一个参数的有效值序列号(从1开始)
4)VALUE:参数值
5)ISDEFAULT:该值是否为参数的默认值
下面是一个例子,查看参数optimizer_features_enable的所有有效值: