X$表を利用して、設定していない隠しパラメータを参照する(V$PARAMETER)
2016-06-24記事公開
隠しパラメータの一覧出力は、マニュアルなどで一般に案内されている内容ではない為、こちらに記載された内容についての質問や、動作の異常についてはお答えできないことがございます。
利用する場合には自己責任にて実施をお願いいたします。
隠しパラメータの確認について
隠しパラメータ取得用SQLの実行
以下の文を実行することで、隠しパラメータ参照することが出来ます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
SQL> set line 180 trim on pages 1000 SQL> col NAME format a25 SQL> col DEFAULT_VALUE format a30 SQL> col DESCRIPTION format a80 SQL> select x.inst_id as INST_ID 2 , ksppinm as NAME 3 , ksppstdfl as DEFAULT_VALUE 4 , ksppstdf as IS_DEFAULT 5 , ksppdesc as DESCRIPTION 6 from x$ksppi x 7 , x$ksppcv y 8 where (x.indx = y.indx) 9 and bitand(ksppiflg,268435456) = 0 10 and (translate(ksppinm,'_','#') not like '##%') 11 and x.inst_id = USERENV('Instance'); INST_ID NAME DEFAULT_VALUE IS_DEFAUL DESCRIPTION ---------- ------------------------- ------------------------------ --------- -------------------------------------------------------------- 1 _appqos_qt 0 TRUE System Queue time retrieval interval 1 _appqos_po_multiplier 10 TRUE Multiplier for PC performance objective value ... 1 _gwm_spare2 0 TRUE gsm spare 2 1 _gwm_spare3 0 TRUE gsm spare 3 1 _rq_shm_max_size 0 TRUE maximum size of an RQuery shared memory segement (in KB) 3966 rows selected. |
隠しパラメータ取得用SQLをどのように作成したか
一般にX$表と呼ばれる表については公開されておりません。実行においても基本的にORACLEのサポートに許可を取ったうえで実施します。
いくつかのX$表についてはV$FIXED_VIEW_DEFINITIONを参照することで、内容の予測をすることが出来ます。X$表については基本サポートに従ったうえで実施をしてください。
以下は今回のSQLを取得する際に実施した内容です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
SQL> select VIEW_NAME 2 , VIEW_DEFINITION 3 from V$FIXED_VIEW_DEFINITION 4 where VIEW_NAME = 'GV$PARAMETER'; -- 以下結果を整形しています。 select x.inst_id , x.indx+1 , ksppinm , ksppity , ksppstvl , ksppstdvl , ksppstdfl , ksppstdf , decode( bitand(ksppiflg/256,1) , 1, 'TRUE' , 'FALSE') , decode( bitand(ksppiflg/65536,3) , 1 , 'IMMEDIATE' , 2 , 'DEFERRED' , 3 , 'IMMEDIATE' , 'FALSE') , decode( bitand(ksppiflg/524288,1) , 1 , 'TRUE' , '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 , x.con_id 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) ) SQL> -- 以下の GV$PARAMETER の定義を確認すると 3 番目が NAME であり、 ksppinm が該当することが分かります。 SQL> desc GV$PARAMETER Name Null? Type ---------------------------------- -------- ---------------------- INST_ID NUMBER NUM NUMBER NAME VARCHAR2(80) TYPE NUMBER VALUE VARCHAR2(4000) DISPLAY_VALUE VARCHAR2(4000) DEFAULT_VALUE VARCHAR2(255) ISDEFAULT VARCHAR2(9) ISSES_MODIFIABLE VARCHAR2(5) ISSYS_MODIFIABLE VARCHAR2(9) ISPDB_MODIFIABLE VARCHAR2(5) ISINSTANCE_MODIFIABLE VARCHAR2(5) ISMODIFIED VARCHAR2(10) ISADJUSTED VARCHAR2(5) ISDEPRECATED VARCHAR2(5) ISBASIC VARCHAR2(5) DESCRIPTION VARCHAR2(255) UPDATE_COMMENT VARCHAR2(255) HASH NUMBER CON_ID NUMBER |
GV$PARAMETERのNAME列がksppinmであることが確認できました。
これを使用して隠しパラメータを出力します。
先ほど出力したSQLを見ると、最後のところにアンダースコア(_)がつく対象を除外している記載が見つかります。
これをどうにかすれば隠しパラメータを参照できそうです。
1 2 3 4 5 |
and ( (translate(ksppinm,'_','#') not like '#%') or (ksppstdf = 'FALSE') or (bitand(ksppstvf,5) > 0) ) |
ksppstdfはISDEFAULTでksppstvfはISMODIFIED(変更されたか)とISADJUSTED(ORACLEが内部的に調整したか)などのフラグを持っているので、変更管理に関する内容ということが想定できます。
また、隠しパラメータがV$PARAMETERに出力される条件が、既に設定されていることなので、単純に_のものを出力すれば確認が出来そうということが分かります。