当前位置:  数据库>oracle

用show parameter也能显示隐含参数

    来源: 互联网  发布时间:2017-04-27

    本文导语: Oracle 数据库启动时用到的数据库初始化参数,我们通常是在 sqlplus 中使用 show parameter 命令来获取。但这里看到只会是一些公开的参数,和已经修改的隐含参数。 Oracle 还有一批隐含参数,在 debug 或者实现某些功能时非常有用。 ...

Oracle 数据库启动时用到的数据库初始化参数,我们通常是在 sqlplus 中使用 show parameter 命令来获取。但这里看到只会是一些公开的参数,和已经修改的隐含参数。 Oracle 还有一批隐含参数,在 debug 或者实现某些功能时非常有用。

在网上,你可以很方便的查到如何查询这些隐含参数。但是,如果我还想继续使用 show parameter 方法显示隐含参数呢?这该如何实现?

我在这里介绍一个方法,来实现这个目标。介绍这个方法的目的不仅仅是为了实现 show parameter 可以显示隐含参数,还包括如何分析 show parameter 的实现过程。在遇到数据库问题诊断需求时,这个方法,您也可以参考一下。

首先,我们分析 show parameter 这个命令是如何实现显示初始化参数值的。

登录 sqlplus / as sysdba

使用 alter session set sql_trace=true; 追踪 show parameter 的执行过程。

 

SQL> alter session set sql_trace=true;

Session altered.

 

SQL> show parameter "_pga_max_size"

SQL> host; 

bash-3.2$ more /u01/oracle/app/oracle/admin/htzq/udump/htzq2_ora_19678.trc

/u01/oracle/app/oracle/admin/htzq/udump/htzq2_ora_19678.trc

Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production

With the Partitioning, Real Application Clusters, OLAP, Data Mining

and Real Application Testing options

ORACLE_HOME = /u01/oracle/app/oracle/product/10.2.0/db

System name:     Linux

Node name:       webdg2

Release:         2.6.18-92.el5

Version:         #1 SMP Tue Apr 29 13:16:15 EDT 2008

Machine:         x86_64

Instance name: htzq2

Redo thread mounted by this instance: 2

Oracle process number: 30

Unix process pid: 19678, image: oracle@webdg2 (TNS V1-V3)

=====================
www.linuxidc.com
=====================

PARSING IN CURSOR #2 len=290 dep=0 uid=0 oct=3 lid=0 tim=1307409201601477 hv=1905048613 ad='c9e347d8'

SELECT NAME NAME_COL_PLUS_SHOW_PARAM,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',5,'number',         6,'big integer', 'un

known') TYPE,DISPLAY_VALUE VALUE_COL_PLUS_SHOW_PARAM FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPPER('%_pga_max_size%') ORDER BY NAME_

COL_PLUS_SHOW_PARAM,ROWNUM

END OF STMT

PARSE #2:c=4999,e=4042,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=1,tim=1307409201601471

EXEC #2:c=0,e=63,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1307409201601611

FETCH #2:c=4999,e=5583,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=1,tim=1307409201607254

bash-3.2$ exit

exit

结果显示 ,show parameter 就是查询一下 V$PARAMETER 视图。

接着,我们就分析 V$PARAMETER 视图的定义

SQL> SELECT * FROM v$fixed_view_definition WHERE view_name = 'V$PARAMETER';

VIEW_NAME
------------------------------
VIEW_DEFINITION
--------------------------------------------------------------------------------
V$PARAMETER
select  NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE
, ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECAT
ED, DESCRIPTION, UPDATE_COMMENT, HASH  from GV$PARAMETER where inst_id = USERENV
('Instance')







SQL> r

   1* SELECT * FROM v$fixed_view_definition WHERE view_name = 'GV$PARAMETER'

 

VIEW_NAME

------------------------------

VIEW_DEFINITION

--------------------------------------------------------------------------------

GV$PARAMETER

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,'I

MMEDIATE',2,'DEFERRED',                                   3,'IMMEDIATE','FALSE'),

   decode(bitand(ksppiflg,4),4,'FALSE',                                      decod

e(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, ksppstcmn

t, ksppihash   from x$ksppi x, x$ksppcv y where (x.indx = y.indx) and   ((translat

e(ksppinm,'_','#') not like '##%') and     ((translate(ksppinm,'_','#') not like

'#%')       or (ksppstdf = 'FALSE') or       (bitand(ksppstvf,5) > 0)))

V$PARAMETER 的定义主要来源于 GV$PARAMETER , 两个都是同义词,来源于v_$parameter和gv_$parameter。

这个定义语句中最关键部分 (translate(ksppinm,'_','#') not like '#%') 的条件。就是它把开头为 "_"  的隐含参数给过滤掉了。因为加了 ksppstdf = 'FALSE'  的条件,这保证如果已经手动改过隐含参数, show parameter 时会显示已经修改的隐含参数。

最后,重建 gv$parameter视图

create or replace view gv_$parameter(INST_ID, NUM, NAME , TYPE , VALUE, DISPLAY_VALUE, ISDEFAULT, ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE, ISMODIFIED , ISADJUSTED , ISDEPRECATED , DESCRIPTION, UPDATE_COMMENT , HASH ) as
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 sys.x$ksppi x, sys.x$ksppcv y
 where (x.indx = y.indx) and (translate(ksppinm, '_', '#') not like '##%');



























有一个疑问:

show parameter 时查的是同义词gv$parameter。该同义词无法删除重建。

SQL> create synonym GV$PARAMETER for GV_$PARAMETER;
create synonym GV$PARAMETER for GV_$PARAMETER
               *
ERROR at line 1:
ORA-00955: name is already used by an existing object




SQL> drop synonym GV$PARAMETER;
drop synonym GV$PARAMETER
             *
ERROR at line 1:



ORA-02030: can only select from fixed tables/views

更多Oracle相关信息见 专题页面


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.awt类component.bltbufferstrategy的类成员方法: show定义及介绍
  • show()和setVisible(true)有什么区别?
  • java命名空间java.awt类component.flipbufferstrategy的类成员方法: show定义及介绍
  • jQuery Scroll Show
  • java命名空间java.awt.image类bufferstrategy的类成员方法: show定义及介绍
  • jquery hide与show方法隐藏与显示标签
  • java命名空间java.awt类component的类成员方法: show定义及介绍
  • MySQL show命令的用法
  • java命名空间javax.swing.plaf.basic接口combopopup的类成员方法: show定义及介绍
  • 网站性能测试工具 Show Slow
  • java命名空间javax.accessibility类accessiblestate的类成员方法: showing定义及介绍
  • 请问setVisible(true);和show()有什么区别?
  • java命名空间java.awt类window的类成员方法: show定义及介绍
  • 为什么alwayts show no enough free memory
  • java命名空间javax.swing类jinternalframe的类成员方法: show定义及介绍
  • MySQL SHOW 命令的使用介绍
  • java命名空间javax.swing类jtree的类成员方法: shows_root_handles_property定义及介绍
  • jquery中show()、hide()方法的用法
  • java命名空间java.awt类cardlayout的类成员方法: show定义及介绍
  • msyql show命令汇总
  • java命名空间javax.swing类jpopupmenu的类成员方法: show定义及介绍
  • jquery show()方法与hide()方法(示例)


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,