显示隐含参数QUERY,是DBA都知道, 可以记但我是没去记,另外在学习的时候
如何能在SHOW PARAMETER查一个参数时候能带出其他来,是最好的,往往
会有意外发现,而且也会更多了解10g,11g,9i ,8i的很多不同,而且最近MEMORY
都自动管理,要查查当前SHARED_POOL_SIZE还有去查VIEW,不能像以前
SHOW PARAMETER SHARED就成,如果SHOWPARAMETER能想下面那样
就好了,
SQL> show parameter share
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
__shared_pool_size big integer 148M
...
_shared_pool_max_size big integer 0
_shared_pool_minsize_on boolean FALSE
_shared_pool_reserved_min_alloc big integer 4400
_shared_pool_reserved_pct integer 5 <=5%
...
shared_pool_reserved_size big integer 7549747
shared_pool_size big integer 0
shared_server_sessions integer
shared_servers integer 0
我的环境是RAC,所以带入INSTANCE参数才行
--------------------------------------------------------------------------------
<<step 1>>
login as sys, 放心大胆的去做,你想建立GV$PARAMETER也不成,
无操作可能性为0
SQL> create or replace view sys.r_gv$parameter
2 (INST_ID, NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE,
3 ISMODIFIED , ISADJUSTED , ISDEPRECATED, DESCRIPTION, UPDATE_COMMENT, HASH)
4 as
5 select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl, ksppstdvl, ksppstdf,
6 decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
7 decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',3,'IMMEDIATE','FALSE'),
8 decode(bitand(ksppiflg,4),4,'FALSE',decode(bitand(ksppiflg/65536,3), 0, 'FALSE', 'TRUE')), decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
9 decode(bitand(ksppstvf,2),2,'TRUE','FALSE'),
10 decode(bitand(ksppilrmflg/64, 1), 1, 'TRUE', 'FALSE'),
11 ksppdesc, ksppstcmnt, ksppihash
12 from x$ksppi x, x$ksppcv y
13 where (x.indx = y.indx)
14 ;
View created.
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
<<step 2>>
一般在PRODUCTION,会建立一个DBA用的专业账号,以防误操作,
不是特别批准,是不允许用SYS用户登录的,因为你一旦登录,我们
的手机就来EMAIL了,大家都知道你犯规了。
在金融数据库,管理好的企业,会为每个DBA建立一个账号,然后
ASSIGN不同的DBA ROLE,然后AUDIT,万一有误操作,就可知道
谁干的,然后他就炒鱿鱼了。呵呵
grant select on r_gv$parameter to ray;
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
<<step 3>>
login as ray or other DBA dedicated user
SQL> create or replace view v$parameter
2 as
3 select NUM , NAME , TYPE , VALUE , DISPLAY_VALUE, ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISINSTANCE_MODIFIABLE,
4 ISMODIFIED , ISADJUSTED , ISDEPRECATED, DESCRIPTION, UPDATE_COMMENT, HASH
5 from SYS.R_GV$PARAMETER where inst_id = USERENV('Instance');
View created.
--------------------------------------------------------------------------------
测试一下
SQL> SQL>
SQL>
SQL> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_collect_undo_stats boolean TRUE
_gc_dissolve_undo_affinity boolean FALSE
_gc_initiate_undo_affinity boolean TRUE
_gc_undo_affinity boolean TRUE
_gc_undo_affinity_locks boolean TRUE
_in_memory_undo boolean TRUE
_kcl_undo_grouping integer 32
_kcl_undo_locks integer 128
_optimizer_undo_changes boolean FALSE
_optimizer_undo_cost_change string 10.2.0.3
_undo_autotune boolean TRUE
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
_undo_debug_mode integer 0
_undo_debug_usage integer 0
_verify_undo_quota boolean FALSE
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
不必为每个DBA帐户建一个这样的VIEW,你可以引入ROLE, 然后把ROLE
ASSIGN给每个DBA。
随便说一下,同9i比10g的V$SQL的内部也发生了变化,不会显示所有的CHILD QUERY,
也可用相同的方法,让DBA可以选择过去的v$SQL。