暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 隐含参数查看

原创 JiekeXu 2020-04-28
4870

在 sqlplus 中使用 show parameter xx 可以查看到 Oracle 定义的参数, 它是通过查询 v$parameter 获得的. 另外 Oracle 中还有一些隐含的参数 无法直接通过 show parameter 的方式查询. Oracle 的隐藏参数 (hidden parameters) ,由oracle内部使用,以 ‘_’ 开头。当实例开启时的后台日志中可以看到实例启动都加载了哪些参数,但后台参数是看不到的。

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

 
SQL> select * from v$parameter;
 
  已选择288 行。
 
  执行计划
 
  ----------------------------------------------------------
 
  Plan hash value: 1128103955
 
  ------------------------------------------------------------------------------
 
  | Id  | Operation         | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
 
  ------------------------------------------------------------------------------
 
  |   0 | SELECT STATEMENT  |          |     1 |  4414 |     1 (100)| 00:00:01 |
 
  |*  1 |  HASH JOIN        |          |     1 |  4414 |     1 (100)| 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 |
 
  ------------------------------------------------------------------------------
 
SQL> desc x$ksppi
 
  名称         是否为空? 类型
 
  ------------ -------- ---------------
 
  ADDR                  RAW(4)           --内存地址
 
  INDX                  NUMBER           --序号,从0开始
 
  INST_ID               NUMBER           --instance number
 
  KSPPINM               VARCHAR2(64)     --参数名称
 
  KSPPITY               NUMBER           --参数类型 1,'boolean' 2,'string', 3,'number',4,'file
 
  KSPPDESC              VARCHAR2(64)     --描述
 
  KSPPIFLG              NUMBER           --标志字段(用来说明是isses_modifiable or issys_modifiable
 
SQL> desc x$ksppcv
 
  名称          是否为空? 类型
 
  ------------- -------- -------------
 
  ADDR                   RAW(4)         --内存地址
 
  INDX                   NUMBER         --序号,从0开始
 
  INST_ID                NUMBER         --instance number
 
  KSPPSTVL               VARCHAR2(512)  --当前值
 
  KSPPSTDF               VARCHAR2(9)    --是否为缺省值
 
  KSPPSTVF               NUMBER         --标志字段,用来说明('Modified' or 'System Modified' or is_adjusted)
 
  KSPPSTCMNT             VARCHAR2(255)  --comment

由此,就可以通过如下方式查询当前实例的所有隐含参数:

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=’*’;

需要注意的是一定要加上双引号, 另外引号内不能有空格, 只能包含参数的名字,以上记录一下。

参考文章:https://blog.csdn.net/aqszhuaihuai/article/details/7013366

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论