如何根據v$parameter查詢Oracle隱含參數

來源:互聯網
上載者:User

如何根據v$parameter查詢Oracle隱含參數

Oracle的隱含參數在Oracle的官方文檔中是不會出現的,這些參數主要是Oracle內部用於控制某些功能的開關,或者就像今天eygle講的,Oracle牛逼之處就是可能幾年前開發的一個功能就放到當時的版本中,讓你“試用”,但你卻不知道,如果碰巧因為遇見了這個問題的bug,Oracle會告訴你可以使用這個參數關掉,等使用者“試用”了幾年之後,相對來說穩定了,Oracle發布新版本,說推出了一個新功能,且穩定運行了N年…

那麼如何知道某個隱含參數是何含義、全稱是什麼、預設值是什嗎?這裡至少有兩種方法是之前eygle和secooler大師在書中或課堂上介紹過的,記錄於此,便於查詢。

方法一:通過vfixedviewdefinition視圖得到視圖定義。我們知道查詢常規參數可以使用select?fromvparameter,那麼v$parameter是如何定義的? 

看到其來自於這個GV$PARAMETER視圖,繼續查: 

可以看出其來自於兩個X內部表XKSPPI和X$KSPPCV的查詢結果,網上搜了一些介紹: 
引自http://blog.csdn.net/cupid1102/article/details/50427308

X$KSPPCV用以記錄當前的設定的值,及是否使用了預設值等資訊 
ADDR RAW(4) –記憶體位址 
INDX NUMBER –序號,從0開始 
INST_ID NUMBER 
KSPPINM VARCHAR2(64) –參數名稱 
KSPPITY NUMBER 
KSPPDESC VARCHAR2(64) –描述

X$KSPPI則是一個基礎資料表,用於記錄參數名、參數說明等簡單的資訊。 
ADDR RAW(4) –記憶體位址 
INDX NUMBER –序號,從0開始 
INST_ID NUMBER –instance number 
KSPPSTVL VARCHAR2(512) –當前值 
KSPPSTDF VARCHAR2(9) –預設值 
KSPPSTVF NUMBER –標誌欄位,用來說明(‘Modified’or ‘System Modified’ or 
is_adjusted) 
KSPPSTCMNT VARCHAR2(255) –comment

根據需求,可以調整下上述SQL語句,檢索隱含參數名稱、當前值、描述等幾個關鍵資訊,可以用like查詢精確找出某個特殊的隱含參數,例如這輸入了_partition開頭的隱含參數名稱: 

查詢結果如下,有兩個_partition開頭的隱含參數: 

方法二:使用trace查看執行計畫。 
首先設定set autot trace,然後執行: 

可以看見這條SQL底層是使用了兩個X$內部表的全表掃描,這兩個表就是上述方法一種介紹的內部表。再看謂詞部分,有一些過濾查詢條件,是使用NOT LIKE過濾了”_”開頭的ksppinm參數名稱,即過濾了隱含參數,根據方法一中介紹的表欄位定義,可以拼接出自己想要的查詢語句,查詢出隱含參數和非隱含參數。

網上還有人通過改造,可以讓show parameter命令顯示出隱含參數,原理基本都是這些,有些技巧性的東西如果有興趣找時間可以學習一下。

總結: 
對於視圖等封裝結構,可以通過執行計畫,找出其基表,為探究其深入的原理提供了手段方法。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.