檢查是否啟用了跟蹤(oracle 白皮書 轉)
如果會話執行的任務和預期不符,或者執行速度比較慢,那麼大多數資料庫管理員的第一步是檢查等待事件。要構建配置檔案,您可能還需要長期跟蹤會話,那麼在 user_dump_dest 目錄中將生成一個跟蹤檔案。
現在,假設您在某段時間內對多個會話使用了端到端跟蹤,但現在不知道哪些會話處於跟蹤狀態。如何找出這些對話呢?
方法之一是對大量跟蹤檔案進行篩選,以提取 SID 和 Serial# 列並在資料庫的 V$SESSION 檢視中進行匹配。毋庸質疑,這個過程比較複雜、困難並且容易出錯。Oracle 資料庫 10g 第 2 版中提供了一個更優秀、更簡單的方法:您所要做的只是檢視一個檢視,即 V$SESSION。
新增了三個新列顯示跟蹤狀態:
- sql_trace - 如果在會話中啟用了 SQL 跟蹤,則顯示 TRUE/FALSE
- sql_trace_waits - 如果啟用了會話跟蹤,則可以讓跟蹤程式將等待資訊寫入跟蹤檔案,這對於診斷效能問題很有用。
- sql_trace_binds - 如果會話使用繫結變數,則可以讓跟蹤程式將繫結變數值寫入跟蹤檔案。該列顯示 TRUE/FALSE。
select sid, serial#, sql_trace, sql_trace_waits, sql_trace_binds from v$session where username = 'HR'輸出結果如下:
SID SERIAL# SQL_TRAC SQL_T SQL_T ---------- ---------- -------- ----- ----- 196 60946 DISABLED FALSE FALSE此處您可以看到,SID 為 196、Serial# 為 60946 的會話未啟用跟蹤。 現在,您可以對等待事件(而不是繫結變數)啟用跟蹤。可以使用程式包 dbms_monitor 啟用跟蹤。
begin dbms_monitor.session_trace_enable ( session_id => 196, serial_num => 60960, waits => true, binds => false ); end; /現在,如果您要檢視會話資訊:
select sid, serial#, sql_trace, sql_trace_waits, sql_trace_binds from v$session where username = 'HR'輸出結果如下:
SID SERIAL# SQL_TRAC SQL_T SQL_T ---------- ---------- -------- ----- ----- 196 60960 ENABLED TRUE FALSE注意,僅當使用程式包 dbms_monitor 中的過程 session_trace_enable 啟用跟蹤(而不是透過 alter session set sql_trace = true 或設定事件 10046)時,才會填充檢視 V$SESSION。在以後的某個時間點上,如果您要查明哪些會話已經啟用了跟蹤,可以使用以上查詢執行此操作。 如果使用程式包 dbms_monitor 中的其他過程(如 SERV_MOD_ACT_TRACE_ENABLE 或 CLIENT_ID_TRACE_ENABLE)啟用了跟蹤,V$SESSION 檢視將不顯示該資訊。相反,它們將記錄到另一個檢視 DBA_ENABLED_TRACES 中。可以將該檢視與其他相關資訊儲存連線在一起以檢視啟用了跟蹤的會話。例如,使用
SELECT * FROM (SELECT SID, 'SESSION_TRACE' trace_type FROM v$session WHERE sql_trace = 'ENABLED') UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t WHERE t.trace_type = 'CLIENT_ID' AND s.client_identifier = t.primary_id) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE' AND s.service_name = t.primary_id AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE_MODULE' AND s.service_name = t.primary_id AND s.module = t.qualifier_id1 AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'SERVICE_MODULE_ACTION' AND s.service_name = t.primary_id AND s.module = t.qualifier_id1 AND s.action = t.qualifier_id2 AND (t.instance_name IS NULL OR t.instance_name = i.instance_name)) UNION (SELECT SID, t.trace_type FROM v$session s, dba_enabled_traces t, v$instance i WHERE t.trace_type = 'DATABASE' AND (t.instance_name IS NULL OR t.instance_name = i.instance_name))輸出結果如下:
SID TRACE_TYPE ---------- --------------------- 136 SERVICE_MODULE 136 SERVICE_MODULE_ACTION您可以看到,您已經對會話 136 的 Service Module 和 Service Module Action 啟用了跟蹤。但 DBA_ENABLED_TRACES 並未顯示繫結變數或等待事件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12272958/viewspace-677311/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢查資料庫是否啟用了跟蹤資料庫
- Backup And Recovery User's Guide-檢查改變跟蹤是否被開啟GUIIDE
- 檢查使用者是否用了預設密碼(轉)密碼
- Oracle 跟蹤事件【轉】Oracle事件
- oracle跟蹤事件(轉載)Oracle事件
- 如何檢查Mac上是否啟用了SIP系統完整性保護Mac
- ORACLE開啟自動跟蹤SQL 功能。OracleSQL
- 跟蹤查詢DBLink遠端表是否使用到索引索引
- ORACLE 跟蹤工具Oracle
- [zt] oracle跟蹤檔案與跟蹤事件Oracle事件
- oracle跟蹤檔案與跟蹤事件(zt)Oracle事件
- oracle跟蹤檔案和跟蹤事件(zt)Oracle事件
- Oracle開始啟動Java版本許可證的跟蹤審查 - theregisterOracleJava
- ABAP的許可權檢查跟蹤(Authorization trace)工具
- Oracle EBS併發請求啟用跟蹤Oracle
- 轉:使用 Tkprof 分析 ORACLE 跟蹤檔案Oracle
- oracle sql跟蹤 event 10046 - 轉OracleSQL
- 轉載 oracle 跟蹤檔案 和轉儲命令Oracle
- oracle 跟蹤檔案和轉儲命令(轉摘)Oracle
- 【TRACE】Oracle跟蹤事件Oracle事件
- Oracle跟蹤會話Oracle會話
- Oracle跟蹤檔案Oracle
- (zt) 開啟事件跟蹤事件
- 查詢跟蹤檔名稱
- Oracle 跟蹤檔案和檔案轉儲(dump)Oracle
- oracle 跟蹤檔案和轉儲命令詳解Oracle
- oracle session(會話) 跟蹤OracleSession會話
- Oracle跟蹤事件 -- set eventsOracle事件
- Oracle 10G 跟蹤Oracle 10g
- Oracle 跟蹤事件 set eventOracle事件
- Oracle跟蹤事件和dumpOracle事件
- 使用TKPROF檢視跟蹤檔案
- oracle 跟蹤檔案和轉儲命令及常用轉儲命令(轉)Oracle
- [20160720]檢視了解oracle跟蹤事件.txtOracle事件
- ORACLE 10046 設定跟蹤事件後無跟蹤檔案Oracle事件
- mysqldump跟蹤匯出來東西是否排序了MySql排序
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- 用oracle trace 來跟蹤sessionOracleSession