v$parameter视图中查询参数的时候其实都是通过x$ksppi和x$ksppcv这两个内部视图中得到的。
1. 可以通过如下方式查询当前实例的所有隐含参数:
col name for a30;
col value for a10;selectx.ksppinm name,y.ksppstvl value,y.ksppstdf isdefault,decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadjfromsys.x$ksppi x,sys.x$ksppcv ywherex.inst_id = userenv('Instance') andy.inst_id = userenv('Instance') andx.indx = y.indx order bytranslate(x.ksppinm, ' _', ' ')/查询结果部分截图:
NAME VALUE ISDEFAULT ISMOD ISADJ
------------------------------ ---------- --------- ---------- -----_xsolapi_use_olap_dml TRUE TRUE FALSE FALSE_xsolapi_use_olap_dml_for_rank TRUE TRUE FALSE FALSE_xtbuffer_size 0 TRUE FALSE FALSE2. 如果想查询某一个具体的隐含参数的值,只需要在上面原基础上加上 and x.ksppinm ='XXXXX' 过滤。
例如查询 _gc_undo_affinity 。
col name for a30;
col value for a10;selectx.ksppinm name,y.ksppstvl value,y.ksppstdf isdefault,decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod,decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadjfromsys.x$ksppi x,sys.x$ksppcv ywherex.inst_id = userenv('Instance') andy.inst_id = userenv('Instance') andx.indx = y.indx and x.ksppinm ='_gc_undo_affinity'order bytranslate(x.ksppinm, ' _', ' ')/
NAME VALUE ISDEFAULT ISMOD ISADJ
------------------------------ ---------- --------- ---------- -----_gc_undo_affinity TRUE TRUE FALSE FALSE3. 修改隐含参数方法:
这里列举一个修改DRM (有bug,易导致RAC 实例崩溃)隐含参数的例子。不同隐含参数的修改不同,具体需查看文档。
方法一:(可以重启的改法)
3.1 查看此隐含参数的值。 (这里不贴代码,请参照上面自行执行)
3.2 修改隐含参数的值。
SQL> alter system set "_gc_policy_time"=0 scope=spfile sid='*';
System altered.SQL> alter system set "_gc_undo_affinity"=false scope=spfile sid='*';System altered.3.3 改完了之后,需要重启生效,查看。
方法二 (不能重启)
如果暂时无法重启实例,可以使用如下命令“事实上”禁用DRM:(以下两个参数可以动态调整)
alter system set "_gc_affinity_limit"=10000000;alter system set "_gc_affinity_minimum"=10000000;