最初に書きたいのはいつも忘れてしまう隠しパラメータの確認方法。
SELECT a.ksppinm AS parameter,
a.ksppdesc AS description,
b.ksppstvl AS value
FROM x$ksppi a,
x$ksppcv b
WHERE a.indx = b.indx
AND a.ksppinm LIKE '{パラメータ名}';
そもそも、V$PARAMETER で隠しパラメータが見えないのが不便。
見みえるように出来ないものか考える。
まずは、V$FIXED_VIEW_DEFINITIONでV$PARAMETER の定義を確認。
SELECT VIEW_DEFINITION FROM V$FIXED_VIEW_DEFINITION
WHERE VIEW_NAME='GV$PARAMETER'
こんな感じ。
SELECT
x.inst_id,
x.indx+1,
ksppinm,
ksppity,
ksppstvl,
ksppstdvl,
ksppstdf,
DECODE(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
DECODE(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE'),
DECODE(bitand(ksppiflg,4),4,'FALSE',DECODE(bitand(ksppiflg/65536,3),0, 'FALSE','TRUE')),
DECODE(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
DECODE(bitand(ksppstvf,2),2,'TRUE','FALSE'),
DECODE(bitand(ksppilrmflg/64,1),1,'TRUE','FALSE'),
DECODE(bitand(ksppilrmflg/268435456,1),1,'TRUE','FALSE'),
ksppdesc,
ksppstcmnt,
ksppihash
FROM
x$ksppi x,
x$ksppcv y
WHERE (x.indx = y.indx)
AND bitand(ksppiflg,268435456)= 0
AND ( (TRANSLATE(ksppinm,'_','#') NOT LIKE '##%')
AND ( (TRANSLATE(ksppinm,'_','#') NOT LIKE '#%')
OR (ksppstdf = 'FALSE')
OR (bitand(ksppstvf,5) > 0) ) )
・・・WHERE句でなんかやってる。
ksppinm (パラメータ名)の アンダースコア "_" を # に変換してnot like とか。
この条件をちょこちょこっと変えて、V$PARAMETER の項目名をつけると。
SELECT
x.indx+1 NUM ,
ksppinm NAME ,
ksppity TYPE ,
ksppstvl VALUE ,
ksppstdvl DISPLAY_VALUE ,
ksppstdf ISDEFAULT ,
DECODE(bitand(ksppiflg/256,1),1,'TRUE','FALSE') ISSES_MODIFIABLE ,
DECODE(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE') ISSYS_MODIFIABLE ,
DECODE(bitand(ksppiflg,4),4,'FALSE',DECODE(bitand(ksppiflg/65536,3),0, 'FALSE','TRUE')) ISINSTANCE_MODIFIABLE,
DECODE(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ISMODIFIED ,
DECODE(bitand(ksppstvf,2),2,'TRUE','FALSE') ISADJUSTED ,
DECODE(bitand(ksppilrmflg/64,1),1,'TRUE','FALSE') ISDEPRECATED ,
DECODE(bitand(ksppilrmflg/268435456,1),1,'TRUE','FALSE') ISBASIC ,
ksppdesc DESCRIPTION ,
ksppstcmnt UPDATE_COMMENT ,
ksppihash HASH
FROM
sys.x$ksppi x,
sys.x$ksppcv y
WHERE (x.indx = y.indx)
AND bitand(ksppiflg,268435456)= 0
AND ksppinm='_optim_peek_user_binds';
すると、V$PARAMETER ライクに隠しパラメータの情報が確認できるよう。X$だから一般ユーザじゃ実行できないけどね。
(追記)
結局いつも使うのは、以下。
set lin 210 pages 100
col name for a40
col VALUE for a40
col DESCRIPTION for a120
SELECT
ksppinm NAME ,
ksppstvl VALUE ,
ksppdesc DESCRIPTION
FROM
sys.x$ksppi x,
sys.x$ksppcv y
WHERE (x.indx = y.indx)
AND bitand(ksppiflg,268435456)= 0
AND ksppinm='_optim_peek_user_binds';