熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle跟蹤文件與跟蹤事件

2022-06-13   來源: Oracle 

  [Q]如果設置自動跟蹤

  [A]用system登錄

  執行$ORACLE_HOME/rdbms/admin/utlxplansql創建計劃表

  執行$ORACLE_HOME/sqlplus/admin/plustrcesql創建plustrace角色

  如果想計劃表讓每個用戶都能使用

  SQL>create public synonym plan_table for plan_table;

  SQL> grant all on plan_table to public;

  如果想讓自動跟蹤的角色讓每個用戶都能使用

  SQL> grant plustrace to public;

  通過如下語句開啟/停止跟蹤

  SET AUTOTRACE ON |OFF

  | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN

  [Q]如果跟蹤自己的會話或者是別人的會話

  [A]跟蹤自己的會話很簡單

  Alter session set sql_trace true|false

  Or

  Exec dbms_sessionset_sql_trace(TRUE);

  如果跟蹤別人的會話需要調用一個包

  exec dbms_systemset_sql_trace_in_session(sidserial#true|false)

  跟蹤的信息在user_dump_dest 目錄下可以找到或通過如下腳本獲得文件名稱(適用於Win環境如果是unix需要做一定修改)

  SELECT pvalue||||pvalue||_ora_||pspid||ora filename

  FROM

  v$process p

  v$session s

  v$parameter p

  v$parameter p

  WHERE pname = user_dump_dest

  AND pname = db_name

  AND paddr = spaddr

  AND saudsid = USERENV (SESSIONID)

  最後可以通過Tkprof來解析跟蹤文件

  Tkprof 原文件 目標文件 sys=n

  [Q]怎麼設置整個數據庫系統跟蹤

  [A]其實文檔上的alter system set sql_trace=true是不成功的

  但是可以通過設置事件來完成這個工作作用相等

  alter system set events

   trace name context foreverlevel ;

  如果關閉跟蹤可以用如下語句

  alter system set events

   trace name context off;

  其中的level 與上面的都是跟蹤級別

  level 跟蹤SQL語句等於sql_trace=true

  level 包括變量的詳細信息

  level 包括等待事件

  level 包括綁定變量與等待事件

  一Oracle跟蹤文件

  Oracle跟蹤文件分為三種類型一種是後台報警日志文件記錄數據庫在啟動關閉和運行期間後台進程的活動情況如表空間創建回滾段創建某些alter命令日志切換錯誤消息等在數據庫出現故障時應首先查看該文件但文件中的信息與任何錯誤狀態沒有必然的聯系後台報警日志文件保存BACKGROUND_DUMP_DEST參數指定的目錄中文件格式為SIDALRTLOG另一種類型是DBWRLGWRSMON等後台進程創建的後台跟蹤文件後台跟蹤文件根據後台進程運行情況產生後台跟蹤文件也保存在BACKGROUND_DUMP_DEST參數指定的目錄中文件格式為siddbwrtrcsidsmontrc等還有一種類型是由連接到Oracle的用戶進程(Server Processes)生成的用戶跟蹤文件這些文件僅在用戶會話期間遇到錯誤時產生此外用戶可以通過執行oracle跟蹤事件(見後面)來生成該類文件用戶跟蹤文件保存在USER_DUMP_DEST參數指定的目錄中文件格式為oraxxxxxtrcxxxxx為創建文件的進程號(或線程號)

  二Oracle跟蹤事件

  Oracle提供了一類命令可以將Oracle各類內部結構中所包含的信息轉儲(dump)到跟蹤文件中以便用戶能根據文件內容來解決各種故障設置跟蹤事件有兩種方法一種是在initora文件中設置事件這樣open數據庫後將影響到所有的會話設置格式如下

  EVENT=eventnumber trace name eventname [forever] [level levelnumber] :

  通過:符號可以連續設置多個事件也可以通過連續使用event來設置多個事件

  另一種方法是在會話過程中使用alter session set events命令只對當前會話有影響設置格式如下

  alter session set events \[eventnumber|immediate] trace name eventname [forever] [ level levelnumber] : \

  通過:符號可以連續設置多個事件也可以通過連續使用alter session set events 來設置多個事件

  格式說明eventnumber指觸發dump的事件號事件號可以是Oracle錯誤號(出現相應錯誤時跟蹤指定的事件)或oralce內部事件號內部事件號在之間不能與immediate關鍵字同用

  immediate關鍵字表示命令發出後立即將指定的結構dump到跟蹤文件中這個關鍵字只用在alter session語句中並且不能與                eventnumberforever關鍵字同用

  trace name 是關鍵字

  eventname指事件名稱(見後面)即要進行dump的實際結構名若eventname為context則指根據內部事件號進行跟蹤

  forever關鍵字表示事件在實例或會話的周期內保持有效狀態不能與immediate同用

  level為事件級別關鍵字但在dump錯誤棧(errorstack)時不存在級別

  levelnumber表示事件級別號一般從表示只dump結構頭部信息表示dump結構的所有信息

  buffers事件dump SGA緩沖區中的db buffer結構

  alter session set events \immediate trace name buffers level \; 表示dump緩沖區的頭部

  blockdump事件dump數據文件索引文件回滾段文件結構

  alter session set events \immediate trace name blockdump level \; 表示dump塊地址為的數據塊

  在Oracle 以後該命令已改為

  alter system dump datafile block ; 表示dump數據文件號為中的第個數據塊

  controlf事件dump控制文件結構

  alter session set events \immediate trace name controlf level \; 表示dump控制文件的所有內容

  locks事件dump LCK進程的鎖信息

  alter session set events \immediate trace name locks level \;

  redohdr事件dump redo日志的頭部信息

  alter session set events \immediate trace name redohdr level \; 表示dump redo日志頭部的控制文件項

  alter session set events \immediate trace name redohdr level \; 表示dump redo日志的通用文件頭

  alter session set events \immediate trace name redohdr level \; 表示dump redo日志的完整文件頭

  注意redo日志的內容dump可以采用下面的語句:

  alter system dump logfile \logfilename\;

  loghist事件dump控制文件中的日志歷史項

  alter session set events \immediate trace name loghist level \; 表示只dump最早和最遲的日志歷史項

  levelnumber大於等於表示的levelnumber次方個日志歷史項

  alter session set events \immediate trace name loghist level \; 表示dump 個日志歷史項

  file_hdrs事件dump 所有數據文件的頭部信息

  alter session set events \immediate trace name file_hdrs level \; 表示dump 所有數據文件頭部的控制文件項

  alter session set events \immediate trace name file_hdrs level \; 表示dump 所有數據文件的通用文件頭

  alter session set events \immediate trace name file_hdrs level \; 表示dump 所有數據文件的完整文件頭

  errorstack事件dump 錯誤棧信息通常Oracle發生錯誤時前台進程將得到一條錯誤信息但某些情況下得不到錯誤信息可以

  采用這種方式得到Oracle錯誤

  alter session set events \ trace name errorstack forever\; 表示當出現錯誤時dump 錯誤棧和進程棧

  systemstate事件dump所有系統狀態和進程狀態

  alter session set events \immediate trace name systemstate level \; 表示dump 所有系統狀態和進程狀態

  coalesec事件dump指定表空間中的自由區間

  levelnumber以十六進制表示時兩個高位字節表示自由區間數目兩個低位字節表示表空間號x表示dump系統表空間中的

  個自由區間轉換成十進制就是

  alter session set events \immediate trace name coalesec level \;

  processsate事件dump進程狀態

  alter session set events \immediate trace name processsate level \;

  library_cache事件dump library cache信息

  alter session set events \immediate trace name library_cache level \;

  heapdump事件dump PGASGAUGA中的信息

  alter session set events \immediate trace name heapdump level \;

  row_cache事件dump數據字典緩沖區中的信息

  alter session set events \immediate trace name row_cache level \;

  三內部事件號

  用於監視事務恢復

  轉儲UNDO SEGMENT頭部

  event = trace name context forever

  用於給出會話期間的登陸信息

  用於給出會話期間的注銷信息

  轉儲排序的統計信息

  轉儲排序增長的統計信息

  跟蹤Freelist管理操作

  跟蹤SQL語句

  alter session set events \ trace name context forever level \; 跟蹤SQL語句並顯示綁定變量

  alter session set events \ trace name context forever level \; 跟蹤SQL語句並顯示等待事件

  轉儲優化策略

  模擬redo日志中的創建和清除錯誤

  阻止SMON進程在啟動時清除臨時段

  轉儲 SQL*NET統計信息

  轉儲高水標記變化

  轉儲Hash連接統計信息

  轉儲分區休整信息

  轉儲一致性讀信息

  轉儲一致性讀中Undo應用

  允許在控制文件中模擬錯誤

  觸發數據塊檢查事件

  event = trace name context forever level

  觸發索引檢查事件

  模擬在寫控制文件後崩潰

  模擬在控制文件中的寫錯誤

  levelnumber從表示產生錯誤的塊號大於等於則每個控制文件將出錯

  模擬在控制文件中的讀錯誤

  轉儲Undo頭部變化

  轉儲Undo變化

  轉儲索引的分隔與刪除

  轉儲基於字典管理的區間的變化

  模擬在數據文件上的I/O錯誤

  設置在全表掃描時忽略損壞的數據塊

  alter session set events \ trace name context off\; 關閉會話期間的數據塊檢查

  event = trace name context forever level 對任何進程讀入SGA的數據塊進行檢查

  將設置為軟損壞(DBMS_REPAIR包設置或DB_BLOCK_CHECKING為TRUE時設置)的數據塊dump到跟蹤文件

  用於內存堆檢查

  alter session set events \ trace name context forever level \;

  轉儲遠程SQL執行

  跟蹤PMON進程

  跟蹤dispatch進程

  跟蹤MTS進程

  模擬寫數據文件頭部錯誤

  模擬寫redo日志文件錯誤

  允許連接時存在內存洩漏

  alter session set events \ trace name context forever level \; 允許存在個字節的內存洩漏

  轉儲共享游標

  模擬控制文件頭部損壞

  模擬控制文件打開錯誤

  模擬歸檔出錯

  調試直接路徑機制

  跟蹤SMON進程

  跟蹤位圖索引的創建

  跟蹤enqueues

  跟蹤全局enqueues

  跟蹤RAC的buffer cache

  跟蹤對位圖索引的訪問

  跟蹤位圖索引合並操作

  跟蹤位圖索引OR操作

  跟蹤位圖索引AND操作

  跟蹤位圖索引MINUS操作

  跟蹤位圖索引向ROWID的轉化

  跟蹤位圖索引的壓縮與解壓

  跟蹤位圖索引的修改

  跟蹤游標聲明

  跟蹤PL/SQL執行

  轉儲PL/SQL執行統計信息

  最後要說明的是由於版本不同以上語法可能有些變化但大多數還是可用的


From:http://tw.wingwit.com/Article/program/Oracle/201311/16829.html
    推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.