how to show hidden parameter(zt)
http://www.itpub.net/viewthread.php?tid=1004815&pid=11762628&page=1&extra=
http://rollingpig.itpub.net/post/81/314077
Oracle 啟動用到了初始化引數,通常我們都可以在sqlplus裡用show parameter 來獲得。而Oracle為了debug 或者解決一些特殊的問題,還提供了一些以“_”開頭的隱含引數。 網路上有一些script可以讓我們輕鬆檢查這些隱含引數. 但是,有沒有想過,我們可以直接在sqlplus 用show parameter 來獲取這些隱含引數呢?
答案是可以的。
下面,我將演示一下如何用sqlplus 裡的 show parameter來直接檢視Oracle隱含引數.
1。首先,我們先要知道,sqlplus怎樣通過show parameter獲得引數的。通過sql_trace的方式可以發現。
sqlplus serol/luo
alter session set sql_trace=true;
show parameter optimizer
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
optimizer_dynamic_sampling integer 1
optimizer_features_enable string 9.2.0.1
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 1
optimizer_max_permutations integer 2000
optimizer_mode string RULE
exit
到udump底下找到trace檔案,裡面的最主要的語句是:
SELECT NAME name_col_plus_show_param,DECODE(TYPE,1,'boolean',2,'string',3,'integer',4,'file',6,'big
integer','unknown') TYPE,VALUE value_col_plus_show_param FROM V$PARAMETER WHERE UPPER(NAME) LIKE UPP
ER('%optimizer%') ORDER BY name_col_plus_show_param,ROWNUM
可以看到,sqlplus的show parameter實際上就是查詢V$PARAMETER .
2. 看看 v$parameter的定義。
SELECT * FROM v$fixed_view_definition
WHERE view_name = 'V$PARAMETER';
select NUM , NAME , TYPE , VALUE , ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE , ISMODIFIED , ISADJUSTED , DESCRIPTION, UPDATE_COMMENT from GV$PARAMETER where inst_id = USERENV('Instance')
SELECT * FROM v$fixed_view_definition
WHERE view_name = 'GV$PARAMETER';
select x.inst_id,x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf,
decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',
3,'IMMEDIATE','FALSE'), decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
decode(bitand(ksppstvf,2),2,'TRUE','FALSE'), ksppdesc, ksppstcmnt
from x$ksppi x, x$ksppcv y
where (x.indx = y.indx) and ( (translate(ksppinm,'_','#') not like '#%') or (ksppstdf = 'FALSE') )
看到上面最關鍵的 (translate(ksppinm,'_','#') not like '#%')的條件了嗎?,就是它把開頭為"_" 的隱含引數給過濾掉了。當然,ksppstdf = 'FALSE' 的條件是為了保證如果已經手動改過隱含引數,show parameter還會顯示改隱含引數
3。我們可以偽造一個v$parameter, 去掉過濾"_"的條件,就可以大功告成了。
不過,畢竟是改動系統的內部設定,大家一定要小心為上。
一定要以一個僅用於資料庫管理,不會參加任何程式活動的管理性資料庫使用者來偽造這個v$parameter,以免發生意外。而且,最好是在測試環境中玩,而不要跑到生產環境裡面。下面假設這個使用者名稱為:rollingpig.
以sys 登陸
connect / as sysdba
create view my_v$parameter_with_hidden (NUM,NAME , TYPE , Value , ISDEFAULT , ISSES_MODIFIABLE , ISSYS_MODIFIABLE ,ISMODIFIED , ISADJUSTED, DESCRIPTION, UPDATE_COMMENT)
as
select x.indx+1,ksppinm,ksppity,ksppstvl,ksppstdf,
decode(bitand(ksppiflg/256,1),1,'TRUE','FALSE'),
decode(bitand(ksppiflg/65536,3),1,'IMMEDIATE',2,'DEFERRED',
3,'IMMEDIATE','FALSE'), decode(bitand(ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE'),
decode(bitand(ksppstvf,2),2,'TRUE','FALSE'), ksppdesc, ksppstcmnt
from x$ksppi x, x$ksppcv y
where (x.indx = y.indx);
grant select on my_v$parameter_with_hidden to rollingpig;
以 rollingpig 使用者連線,建立同義詞:
create synonym v$parameter for sys.my_v$parameter_with_hidden ;
4。大功告成,測試一下吧
以rollingpig 使用者登陸:
show parameter optimizer
SQL> show parameter optimizer
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
_optimizer_adjust_for_nulls boolean TRUE
_optimizer_choose_permutation integer 0
_optimizer_cost_model string CHOOSE
_optimizer_degree integer 0
_optimizer_dyn_smp_blks integer 32
_optimizer_join_sel_sanity_check boolean FALSE
_optimizer_mode_force boolean TRUE
_optimizer_new_join_card_computation boolean TRUE
_optimizer_percent_parallel integer 101
_optimizer_search_limit integer 5
_optimizer_skip_scan_enabled boolean TRUE
_optimizer_sortmerge_join_enabled boolean TRUE
_optimizer_system_stats_usage integer 0
_optimizer_undo_changes boolean FALSE
_optimizer_undo_cost_change string 9.2.0.1
optimizer_dynamic_sampling integer 1
optimizer_features_enable string 9.2.0.1
optimizer_index_caching integer 0
optimizer_index_cost_adj integer 1
optimizer_max_permutations integer 2000
optimizer_mode string RULE
以"_"開頭的隱含引數一個給跑出來了,optimizer開頭的還真不少 :D
還有一些明顯是測試用的hidden parameter
SQL> show parameter test
NAME TYPE VALUE
------------------------------------ -------------------------------- ------------------------------
_ipc_test_failover integer 0
_ipc_test_mult_nets integer 0
_test_ksusigskip integer 5
_test_param_1 integer 25
_test_param_2 string
_test_param_3 string
_test_param_4 string
_test_param_5 integer 25
_test_param_6 big integer 0
最後重申一點:
是在測試環境中玩,不要跑到生產環境裡面中玩哦……
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-468211/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- How Oracle Store Number internal(zt)Oracle
- [原創] How to show chinese character in Git StatusGit
- Required parameter $xxx follows optional parameter $yyyUI
- 如何不使用 overflow: hidden 實現 overflow: hidden
- Hidden Bipartite Graph
- UNREFERENCED_PARAMETER
- HTML hidden屬性HTML
- INSTEAD OF(zt)
- lsof(zt)
- v$parameter gv$parameter 檢視 DDL 與隱含引數
- JavaScript show()JavaScript
- show profiles
- LTSPICE parameter設定
- python parameter引數Python
- Caused by: org.apache.ibatis.binding.BindingException: Parameter 'parameter' not found.解決ApacheBATException
- SQLSERVER SELECT(zt)SQLServer
- V$LOCK(zt)
- EXISTS、IN、NOT EXISTS、NOT IN(zt)
- Event Reference(zt)
- oracle enqueue(zt)OracleENQ
- Fallacies Of The CBO(zt)
- JavaScript show() 方法JavaScript
- git show 命令Git
- HTML input hidden 隱藏域HTML
- HTML input hidden隱藏域HTML
- Field Parameter的設定
- How to ssh
- DBMS_PROFILER(zt)
- oracle event 2 (zt)Oracle
- ORA-00604(zt)
- 物化檢視(zt)
- SQL Access Advisor(zt)SQL
- DBMS_SUPPORT(zt)
- LOCK_SGA(zt)
- oracle job管理(zt)Oracle
- histogram與10053(zt)Histogram
- sybase複製(zt)
- DBMS_TRACE(zt)