正德厚生,臻于至善

Oracle 隐含参数查看

Oracle 中存在很多种参数,对于Oracle每次启动intance的时候,都会在不同阶段读取不同类型的参数的。
初始化参数:Derived Parameters(导出参数)、Operating System-Dependent Parameters(操作系统依赖参数)、Variable Parameters(变量参数)。
特殊参数:包括三种,过时参数、强调参数和隐藏参数。
本章,我们只重点了解下隐藏参数。

英文:hidden parameters

定义:隐藏参数只针对在系统中使用,它们在oracle官方中并不公布,不公布的原因,有可能是还没有成熟或者是系统开发中使用的参数。
这些参数在所有 oracle 官方提供的文档中都没有介绍,他们的命名有一个共同特征就是都以 '_'作为参数的首字符。
正因为它们都是系统参数,那么在查询的过程中需要以sys用户登陆。隐藏参数和其他系统参数一样是通过数据字典内部RDBMS表(x$ksppi, x$ksppcv),很多博客中认为是视图定义,对于x$表是在数据库启动时,动态创建的,用于跟踪内部数据库信息,维持DB的正常运行,不允许sysdba以外的用户直接访问,显示授权不被允许。因此很多人有想法去修改这类隐藏参数的VALUE,建议最好不要修改。

我们查看select * from v$parameter的执行计划

SQL> explain plan for select * from v$parameter;

Explained.

SQL> select * from table(dbms_xplan.display());

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 1128103955

------------------------------------------------------------------------------
| Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |          |    11 |  1287 |     1 (100)| 00:00:01 |
|*  1 |  HASH JOIN        |          |    11 |  1287 |     1 (100)| 00:00:01 |
|*  2 |   FIXED TABLE FULL| X$KSPPI  |   146 | 13432 |     0   (0)| 00:00:01 |
|   3 |   FIXED TABLE FULL| X$KSPPCV |  2914 | 72850 |     0   (0)| 00:00:01 |
------------------------------------------------------------------------------


PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("X"."INDX"="Y"."INDX")
       filter(TRANSLATE("KSPPINM",'_','#') NOT LIKE '#%' OR
              "KSPPSTDF"='FALSE' OR BITAND("KSPPSTVF",5)>0)
   2 - filter(TRANSLATE("KSPPINM",'_','#') NOT LIKE '##%' AND
              "X"."INST_ID"=USERENV('INSTANCE') AND BITAND("KSPPIFLG",268435456)
=0)


19 rows selected.

SQL> desc x$ksppi
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------- 
 ADDR                                               RAW(8)
 INDX                                               NUMBER
 INST_ID                                            NUMBER
 KSPPINM                                            VARCHAR2(80)
 KSPPITY                                            NUMBER
 KSPPDESC                                           VARCHAR2(255)
 KSPPIFLG                                           NUMBER
 KSPPILRMFLG                                        NUMBER
 KSPPIHASH                                          NUMBERX$KSPPI:保存参数名字信息
ADDR:内存地址
INDX:序号,从0开始
INST_ID:instance number,可以通过select USERENV('Instance') from dual;获得
KSPPINM:隐藏参数名称
KSPPITY:参数类型 1,'boolean' 2,'string', 3,'number',4,'file'
KSPPDESC:描述
KSPPIFLG:标志字段(用来说明是会话可修改还是系统可修改)
KSPPIHASH:HASH值

SQL> desc x$ksppcv
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ---------------------------- 
 ADDR                                               RAW(8)
 INDX                                               NUMBER
 INST_ID                                            NUMBER
 KSPPSTVL                                           VARCHAR2(4000)
 KSPPSTDVL                                          VARCHAR2(4000)
 KSPPSTDF                                           VARCHAR2(9)
 KSPPSTVF                                           NUMBER
 KSPPSTCMNT                                         VARCHAR2(255)X$KSPPI:保存参数值信息
ADDR:内存地址,用来关联X$KSPPI
INDX:序号,从0开始,用来关联X$KSPPI
INST_ID:instance number
KSPPSTVL:隐藏参数当前值
KSPPSTDVL:隐藏参数默认值
KSPPSTDF:是否是默认值
KSPPSTVF:标志字段,用来说明('SESSION MODIFIED'  OR  'SYSTEM MODIFIED' OR IS_ADJUSTED)
KSPPSTCMNT:备注

