依據錯誤號來跟蹤sql語句

zhaoqing0803發表於2013-10-21
   在應用開發的時候,我們有時候只能看見錯誤號,不能知道錯誤的sql語句,這時候就要根據錯誤號來跟蹤sql語句
   1、檢查sql_trace引數預設為false,將它改為true
         alter system set sql_trace=true;
  2、 執行下面語句,按照錯誤號來生成錯誤檔案
         alter system set events '1861 trace name errorstack level 3';
         alter system|session set events '[eventnumber|immediate] trace name
         eventname [forever] [, level levelnumber] : …….’
         通過:符號,可以連續設定多個事件,也可以通過連續使用alter session
         set    events來設定多個事件。
         格式說明:eventnumber指觸發dump的事件號,事件號可以是Oracle錯誤號
        (出現相應錯誤時跟蹤指定的事件)或oralce內部事件號,內部事件
         號在10000到10999之間,不能與immediate關鍵字同用。

          immediate關鍵字表示命令發出後,立即將指定的結構dump到跟蹤檔案中,
          這個關鍵字只用在alter session語句中,並且不能與eventnumber、forever關
          鍵字同用。

          trace name是關鍵字
          eventname指事件名稱(見後面),即要進行dump的實際結構名。若
          eventname為context,則指根據內部事件號進行跟蹤。
          forever關鍵字表示事件在例項或會話的週期內保持有效狀態,不能與
          immediate同用。
          level為事件級別關鍵字。但在dump錯誤棧(errorstack)時不存在級別。
          levelnumber表示事件級別號,一般從1到10,1表示只dump結構頭部信
          息,10表示dump結構的所有資訊。


         -----1861是錯誤號
  下面是關閉跟蹤語句
         alter system set events '1861 trace name errorstack off';
         errorstack:(1)、buffers事件:dump SGA緩衝區中的db buffer結構
         alter session set events 'immediate trace name buffers level 1'; –表示  
         dump      緩衝區的頭部。

         (2)、blockdump事件:dump資料檔案、索引檔案、回滾段檔案結構
                  alter session set events 'immediate trace name blockdump level
                  66666'; –表示dump塊地址為6666的資料塊。
                  在Oracle 8以後該命令已改為:
                  alter system dump datafile 11 block 9; –表示dump資料檔案號為11中
                  的第9個資料塊。

          (3)、controlf事件:dump控制檔案結構
                   alter session set events 'immediate trace name controlf level 10'; –表
                   示dump控制檔案的所有內容。

          (4)、locks事件:dump LCK程式的鎖資訊
                   alter session set events 'immediate trace name locks level 5';

          (5)、redohdr事件:dump redo日誌的頭部資訊
                   alter session set events 'immediate trace name redohdr level 1'; –表示
                   dump redo日誌頭部的控制檔案項。
                   alter session set events 'immediate trace name redohdr level 2'; –表示
                   dump redo日誌的通用檔案頭。
                   alter session set events 'immediate trace name redohdr level 10'; –表
                   示dump redo日誌的完整檔案頭。
                   注意:redo日誌的內容dump可以採用下面的語句:
                   alter system dump logfile 'logfilename’;

            (6)、loghist事件:dump控制檔案中的日誌歷史項
                    alter session set events 'immediate trace name loghist level 1'; –表示
                    只dump最早和最遲的日誌歷史項。
                    levelnumber大於等於2時,表示2的levelnumber次方個日誌歷史項。
                    alter session set events 'immediate trace name loghist level 4'; –表示
                    dump 16個日誌歷史項。

            (7)、file_hdrs事件:dump所有資料檔案的頭部資訊
                     alter session set events 'immediate trace name file_hdrs level 1'; –表
                     示dump所有資料檔案頭部的控制檔案項。
                     alter session set events 'immediate trace name file_hdrs level 2'; –表
                     示dump所有資料檔案的通用檔案頭。
                     alter session set events 'immediate trace name file_hdrs level 10'; –
                      表示dump所有資料檔案的完整檔案頭。

             (8)、errorstack事件:dump錯誤棧資訊,通常Oracle發生錯誤時前臺程式
                      將得到一條錯誤資訊,但某些情況下得不到錯誤資訊,可以採用這種方
                      式得到Oracle錯誤。
                      alter session set events '604 trace name errorstack forever’; –表示當
                       出現604錯誤時,dump錯誤棧和程式棧。

             (9)、systemstate事件:dump所有系統狀態和程式狀態
                      alter session set events 'immediate trace name systemstate level
                      10';            –表示dump所有系統狀態和程式狀態。

             (10)、coalesec事件:dump指定表空間中的自由區間
                        levelnumber以十六進位制表示時,兩個高位位元組表示自由區間數目,兩
                        個低位位元組表示表空間號,如0×00050000表示dump系統表空間中的
                        5個自由區間,轉換成十進位制就是327680,即:
                        alter session set events 'immediate trace name coalesec level
                         327680';

               (11)、processsate事件:dump程式狀態
                alter session set events 'immediate trace name processsate level 10';

               (12)、library_cache事件:dump library cache資訊
               alter session set events 'immediate trace name library_cache level 10';

               (13)、heapdump事件:dump PGA、SGA、UGA中的資訊
               alter session set events 'immediate trace name heapdump level 1';

               (14)、row_cache事件:dump資料字典緩衝區中的資訊
               alter session set events 'immediate trace name row_cache level 1';




3、查詢資料庫監控日誌
       more alert_sid.log
      一般日誌會出這樣的結果
     Mon Oct 21 13:55:52 2013
     OS Pid: 28178 executed alter system set events '1821 trace name errorstack   
     level   3'
     Mon Oct 21 13:55:59 2013
     Errors in file /u01/app/oracle/diag/rdbms/crm/crm/trace/crm_ora_28257.trc:
    ORA-01821: date format not recognized
    Mon Oct 21 13:56:02 2013
    Trace dumping is performing id=[cdmp_20131021135602]
     Mon Oct 21 13:56:13 2013
     OS Pid: 28178 executed alter system set events '1821 trace name
     errorstack  off'
4、根據這個路徑去尋找跟蹤檔案
5、格式化這個跟蹤檔案,例如:tkprof crm_ora_29968.trc p_29968.pkf
     

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23205405/viewspace-774733/,如需轉載,請註明出處,否則將追究法律責任。

相關文章