【體繫結構】Oracle參數介紹 1 BLOG文檔結構圖 2 前言部分 2.1 導讀和註意事項 各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~: ① Oracle中的各種參數介紹及其查詢方法 ② Oracle中V$PARAMETER及V$PA ...
【體繫結構】Oracle參數介紹
1 BLOG文檔結構圖
2 前言部分
2.1 導讀和註意事項
各位技術愛好者,看完本文後,你可以掌握如下的技能,也可以學到一些其它你所不知道的知識,~O(∩_∩)O~:
① Oracle中的各種參數介紹及其查詢方法
② Oracle中V$PARAMETER及V$PARAMETER2的區別
③ 隱含參數的查詢、重置、清除
④ 會話參數和實例參數的查詢
⑤ 靜態參數和動態參數、延遲參數
⑥ V$PARAMETER視圖的每列含義(重點)
Tips:
① 本文在itpub(http://blog.itpub.net/26736162)、博客園(http://www.cnblogs.com/lhrbest)和微信公眾號(xiaomaimiaolhr)上有同步更新。
② 文章中用到的所有代碼、相關軟體、相關資料及本文的pdf版本都請前往小麥苗的雲盤下載,小麥苗的雲盤地址見:http://blog.itpub.net/26736162/viewspace-1624453/。
③ 若網頁文章代碼格式有錯亂,請下載pdf格式的文檔來閱讀。
④ 在本篇BLOG中,代碼輸出部分一般放在一行一列的表格中。其中,需要特別關註的地方我都用灰色背景和粉紅色字體來表示,比如在下邊的例子中,thread 1的最大歸檔日誌號為33,thread 2的最大歸檔日誌號為43是需要特別關註的地方;而命令一般使用黃色背景和紅色字體標註;對代碼或代碼輸出部分的註釋一般採用藍色字體表示。
List of Archived Logs in backup set 11 Thrd Seq Low SCN Low Time Next SCN Next Time ---- ------- ---------- ------------------- ---------- --------- 1 32 1621589 2015-05-29 11:09:52 1625242 2015-05-29 11:15:48 1 33 1625242 2015-05-29 11:15:48 1625293 2015-05-29 11:15:58 2 42 1613951 2015-05-29 10:41:18 1625245 2015-05-29 11:15:49 2 43 1625245 2015-05-29 11:15:49 1625253 2015-05-29 11:15:53 [ZHLHRDB1:root]:/>lsvg -o T_XLHRD_APP1_vg rootvg [ZHLHRDB1:root]:/> 00:27:22 SQL> alter tablespace idxtbs read write; ====》2097152*512/1024/1024/1024=1G |
本文如有錯誤或不完善的地方請大家多多指正,ITPUB留言或QQ皆可,您的批評指正是我寫作的最大動力。
2.3 本文簡介
其實很早就想把楊廷琨大神的參數系列的文章整理一下了,一直沒空,最近寫書碰到了這裡問題,正好就抽空整理一下。
第二章 Oracle參數簡介
Oracle資料庫根據SPFILE或PFILE中設置的參數來配置資料庫的啟動。每個資料庫實例在啟動之前,首先讀取這些參數文件中設置的不同參數。Oracle系統中的參數,根據系統使用情況可以簡單分為兩大類:
l 普通參數:Oracle系統正常使用的一些參數
l 非凡參數:包括3種,過時參數、強調參數和隱含參數。
圖3-8 Oracle參數分類
首先介紹一下參數的設置方法。初始化參數的設置方法有很多種:
l 通過“ALTER SYSTEM/SESSION SET 參數名=參數值 SCOPE = MEMORY;”的方式僅在記憶體里修改。
l 通過“ALTER SYSTEM SET 參數名=參數值 SCOPE = SPFILE;”的方式只修改SPFILE里的值。
l 通過“ALTER SYSTEM SET 參數名=參數值 DEFERRED SCOPE = SPFILE;”的方式設置延遲生效,也就是說這個修改只對以後連接到資料庫的會話生效,而對當前會話以及其它已經連接到Oracle的會話不會生效。
l 通過“ALTER SYSTEM/SESSION SET 參數名=參數值 SCOPE = BOTH;”或省略BOTH這個關鍵詞可以同時修改SPFILE和MEMORY中的值。
ALTER SESSION和ALTER SYSTEM的區別如下:
ALTER SESSION |
修改的參數只限於本次會話,退出會話再進入時修改失效 |
ALTER SYSTEM |
修改的參數適用於資料庫實例的所有會話,資料庫關閉則修改失效。有特權用戶和DBA可以執行 |
ALTER SYSTEM DEFERRED |
修改是延遲修改,退出會話,下次進入會話時生效。有特權用戶和DBA可以執行 |
Oracle參數變更生效範圍如下表所示:
在RAC環境中,若想修改所有實例,則可以在ALTER SYSTEM的最後加上“SID='*'”或“SID='實例名'”即可。“*”代表所有實例。
2.1 過時參數和強調參數
過時參數(Obsolete Parameters),顧名思義就是在Oracle以前的版本中存在,但在新版本中已經淘汰了的參數,已經不再使用的參數。在視圖V$OBSOLETE_PARAMETER中,包含這些參數的名稱和一個列ISSPECIFIED,該列用來指出這個參數是否在參數文件中已實際設置。下麵的SQL腳本列出了當前系統中所有的過時參數名稱以及它們是否在當前系統中設定。
SELECT NAME, ISSPECIFIED FROM V$OBSOLETE_PARAMETER; |
強調參數(Underscored Parameters),是指那些在新版本中保留了下來,但是除非非常需要否則不希望用戶使用的那些參數。強調參數可以通過系統視圖X$KSPPO來查看,該視圖中包含一個名為KSPPOFLAG的欄位。該欄位用來指明該參數在當前版本中是被丟棄還是被強調。若該值為1,則表示該參數已被丟棄,若該值為2,則表明該參數現為強調參數。
SYS@lhrdb> SELECT KSPPONM, DECODE(KSPPOFLG, 1, 'Obsolete', 2, 'Underscored') 2 FROM X$KSPPO T 3 WHERE T.KSPPONM IN ('hash_join_enabled','job_queue_interval') 4 ORDER BY KSPPONM; KSPPONM DECODE(KSPP ---------------------------------------------------------------- ----------- hash_join_enabled Underscored job_queue_interval Obsolete |
可以看到HASH_JOIN_ENABLED這個參數為強調參數,在隱含參數中表現為“_HASH_JOIN_ENABLED”,而JOB_QUEUE_INTERVAL已變為了過時參數。
2.2 隱含參數
Oracle系統中還有一類參數稱之為隱含參數(Hidden Parameters),在系統中使用,但Oracle官方沒有公佈的參數,這些參數可能是那些還沒有成熟或者是系統開發中使用的參數。這些參數在所有Oracle官方提供的文檔中都沒有介紹,它們的命名有一個共同特征就是都以“_”作為參數的首字元。下麵的查詢可以得到當前系統中的所有隱藏參數,需要以SYS用戶登陸,查看兩個視圖:X$KSPPI和X$KSPPCV。下麵作者給出具體的SQL語句。
SET PAGESIZE 9999 SET LINE 9999 COL NAME FORMAT A40 COL KSPPDESC FORMAT A50 COL KSPPSTVL FORMAT A20 SELECT A.INDX, A.KSPPINM NAME, A.KSPPDESC, B.KSPPSTVL FROM X$KSPPI A, X$KSPPCV B WHERE A.INDX = B.INDX AND A.KSPPINM LIKE '/_%' ESCAPE '/' AND LOWER(A.KSPPINM) LIKE LOWER('%&PARAMETER%'); |
舉個例子,如果需要查詢隱含參數“_LM_DD_INTERVAL”的值,那麼執行上面的代碼後輸入“_LM_DD_INTERVAL”就可以看到該隱含參數的值了,如下所示:
SYS@lhrdb> SET PAGESIZE 9999 SYS@lhrdb> SET LINE 9999 SYS@lhrdb> COL NAME FORMAT A40 SYS@lhrdb> COL KSPPDESC FORMAT A50 SYS@lhrdb> COL KSPPSTVL FORMAT A20 SYS@lhrdb> SELECT A.INDX, 2 A.KSPPINM NAME, 3 A.KSPPDESC, 4 B.KSPPSTVL 5 FROM X$KSPPI A, 6 X$KSPPCV B 7 WHERE A.INDX = B.INDX 8 AND A.KSPPINM LIKE '/_%' ESCAPE '/' 9 AND LOWER(A.KSPPINM) LIKE LOWER('%&PARAMETER%'); Enter value for parameter: _lm_dd_interval old 9: AND LOWER(A.KSPPINM) LIKE LOWER('%&PARAMETER%') new 9: AND LOWER(A.KSPPINM) LIKE LOWER('%_lm_dd_interval%') INDX NAME KSPPDESC KSPPSTVL ---------- ---------------------------------------- -------------------------------------------------- -------------------- 578 _lm_dd_interval dd time interval in seconds 10 |
可以看到該隱含參數的值為10。
對於隱含參數而言,修改隱含參數的值的時候需要將隱含參數用雙引號括起來。若要清除SPFILE中的隱含參數可以使用RESET命令。
SYS@lhrdb> alter system set _lm_dd_interval=20 scope=spfile; alter system set _lm_dd_interval=20 scope=spfile * ERROR at line 1: ORA-00911: invalid character
SYS@lhrdb> alter system set "_lm_dd_interval"=20 scope=spfile;
System altered.
SYS@lhrdb> alter system reset "_lm_dd_interval" scope=spfile sid='*';
System altered.
|
普通用戶是不具備查詢隱含參數的許可權的,可以通過創建視圖和同義詞的方式來解決這個問題,如下所示:
CREATE OR REPLACE VIEW VW_YH_PARAMETER_LHR AS SELECT A.INDX, A.KSPPINM NAME, A.KSPPDESC, B.KSPPSTVL FROM X$KSPPI A, X$KSPPCV B WHERE A.INDX = B.INDX AND A.KSPPINM LIKE '/_%' ESCAPE '/' --TRANSLATE (ksppinm, '_', '#') LIKE '#%' ; GRANT SELECT ON VW_YH_PARAMETER_LHR TO PUBLIC; CREATE PUBLIC SYNONYM VW_YH_PARAMETER_LHR FOR SYS.VW_YH_PARAMETER_LHR; |
2.3 普通參數(系統當前參數)
註意:本小節內容多數來源於楊廷琨老師的博客。
1、普通參數
普通參數就是Oracle系統正常使用的一些參數。查詢Oracle初始化參數的方式大約有如下幾種:
表