sql_trace/ 10046 整理
sql_trace
sql_trace 在10G中是動態引數,之前的版本是靜態引數
1.
在全域性啟用 在引數檔案(pfile/spfile)中指定:
sql_trace =true
在全域性啟用SQL_TRACE會導致所有程式的活動被跟蹤,包括後臺程式及所有使用者程式,這通常會導致比較嚴重的效能問題,所以在生產環境中要謹慎使用.
2.建議在session 級使用
在當前session級設定
alter session set sql_trace=TRUE;
alter session set sql_trace=false;
alter session set timed_statistics =TRUE
3. 跟蹤其他使用者程式
在很多時候我們需要跟蹤其他使用者的程式,而不是當前使用者,這可以透過Oracle提供的系統包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
來完成
SET_SQL_TRACE_IN_SESSION過程式要提供三個引數:
SQL> desc dbms_system
...
PROCEDURE SET_SQL_TRACE_IN_SESSION
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SID NUMBER IN
SERIAL# NUMBER IN
SQL_TRACE BOOLEAN IN
...
透過v$session我們可以獲得sid、serial#等資訊:
獲得程式資訊,選擇需要跟蹤的程式:
SQL> select sid,serial#,username from v$session
2 where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
設定跟著:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)
PL/SQL procedure successfully completed.
....
可以等候片刻,跟蹤session執行任務,捕獲sql操作...
....
停止跟蹤:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)
PL/SQL procedure successfully completed.
在當前session級設定
alter session set sql_trace=TRUE;
alter session set sql_trace=false;
alter session set timed_statistics =TRUE
3. 跟蹤其他使用者程式
在很多時候我們需要跟蹤其他使用者的程式,而不是當前使用者,這可以透過Oracle提供的系統包DBMS_SYSTEM. SET_SQL_TRACE_IN_SESSION
來完成
SET_SQL_TRACE_IN_SESSION過程式要提供三個引數:
SQL> desc dbms_system
...
PROCEDURE SET_SQL_TRACE_IN_SESSION
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SID NUMBER IN
SERIAL# NUMBER IN
SQL_TRACE BOOLEAN IN
...
透過v$session我們可以獲得sid、serial#等資訊:
獲得程式資訊,選擇需要跟蹤的程式:
SQL> select sid,serial#,username from v$session
2 where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
設定跟著:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,true)
PL/SQL procedure successfully completed.
....
可以等候片刻,跟蹤session執行任務,捕獲sql操作...
....
停止跟蹤:
SQL> exec dbms_system.set_sql_trace_in_session(9,437,false)
PL/SQL procedure successfully completed.
10046
10046事件是Oracle提供的內部事件,是對SQL_TRACE的增強.
10046事件可以設定以下四個級別:
1 - 啟用標準的SQL_TRACE功能,等價於sql_trace
4 - Level 1 +繫結值(bind values)8 - Level 1 + 等待事件跟蹤
12 - Level 1 + Level 4 + Level 8
其中1相當於設定SQL_TRACE=TRUE之後的結果,4包括1的結果和繫結變數的實際值,8包括1的結果和等待事件的情況,12則同時包含1的結果,繫結變數的實際值和等待事件情況,所以可以說level 12是最為詳細的trace了。
類似sql_trace,10046事件可以在全域性設定,也可以在session級設定。
1. 在全域性設定
全域性設定 不建議開啟,影響效能
alter system set sql_trace=TRUE;
alter system set events '10046 trace name context forever, level 12';
在全域性設定 在引數檔案中增加:
event="10046 trace name context forever,level 12"
此設定對所有使用者的所有程式生效、包括後臺程式.
2. 對當前session設定
10046事件跟蹤開啟等 當前會話
alter session set events '10046 trace name context forever';
alter session set events '10046 trace name context forever, level 8';
alter session set events '10046 trace name context forever, level 12';
alter session set events '10046 trace name context off';
3.對其他使用者session設定
透過DBMS_SYSTEM.SET_EV系統包來實現:
SQL> desc dbms_system
...
PROCEDURE SET_EV
Argument Name Type In/Out Default?
------------------------------ ----------------------- ------ --------
SI BINARY_INTEGER IN
SE BINARY_INTEGER IN
EV BINARY_INTEGER IN
LE BINARY_INTEGER IN
NM VARCHAR2 IN
...
其中的引數SI、SE、 NM對應v$session檢視sid,serial#,username
LE 表示TRACE級別,=0時表示跟蹤結束
EV表示跟蹤的事件型別
查詢獲得需要跟蹤的session資訊:
SQL> select sid,serial#,username from v$session where username is not null;
SID SERIAL# USERNAME
---------- ---------- ------------------------------
8 2041 SYS
9 437 EYGLE
執行跟蹤:
SQL> exec dbms_system.set_ev(9,437,10046,8,'eygle');
結束跟蹤:
SQL> exec dbms_system.set_ev(9,437,10046,0,'eygle');
(c) 獲取跟蹤檔案
方法1 以上生成的跟蹤檔案位於user_dump_dest目錄中,位置及檔名可以透過以下SQL查詢獲得:
SQL> select
d.value||'/'||lower(rtrim(i.instance, chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
from
( select p.spid
from sys.v$mystat m,sys.v$session s,sys.v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from sys.v$thread t,sys.v$parameter v
where v.name = 'thread' and (v.value = 0 or t.thread# = to_number(v.value))) i,
( select value from sys.v$parameter where name = 'user_dump_dest') d
方法2
在日常工作中,我們經常需要對一些session進行跟蹤,如何快速獲取對應的trace檔案。方法很多。今天向大家推薦一個Oracle undocumented
alter session command .讓你"隨心所欲"的控制你的trace file檔名稱.
當然了,trace file 還是在引數user_dump_dest對應的目錄下生成。同時,可以在一個session中生成多個trace file
預設的檔名格式為:sid_ora_pid_traceid.trc 注:TRACEID就是你自己定義的識別符號
ALTER SESSION SET SQL_TRACE=TRUE;
ALTER SESSION SET TRACEFILE_IDENTIFIER='TOMS';
Use V$PROCESS.TRACEID to check the setting.
SQL> select username, traceid from v$process where username='STUDY'
USERNAME TRACEID
--------------- ----------
STUDY TOMS
示例如下:
SQL> alter session set sql_trace=true;
會話已更改。
SQL> alter session set tracefile_identifier='toms';
會話已更改。
SQL> select sysdate from dual;
SYSDATE
--------------
20060615202501
SQL> alter session set tracefile_identifier='toms_other';
會話已更改。
SQL> select user from dual;
USER
------------------------------
SYS
SQL> alter session set sql_trace=false;
會話已更改。
D:adminstudyudump>dir *toms*.trc
驅動器 D 中的卷是 應用盤
卷的序列號是 F0A8-DF97
D:adminstudyudump 的目錄
2006-06-15 20:31 4,842 study_ora_3652_toms.trc
2006-06-15 20:31 702 study_ora_3652_toms_other.trc
2 個檔案 5,544 位元組
0 個目錄 26,398,515,200 可用位元組
D:adminstudyudump>
如果想取消上面的設定,只需要
alter session set tracefile_identifier='';
這樣以後再在這個session中生成的trace file就是傳統規則(sid_ora_pid.trc)的命名了.
(d) 讀取當前session設定的引數
當我們透過alter session的方式設定了sql_trace,這個設定是不能透過show parameter的方式得到的,我們需要透過dbms_system.read_ev來獲取:
SQL> set feedback off
SQL> set serveroutput on
SQL> declare
2 event_level number;
3 begin
4 for event_number in 10000..10999 loop
5 sys.dbms_system.read_ev(event_number, event_level);
6 if (event_level > 0) then
7 sys.dbms_output.put_line(
8 'Event ' ||
9 to_char(event_number) ||
10 ' is set at level ' ||
11 to_char(event_level)
12 );
13 end if;
14 end loop;
15 end;
16 /
Event 10046 is set at level 1
或者
declare lev integer;
begin
dbms_system.read_ev(10046,lev);
dbms_output.put_line(lev);
end;
/
begin
dbms_system.read_ev(10046,lev);
dbms_output.put_line(lev);
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/23650854/viewspace-689296/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 10046事件概述事件
- sql_trace相關指令碼SQL指令碼
- Oracle診斷案例-Sql_traceOracleSQL
- 10046 tracefile註釋
- Oracle 10046 SQL TRACEOracleSQL
- 從10046看Oracle分割槽裁剪Oracle
- 單個SQL語句的10046 traceSQL
- 使用SQL_TRACE進行資料庫診斷(轉)SQL資料庫
- 用10046進行診斷一例
- [20200818]12c 10046跟蹤時間戳.txt時間戳
- [20180417]使用10046事件需要什麼許可權.txt事件
- [20200818]12c 10046跟蹤時間戳2.txt時間戳
- 【TRACE】如果通過10046跟蹤資料庫效能問題資料庫
- 從10046 trace 的trca報告中總結的時間模型示例模型
- [20201118]18c 10046跟蹤時間戳3(虛擬機器).txt時間戳虛擬機
- js 整理JS
- webpack整理Web
- hbase整理
- 待整理
- Linux整理Linux
- Maven 整理Maven
- 幫你整理 Java 中常見設計模式整理Java設計模式
- 思路整理篇
- Nmap指令整理
- MySQL 部分整理MySql
- 索引碎片整理索引
- AutoreleasePool分析整理
- AngularJS整理(1.0.0)AngularJS
- git命令整理Git
- babel 配置整理Babel
- 待整理 mybatisMyBatis
- 面試整理面試
- 效率工具整理
- GIt操作整理Git
- 集合的整理
- tmpwatch 命令整理
- Vue整理(1.0.0)Vue
- 快捷鍵整理
- fastjson整理思路ASTJSON