SQL 跟蹤方法相關介紹
oracle sql跟蹤方法:
1、sql_trace
開啟跟蹤:alter session set sql_trace=true;
為跟蹤檔案做標記:alter session set tracefile_identifier='look_for_me';
停止跟蹤:alter session set sql_trace=false;
最後生成的跟蹤檔案可以採用tkprof工具生成來檢視。
2、10046跟蹤程式碼
跟蹤界別介紹:
Level 0 停用SQL跟蹤,相當於SQL_TRACE=FALSE
Level 1 標準SQL跟蹤,相當於SQL_TRACE=TRUE
Level 4 在level 1的基礎上增加繫結變數的資訊
Level 8 在level 1的基礎上增加等待事件的資訊
Level 12 在level 1的基礎上增加繫結變數和等待事件的資訊
開啟跟蹤:
GRANT ALTER SESSION TO lttfm; --必須具有alter session許可權
alter session set events '10046 trace name context forever,level 12';--當前使用者設定
或者在init.ora檔案中插入下面的行:event = 10046 trace name context forever,level 12;--為全域性設定
關閉跟蹤:
alter session set events '10046 trace name context off';--關閉使用者跟蹤
注:sql_trace和10046設定程式碼跟蹤只能針對本會話或者系統級進行會話跟蹤,具體設定某個非本會話的跟蹤需要採用oradebug或者
dbms_system.set_ev或者dbms_monitor.session_trace_enable。
3、使用oradebug
--用如下語句找出要跟蹤的spid
select * from v$session a where audsid = userenv('sessionid'); --查詢當前的sessionid
select s.USERNAME,
s.OSUSER,
s.SID,
s.PADDR,
s.PROCESS,
p.spid os_process_id,
p.pid oracle_process_id
from v$session s, v$process p
where s.paddr = p.addr
and s.username = upper('LTWEBGIS')
and s.SID = 145;
--設定跟蹤程式id。
SQL> connect / as sysdba
SQL> oradebug setospid 5672;該語句為跟蹤其他會話(5672為v$process的spid),
若跟蹤本會話,執行 oradebug setmypid。
或
SQL> connect / as sysdba
SQL> oradebug setorapid 15 --輸入的15為v$process的pid
--設定跟蹤檔案大小無限制
SQL> oradebug unlimit;
--設定跟蹤,級別8
SQL> oradebug event 10046 trace name context forever,level 8;
已處理的語句
--關閉跟蹤
SQL> oradebug event 10046 trace name context off;
執行該語句(SQL> oradebug setospid 5672;)時,提示“ORA-01031: 許可權不足”,
原因:oradebug是sysdba的命令(一般使用者執行提示許可權不足),而且是sqlplus特有的命令,不能在plsql工具中執行(否則提示無效sql)。
可以用oradebug help命令檢視oradebug工具說明。
4、dbms_system(必須用sys使用者執行)
exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le =>8 ,nm => '');--會話id等引數必須設定正確,否則trace無法生成
生成後可用sql語句檢視trace檔案位置。
--停止跟蹤
exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le =>0 ,nm => '');
5、dbms_monitor
exec dbms_monitor.session_trace_enable(session_id => 136,serial_num => 4,waits => true,binds => true);
exec dbms_monitor.session_trace_disable(session_id => 136,serial_num => 4);
如果不設定session_id或者設定為null,則跟蹤當前會話
6、dbms_support
exec dbms_support.start_trace_in_session(sid => 1234,serial# => 56789,waits => true,binds => true);
exec dbms_support.stop_trace_in_session(sid => 1234,serial# => 56789);
dbms_support預設情況下,系統不安裝這個包。如果需要使用的話,需進行單獨設定。在$ORACLE_HOME/rdbms/admin/目錄下應該存在
dbmssupp.sql,prvtsupp.plb這兩個檔案,執行這兩個檔案後才可使用,如果別的使用者要使用,需要進行相應的授權,並建立同義詞。
注:3,4,5,6這幾種跟蹤方法都是在sys的使用者下才能執行,可對任意會話進行跟蹤。
獲取跟蹤檔案:
1)oradebug獲取跟蹤檔案
--使用oradebug獲取本會話跟蹤檔案位置
SQL> oradebug setmypid
SQL> oradebug tracefile_name
--獲取任意會話跟蹤檔案位置
SQL> oradebug setospid 5392
已處理的語句
SQL> oradebug tracefile_name
d:\oracle\product\10.2.0\admin\fgisdb\udump\fgisdb_ora_5600.trc
2)sql獲取跟蹤檔案
--sql檢視當前session跟蹤檔案位置
SELECT d.value || '\' || lower(rtrim(i.instance_name, chr(0))) || '_ora_' ||
p.spid || '.trc' trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.sid = m.sid
AND p.addr = s.paddr) p,
(SELECT instance_name FROM v$instance) i,
(SELECT VALUE FROM v$parameter WHERE NAME = 'user_dump_dest') d;
--以下sql為查詢輸入的spid的會話跟蹤檔案
select d.value || '\' || lower(rtrim(i.instance_name, chr(0))) || '_ora_' ||
&spid || '.trc' trace_file_name
from (SELECT instance_name FROM v$instance) i,
(select value from v$parameter where name = 'user_dump_dest') d;
檢視跟蹤級別
1)檢視當前session的跟蹤級別(必須在sys使用者下執行)
declare
event_level number;
begin
dbms_system.read_ev(10046,event_level);
dbms_output.put_line(to_char(event_level));
end;
2)執行如下語句檢視跟蹤事件的跟蹤級別
SQL> oradebug setospid spid --先指定要檢視跟蹤級別的spid
SQL> oradebug eventdump session
10046 trace name CONTEXT level 8, forever
注:如果開啟了跟蹤會話,但之後資料庫關閉,那麼跟蹤自動關閉。
轉自:http://www.cnblogs.com/lanzi/archive/2012/07/31/2616606.html
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28939273/viewspace-1061491/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【分散式跟蹤系統Zipkin 介紹】分散式
- 測試跟蹤工具Bugzilla介紹
- jQuery EasyUI的combobox元件用法相關介紹jQueryUI元件
- 達夢資料庫SQL跟蹤日誌詳細介紹及配置方法資料庫SQL
- SQLServer進行SQL跟蹤SQLServer
- 會話級SQL跟蹤會話SQL
- SQL 的跟蹤方法traceSQL
- Oracle資料庫跟蹤SQLOracle資料庫SQL
- phalcon:跟蹤sql語句SQL
- sql server跟蹤資料庫SQLServer資料庫
- SQL跟蹤工具和TKPROF使用SQL
- 跟蹤 sql 的trace檔案SQL
- 跟蹤使用者的SQLSQL
- sql_trace跟蹤工具(轉)SQL
- sql多表的關係介紹SQL
- 棧呼叫關係跟蹤
- Java呼叫鏈跟蹤關鍵技術(四)SQL監控JavaSQL
- sql server關於跟蹤日誌查詢使用說明SQLServer
- 跟蹤SQL - SQL Trace 及 10046 事件SQL事件
- sql_trace 和 events 跟蹤事件SQL事件
- SQL SERVER 跟蹤標記總結SQLServer
- sqlplus 跟蹤sql語句SQL
- Oracle SQL 跟蹤 --- dbms_system.set_sql_trace_in_sessionOracleSQLSession
- 分散式跟蹤系統zipkin簡介分散式
- celery筆記一之celery介紹、啟動和執行結果跟蹤筆記
- 10046事件跟蹤會話sql事件會話SQL
- 跟蹤客戶端執行的SQL客戶端SQL
- 使用sqltrace跟蹤session執行的sqlSQLSession
- oracle sql跟蹤 event 10046 - 轉OracleSQL
- ORACLE開啟自動跟蹤SQL 功能。OracleSQL
- 使用10046跟蹤sql語句SQL
- 收集 SQL Server 事件探查器跟蹤資訊SQLServer事件
- Oracle PL/SQL 關於遊標的介紹OracleSQL
- 在SQL Server中,關於with as使用介紹SQLServer
- sql語法相關子查詢與非相關子查詢SQL
- 微服務分散式跟蹤工具Brave簡介微服務分散式
- mysql如何跟蹤執行的sql語句MySql
- 用SQL Server事件探查器Profiler建立跟蹤SQLServer事件