如何尋找ORACLE中的追蹤檔案

來源:互聯網
上載者:User

標籤:des   io   ar   os   使用   sp   strong   檔案   資料   

一、追蹤檔案是幹什麼用的?       追蹤檔案中包含了大量而詳細的診斷和調試資訊。通過對追蹤檔案的解讀和分析,我們可以定位問題、分析問題和解決問題。從追蹤檔案的產生的來源來看,追蹤檔案又可以分為兩類:一類是資料庫的操作人員有意產生的;另一類則是由於出現了異常錯誤,由資料庫自動產生的。對於後一類,只對Oracle內部的技術支援人員是有用的,但對於我們,則多半看不懂。前一類,則是我們經常用到的,協助我們分析、調整和最佳化應用效能,處理並解決問題。  二、追蹤檔案是如何命名的?      一個追蹤檔案的名字一般由以下幾部分組成:      ORACLE_SID      固定字元"ora"      伺服器的進程ID號      檔案尾碼名 .trc      前三個部分之間以底線串連。      如下例:     orcl_ora_6210.trc     其中“orcl" 是本環境下資料庫的SID,"6210"為產生該追蹤檔案會話所使用的伺服器處理序ID號。如何知道我的ORACLE_SID和會話所使用的伺服器處理序ID呢?後面會詳細講到。      上面說到的追蹤檔案的命名規則適用於我們前面說的第一類追蹤檔案,即資料庫操作人員有意產生的追蹤檔案。如果是第二類追蹤檔案,則命名上稍有變化。這類追蹤檔案將固定字元"ora"改為了ORACLE後台進程名的縮寫。如下例所示:    orcl_lgwr_30019.trc    orcl_dbw0_2664.trc  三、追蹤檔案存放在哪裡?       追蹤檔案存放的位置根據資料庫版本的不同,位置也是不同的。下面以10g 和11g分別說明。       10g       通常,我們在安裝資料庫時,會設定一個環境變數$ORACLE_BASE(注意,是BASE,不是HOME),該變數中指定了ORACLE軟體安裝的主目錄。假設我們設定的目錄為”/oracle/app/oracle“,那麼追蹤檔案會放到以下這幾個目錄中:      /oracle/app/oracle/admin/orcl/bdump  該目錄用來儲存ORACLE後台進程產生的輸出檔案。資料庫自動產生的追蹤檔案預設是儲存在這裡,另外,我們經常提到的警示日誌,也是放在這裡的。      /oracle/app/oracle/admin/orcl/cdump  該目錄用來儲存核心進程產生的輸出檔案     /oracle/app/oracle/admin/orcl/udump   該目錄用來儲存使用者產生的輸出檔案。我們有意產生的追蹤檔案預設就是儲存在這裡。      以上是說的是預設情況下,如果資料庫的管理員改變了這個設定的話,我們更保險的方法是查詢相關參數來確定,查詢方法如下:     通過SQLPLUS以管理員身份登入,輸入 show parameter dump_dest 並斷行符號。例如:     SQL> show parameter dump_dest NAME                                            TYPE          VALUE------------------------------------ ----------- ------------------------------background_dump_dest               string       /oracle/app/oracle/admin/orcl/ bdump

core_dump_dest                            string       /oracle/app/oracle/admin/orcl/cdump 

