【脚本】隐含参数及注释信息的查询方法

在文章《【视图】深入探究V$PARAMETER的底层查询内幕》http://space.itpub.net/519536/viewspace-630542中得到一个重要的结论:构造V$PARAMETER的查询使用到了两个X$表,它们是“x$ksppi”和“x$ksppcv”。
为什么V$PARAMETER只能查询到“一般”的参数,无法查询到数据库的隐含参数(Oracle的隐含参数是以下划线开头的参数)?
如何查看那些隐含参数及它们的说明信息?
深入研究“x$ksppi”和“x$ksppcv”后,我们便会得到有效地指导,并对上面的问题给出一一的解答。

1.通过“x$ksppi”和“x$ksppcv”构造V$PARAMETER的SQL语句
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'),
       ksppdesc,
       ksppstcmnt,
       ksppihash
  FROM x$ksppi x, x$ksppcv y
 WHERE (x.indx = y.indx)
       AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
            AND (   (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')
                 OR (ksppstdf = 'FALSE')
                 OR (BITAND (ksppstvf, 5) > 0)))
/

2.使用V$PARAMETER无法查询到隐含参数的真实原因
注意观察SQL语句中的Where子句中有如下的限制:
       AND ( (TRANSLATE (ksppinm, '_', '#') NOT LIKE '##%')
            AND (   (TRANSLATE (ksppinm, '_', '#') NOT LIKE '#%')

就是因为这个限制,导致以下划线开头的参数被过滤掉了。

3.查询隐含参数及其说明信息方法
既然知道了参数描述信息的源头是“x$ksppi”和“x$ksppcv”两个X$表,我们便可以编写一个脚本,使用这个脚本可以查询到几乎所有的系统参数(普通参数和隐含参数)。
简单编写脚本如下:
$ cat parameter.sql
col name for a32
col value for a24
col description for a70
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
  from x$ksppi a,x$ksppcv b
 where a.inst_id = USERENV ('Instance')
   and b.inst_id = USERENV ('Instance')
   and a.indx = b.indx
   and upper(a.ksppinm) LIKE upper('%&param%')
order by name
/

4.脚本使用效果
查询一下包含“shared_pool”关键字的参数信息
sys@ora10g> @parameter
Enter value for param: shared_pool
old   6:    and upper(a.ksppinm) LIKE upper('%&param%')
new   6:    and upper(a.ksppinm) LIKE upper('%shared_pool%')

NAME                             VALUE       DESCRIPTION
-------------------------------- ----------- ----------------------------------------------------------------------
__shared_pool_size               2466250752  Actual size in bytes of shared pool
_dm_max_shared_pool_pct          1           max percentage of the shared pool to use for a mining model
_enable_shared_pool_durations    TRUE        temporary to disable/enable kgh policy
_io_shared_pool_size             4194304     Size of I/O buffer pool from SGA
_shared_pool_max_size            0           shared pool maximum size when auto SGA enabled
_shared_pool_minsize_on          FALSE       shared pool minimum size when auto SGA enabled
_shared_pool_reserved_min_alloc  4400        minimum allocation size in bytes for reserved area of shared pool
_shared_pool_reserved_pct        5           percentage memory of the shared pool allocated for the reserved area
shared_pool_reserved_size        142606336   size in bytes of reserved area of shared pool
shared_pool_size                 0           size in bytes of shared pool

10 rows selected.

5.小结
在了解原理的基础上,深入一下,很多萦绕在心头的问题便会迎刃而解,随之而来的就是豁然开朗之悦。
想一想还有没有其他的收获。

Good luck.

secooler
10.03.27

-- The End --

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/519536/viewspace-630549/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/519536/viewspace-630549/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值