########################################字段参考SQL
SELECT NAM.INDX + 1 NUMB,
       NAM.KSPPINM NAME,
       VAL.KSPPSTVL VALUE,
       NAM.KSPPITY TYPE,
       VAL.KSPPSTDF IS_DEFAULT,
       DECODE(BITAND(NAM.KSPPIFLG / 256, 1), 1, 'TRUE', 'FALSE') IS_SESSION_MODIFIABLE,
       DECODE(BITAND(NAM.KSPPIFLG / 65536, 3),
              1,
              'IMMEDIATE',
              2,
              'DEFERRED',
              3,
              'IMMEDIATE',
              'FALSE') IS_SYSTEM_MODIFIABLE,
       DECODE(BITAND(VAL.KSPPSTVF, 7),
              1,
              'MODIFIED',
              4,
              'SYSTEM MODIFIED',
              'FALSE') IS_MODIFIED,
       DECODE(BITAND(VAL.KSPPSTVF, 2), 2, 'TRUE', 'FALSE') IS_ADJUSTED,
       NAM.KSPPDESC DESCRIPTION
  FROM SYS.X$KSPPI NAM, SYS.X$KSPPSV VAL
 WHERE NAM.INDX = VAL.INDX
/
########################################查询所有隐藏参数
我们可以通过这两个表查询出隐藏参数:

SELECT NAM.KSPPINM AS HP_NAME,
       NAM.KSPPDESC AS HP_DESC,
       VAL.KSPPSTVL AS HP_VAL,
       VAL.KSPPSTDF AS HP_DEFAULT_FLAG,--是否默认值
       DECODE(BITAND(VAL.KSPPSTVF, 7),
              1,
              'MODIFIED',
              4,
              'SYSTEM_MOD',
              'FALSE') AS HP_MODIFIED_FLAG, --是否可以修改
       DECODE(BITAND(VAL.KSPPSTVF, 2), 2, 'TRUE', 'FALSE') AS ISADJUSTED --是否可以调整
  FROM SYS.X$KSPPI NAM, SYS.X$KSPPCV VAL
 WHERE NAM.INST_ID = VAL.INST_ID
   AND NAM.INDX = VAL.INDX
   AND NAM.KSPPINM LIKE '/_%' ESCAPE '/'
 ORDER BY REPLACE(NAM.KSPPINM, '_', '');

########################################查询某个隐藏参数
SELECT X.KSPPINM, Y.KSPPSTVL, X.KSPPDESC
  FROM X$KSPPI X, X$KSPPCV Y
 WHERE X.INDX = Y.INDX
   AND Y.INST_ID = X.INST_ID
   AND X.KSPPINM = '_db_percent_hot_default';
   
_db_percent_hot_default:LRU链中热端所占比例,关于这个参数将会在后续oracle advance中oracle architecture-LRU链分析中用到。

################################################################################另外的SQL
可以通过如下方式查询当前实例的所有隐含参数:

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, ' _', ' ');

也可以使用如下语句查看所有隐含参数:

SELECT  i.ksppinm name,
           i.ksppdesc description,
           CV.ksppstvl VALUE,
           CV.ksppstdf isdefault,
           DECODE (BITAND (CV.ksppstvf, 7),
                   1, 'MODIFIED',
                   4, 'SYSTEM_MOD',
                   'FALSE')
              ismodified,
           DECODE (BITAND (CV.ksppstvf, 2), 2, 'TRUE', 'FALSE') isadjusted
    FROM   sys.x$ksppi i, sys.x$ksppcv CV
   WHERE       i.inst_id = USERENV ('Instance')
           AND CV.inst_id = USERENV ('Instance')
           AND i.indx = CV.indx
           AND i.ksppinm LIKE '/_%' ESCAPE '/'
ORDER BY   REPLACE (i.ksppinm, '_', '');
SELECT   ksppinm, ksppstvl, ksppdesc
  FROM   x$ksppi x, x$ksppcv y
 WHERE   x.indx = y.indx AND TRANSLATE (ksppinm, '_', '#') LIKE '#%';
 
示例:
查看某一个隐含参数

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

修改隐含参数时, alter system set "parameter_name"=value scope=both sid='*';

需要注意的是一定要加上双引号, 另外引号内不能有空格, 只能包含参数的名字,以上记录一下。
################################################################################
赞(0) 打赏
未经允许不得转载:徐万新之路 » Oracle 隐含参数查看

评论 抢沙发

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫

微信扫一扫

登录

找回密码

注册