檢查資料庫是否啟用了跟蹤
如果會話執行的任務和預期不符,或者執行速度比較慢,那麼大多數資料庫管理員的第一步是檢查等待事件。要構建配置檔案,您可能還需要長期跟蹤會話,那麼在 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_bindsfrom v$sessionwhere 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_bindsfrom v$sessionwhere 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_MODULE136 SERVICE_MODULE_ACTION
您可以看到,您已經對會話 136 的 Service Module 和 Service Module Action 啟用了跟蹤。但 DBA_ENABLED_TRACES 並未顯示繫結變數或等待事件。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-983178/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢查是否啟用了跟蹤(oracle 白皮書 轉)Oracle
- Backup And Recovery User's Guide-檢查改變跟蹤是否被開啟GUIIDE
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- sql server跟蹤資料庫SQLServer資料庫
- 資料庫資料跟蹤記錄資料庫
- 新增時--sqlserver資料庫跟蹤SQLServer資料庫
- 檢視主資料庫的物件中是否使用了不支援的資料型別資料庫物件資料型別
- 如何檢查Mac上是否啟用了SIP系統完整性保護Mac
- oracle檢查資料庫是否有壞塊的命令Oracle資料庫
- 啟動資料庫,啟動監聽,檢視是否歸檔資料庫
- 檢查使用者是否用了預設密碼(轉)密碼
- 跟蹤查詢DBLink遠端表是否使用到索引索引
- 查詢資料庫表是否存在資料庫
- 資料庫配置檢查資料庫
- ABAP的許可權檢查跟蹤(Authorization trace)工具
- openguass 3.1.0 資料庫啟動,關閉,狀態檢查資料庫
- 資料庫健康檢查(轉)資料庫
- (zt) 開啟事件跟蹤事件
- 【LOG】Oracle資料庫清理日誌、跟蹤檔案利器Oracle資料庫
- Oracle中如何跟蹤SQL或資料庫操作 [final]OracleSQL資料庫
- 查詢跟蹤檔名稱
- MySQL資料庫健康檢查--MySQL巡檢MySql資料庫
- oracle資料庫巡檢(二)全面檢查Oracle資料庫
- Oracle資料庫啟動過程驗證檢查點SCNOracle資料庫
- 【DB】使用SQL_TRACE進行資料庫診斷跟蹤SQL資料庫
- 把資料庫控制檔案備份到跟蹤檔案資料庫
- ORAchk-資料庫健康檢查資料庫
- 使用TKPROF檢視跟蹤檔案
- 檢視oracle資料庫是否為歸檔模式Oracle資料庫模式
- MSSQL資料庫健康檢查--SQL Server巡檢SQL資料庫Server
- 【TRACE】如果通過10046跟蹤資料庫效能問題資料庫
- 漫談Oracle資料庫健康檢查Oracle資料庫
- 資料庫的查詢與檢視資料庫
- Oracle資料庫健康檢查常用SQLOracle資料庫SQL
- mysqldump跟蹤匯出來東西是否排序了MySql排序
- Qt 檢查int某一位資料是否為1QT
- 啟用使用者程式跟蹤
- 如何跟蹤資訊流廣告轉化資料?