[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