用show parameter也能显示隐含参数(一)

2014-11-24 18:57:23 · 作者: · 浏览: 13

在网上,你可以很方便的查到如何查询这些隐含参数。但是,如果我还想继续使用 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)


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