Gblog

おもにTips

隠しパラメータの確認

最初に書きたいのはいつも忘れてしまう隠しパラメータの確認方法。

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';