Oracle隐含参数查看
在sqlplus中使用show parameter xx可查看到Oracle定义的参数,它是通过查询v$parameter获得。另外Oracle中还有一些隐含的参数无法直接通过show parameter的方式查询。Oracle的隐含参数(hidden parameters),由Oracle内部使用,以'_'开头。当实例开启时的后台日志中可以看到实例启动都加载了哪些参数,但后台参数是看不到的。
我们查看select * from v$parameter的执行计划:
SYS@source>set autotrace traceonly
SYS@source>select * from v$parameter;
352 rows selected.
Execution Plan
----------------------------------------------------------
Plan hash value: 1128103955
------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 4414 | 0 (0)| 00:00:01 |
|* 1 | HASH JOIN | | 1 | 4414 | 0 (0)| 00:00:01 |
|* 2 | FIXED TABLE FULL| X$KSPPI | 1 | 249 | 0 (0)| 00:00:01 |
| 3 | FIXED TABLE FULL| X$KSPPCV | 100 | 406K| 0 (0)| 00:00:01 |
SYS@source>desc x$ksppi
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER
KSPPINM VARCHAR2(80)
KSPPITY NUMBER
KSPPDESC VARCHAR2(255)
KSPPIFLG NUMBER
KSPPILRMFLG NUMBER
KSPPIHASH NUMBER
SYS@source>desc x$ksppcv
Name Null? Type
----------------------------------------------------------------- -------- --------------------------------------------
ADDR RAW(8)
INDX NUMBER
INST_ID NUMBER
KSPPSTVL VARCHAR2(4000)
KSPPSTDVL VARCHAR2(4000)
KSPPSTDF VARCHAR2(9)
KSPPSTVF NUMBER
KSPPSTCMNT VARCHAR2(255)
由此,可通过如下方式查询当前实例的所有隐含参数:
就可以通过如下方式查询当前实例的所有隐含参数:
select x.ksppinm name, y.ksppstvl value, y.ksppstdf isdefault, decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod, decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadj
from sys.x$ksppi x, sys.x$ksppcv y where x.inst_id = userenv('Instance') and
y.inst_id = userenv('Instance') and x.indx = y.indx order by
translate(x.ksppinm, ' _', ' ')
通过以下脚本可以查询获得这些被隐含的参数:
set linesize 132
column name format a30
column value format a25
select
x.ksppinm name,
y.ksppstvl value,
y.ksppstdf isdefault,
decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,
decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadj
from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id = userenv('Instance') and
y.inst_id = userenv('Instance') and
x.indx = y.indx and
x.ksppinm like '%_&par%'
order by
translate(x.ksppinm, ' _', ' ')
/
查看oracle隐含参数
select a.ksppinm name, b.ksppstvl value, a.ksppdesc description
from x$ksppi a, x$ksppcv b
where a.indx = b.indx and a.ksppinm like '_spin_count';
修改隐含参数时, alter system set "parameter_name"=value scope=both sid='*';
有些可以在memory而有些仅仅可以通过spfile更改, 尝试一下就知道了
需要注意的是一定要加上双引号, 另外引号内不能有空格, 只能包含参数的名字