v$parameter視圖中查詢參數的時候其實都是通過x$ksppi和x$ksppcv這兩個內部視圖中得到的。
1. 可以通過如下方式查詢當前實例的所有隱含參數:
col name for a30;
col value for a10;
select
x.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') isadj
from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id = userenv('Instance') and
y.inst_id = userenv('Instance') and
x.indx = y.indx
order by
translate(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 FALSE
2. 如果想查詢某一個具體的隱含參數的值,只需要在上面原基礎上加上 and x.ksppinm ='XXXXX' 過濾。
例如查詢 _gc_undo_affinity 。
col name for a30;
col value for a10;
select
x.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') isadj
from
sys.x$ksppi x,
sys.x$ksppcv y
where
x.inst_id = userenv('Instance') and
y.inst_id = userenv('Instance') and
x.indx = y.indx and x.ksppinm ='_gc_undo_affinity'
order by
translate(x.ksppinm, ' _', ' ')
/
NAME VALUE ISDEFAULT ISMOD ISADJ
------------------------------ ---------- --------- ---------- -----
_gc_undo_affinity TRUE TRUE FALSE FALSE
3. 修改隱含參數方法:
這里列舉一個修改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;