user_dump_dest                            string       /oracle/app/oracle/admin/orcl/ udump        此外,這些設定,在參數檔案中也有記錄。通過查詢參數檔案亦可獲得。             11g       11g中引入了一個新的功能,稱為自動診斷知識庫(Automatic Diagnostic Repository 縮寫為ADR)。它是所有診斷資訊的的中心儲存點,它包括各種轉儲檔案、追蹤檔案、日誌和健康情況監視報表。所有執行個體(RDBMS執行個體和ASM執行個體)都在ADR中建立有自己的目錄結構。       ADR的位置是由參數DIAGNOSTIC_DEST來指定,預設位置同$ORACLE_BASE。其結構如下:      ORACLE_BASE/diag/database_name/instance_name      假設我們設定的$ORACLE_BASE仍為”/oracle/app/oracle“,資料庫名稱和執行個體名稱均為”orcl",則實際的目錄結構如下:     /oracle/app/oracle/diag/orcl/orcl     這個位置,也被稱為本例中資料庫執行個體ORCL的ADR_HOME。    在這個目錄下,還會發現有一個子目錄,名為trace,其下集中儲存了資料庫後台進程和使用者主動產生的追蹤檔案以及警示日誌。      但這也是預設情況下,我們通過查詢v$diag_info視圖,就可以獲得實際的位置。如下所示:      SELECT * FROM V$DIAG_INFO;
INST_ID NAME                  VALUE------- --------------------- -------------------------------------------------------------      1 Diag Enabled          TRUE      1 ADR Base              /u01/oracle      1 ADR Home              /u01/oracle/diag/rdbms/orclbi/orclbi      1 Diag Trace            /u01/oracle/diag/rdbms/orclbi/orclbi/trace      1 Diag Alert            /u01/oracle/diag/rdbms/orclbi/orclbi/alert      1 Diag Incident         /u01/oracle/diag/rdbms/orclbi/orclbi/incident      1 Diag Cdump            /u01/oracle/diag/rdbms/orclbi/orclbi/cdump      1 Health Monitor        /u01/oracle/diag/rdbms/orclbi/orclbi/hm
四、如何找到特定的追蹤檔案?      通過上面的介紹,我們已經知道了追蹤檔案是如何命名的,儲存到了什麼地方。但對於一個繁忙的系統,在同一個目錄下,可能會在相近的時間內產生多個追蹤檔案,那麼如何才能找到我們想要的那個追蹤檔案呢。核心就是要確定我們所使用的伺服器處理序ID號。有了這個ID號,我們就可以確定地知道哪個追蹤檔案才是我們想要的。下面介紹一下如何查詢服務器進程ID號。      當前正在啟動並執行伺服器處理序ID號,都儲存在v$process視圖中。但由於該視圖中提供的資訊有限,大多數的時候,我們很難定位到底哪個伺服器處理序ID(SPID)才是我們要找的。 比如下面的這個輸出,基本是一樣的。      SQL> select addr,spid,username,terminal,program from v$process;ADDR                          SPID           USERNAME   TERMINAL                             PROGRAM----------------------- ------------ --------------- ------------------------------ ------------------------------------------------000000007FE6D7A8   2447          oracle             UNKNOWN                           [email protected] (MMNL)000000007FE6DFA0   2449         oracle              UNKNOWN                           [email protected] (D000)000000007FE6E798   2451          oracle              UNKNOWN                           [email protected] (S000)000000007FE6EF90   2453          oracle              pts/1                                      [email protected] (TNS V1-V3)000000007FE6F788   2455          oracle              UNKNOWN                           [email protected] (ARC0)000000007FE6FF80   2457          oracle              UNKNOWN                           [email protected] (ARC1)000000007FE70778   2459          oracle              UNKNOWN                           [email protected] (CTWR)000000007FE70F70   2461          oracle              UNKNOWN                          [email protected] (QMNC)000000007FE71768   5703         oracle               pts/2                                     [email protected] (TNS V1-V3)000000007FE71F60   5839         oracle              UNKNOWN                           [email protected]000000007FE73F40   2475         oracle              UNKNOWN                           [email protected] (q000)      這時,我們就藉助v$session視圖,即通過會話找伺服器處理序(一個進程可以有多個會話,但一個會話,只能屬於一個進程)。前面說過,追蹤檔案分為兩類,我們需要的是我們主動產生的追蹤檔案。即然是我們主動產生的,那一定是在我們當前的會話中產生。因此,我們可以利用以下語句找到我們當前會話所屬的伺服器處理序ID(SPID)。    SQL> select a.spid from v$process a,v$session b where b.sid=sys_context(‘userenv‘,‘sid‘) and a.addr=b.paddr; SPID------------5922       上面語句中的 sys_context(‘userenv‘,‘sid‘) 是利用系統內建的函數來取當前的會話ID(SID),這個函數也可以用 userenv(‘sid‘) 來代替,結果是一樣的。只不過ORACLE建議使用前者。因為後面這個函數只是出於保持版本的相容性而保留下來的,但說不定什麼時候,這個函數就會在更新的版本中取消了。     有了這個SPID,我們就可以去相應的追蹤檔案的存放位置,去尋找在目前時間產生的,檔案名稱中含有”5922“的追蹤檔案了。      另外,我們也可以使用下面這個SQL語句,在當前會話中直接查詢而獲得追蹤檔案的絕對路徑和名字。 select c.value || ‘/‘ || d.instance_name || ‘_ora_‘ || a.spid || ‘.trc‘ trace from v$process a, v$session b, v$parameter c, v$instance dwhere a.ADDR = b.PADDR and b.SID = sys_context(‘userenv‘,‘sid‘) and c.NAME = ‘user_dump_dest‘ ;

如何尋找ORACLE中的追蹤檔案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.