【视图】深入探究 V$PARAMETER的底层查询内幕

查询数据库系统参数可以使用“show parameter”,也可以使用V$PARAMETER视图进行查询。本文我们使用v$fixed_view_definition视图辅助获得V$PARAMETER视图真正获得途径(即探索构造这个视图的真实的SQL语句和访问的底层视图)。

1.使用desc命令查看一下V$PARAMETER“视图”列基本信息
sys@ora10g> desc V$PARAMETER
 Name                      Null?    Type
 ------------------------- -------- ------------------------------
 NUM                                NUMBER
 NAME                               VARCHAR2(80)
 TYPE                               NUMBER
 VALUE                              VARCHAR2(512)
 DISPLAY_VALUE                      VARCHAR2(512)
 ISDEFAULT                          VARCHAR2(9)
 ISSES_MODIFIABLE                   VARCHAR2(5)
 ISSYS_MODIFIABLE                   VARCHAR2(9)
 ISINSTANCE_MODIFIABLE              VARCHAR2(5)
 ISMODIFIED                         VARCHAR2(10)
 ISADJUSTED                         VARCHAR2(5)
 ISDEPRECATED                       VARCHAR2(5)
 DESCRIPTION                        VARCHAR2(255)
 UPDATE_COMMENT                     VARCHAR2(255)
 HASH                               NUMBER

2.使用v$fixed_view_definition视图得到V$PARAMETER视图的查询语句
sys@ora10g> col VIEW_DEFINITION for a70
sys@ora10g> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='V$PARAMETER';

VIEW_DEFINITION
----------------------------------------------------------------------
select  NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_M
ODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISA
DJUSTED , ISDEPRECATED, DESCRIPTION, UPDATE_COMMENT, HASH  from GV$PAR
AMETER where inst_id = USERENV('Instance')

格式化这个SQL语句后的结果:
SELECT NUM,
       NAME,
       TYPE,
       VALUE,
       DISPLAY_VALUE,
       ISDEFAULT,
       ISSES_MODIFIABLE,
       ISSYS_MODIFIABLE,
       ISINSTANCE_MODIFIABLE,
       ISMODIFIED,
       ISADJUSTED,
       ISDEPRECATED,
       DESCRIPTION,
       UPDATE_COMMENT,
       HASH
  FROM GV$PARAMETER
 WHERE inst_id = USERENV ('Instance')
/

可见,V$PARAMETER是通过GV$PARAMETER创建的。

3.继续追溯GV$PARAMETER的创建语句
sys@ora10g> select view_definition from v$fixed_view_definition a where a.VIEW_NAME='GV$PARAMETER';

VIEW_DEFINITION
----------------------------------------------------------------------
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstd
f,  decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),  decode(bitand(ks
ppiflg/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,'SYST
EM_MOD','FALSE'),  decode(bitand(ksppstvf,2),2,'TRUE','FALSE'),  decod
e(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),  ksppdesc, ksppstcmn
t, ksppihash  from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and
((translate(ksppinm,'_','#') not like '##%') and    ((translate(ksppin
m,'_','#') not like '#%')      or (ksppstdf = 'FALSE') or      (bitand
(ksppstvf,5) > 0)))

格式化后的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)))
/

4.宝贵结果
图穷匕见,幕后“魁首”终于出现,它们就是“x$ksppi”和“x$ksppcv”两个X$表。
使用“x$ksppi”和“x$ksppcv”两个X$表可以完成更多的任务,在下一篇文章中给大家展示一下使用这两个X$表获得隐含参数及其描述信息。

5.日常访问到的V$PARAMETER是“表”?“视图”?还是“同名”?
真实身份是“同名”。
论据请查看catalog.sql创建脚本中关于该视图的创建过程。
相关内容引用在此,供参考。
create or replace view v_$parameter as select * from v$parameter;
create or replace public synonym v$parameter for v_$parameter;
grant select on v_$parameter to select_catalog_role;

6.小结
v$fixed_view_definition视图是研究视图定义的有效工具,本文通过该视图追溯到了V$PARAMETER的底层查询表。
有兴趣的朋友可以进一步去研究其他视图的查询定义。

Good luck.

secooler
10.03.26

-- The End --

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值