怎樣收集10046跟蹤檔案來診斷效能問題

eric0435發表於2013-11-22
收集10046跟蹤檔案
10046事件是一種標準的方法用來對oracle會話收集擴充套件的sql_trace資訊,對於查詢效能問題來說通常要求記錄查詢的等待和繫結變數資訊.這可以使用級別為12的10046跟蹤來完成.下面的例子說明了在各種情況下設定10046事件.
跟蹤檔案的位置
在oracle11g及以上版本中引入了新的診斷架構,跟蹤和核心檔案儲存的位置由diagnostic_dest初始化引數來控制.可以使用下面的命令來顯示:
 show parameter diagnostic_dest


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
diagnostic_dest                      string      /u01/app/oracle
注意:在有些例子中可能設定了'tracefile_identifier'來幫助找到輸出的跟蹤檔案
會話跟蹤
可以在使用者會話執行sql語句之前對會話啟用跟蹤,在會話級別收集10046跟蹤
sys@JINGYONG> alter session set timed_statistics=true;


會話已更改。


sys@JINGYONG> alter session set statistics_level=all;


會話已更改。


sys@JINGYONG> alter session set max_dump_file_size=unlimited;


會話已更改。


sys@JINGYONG> alter session set events '10046 trace name context forever,level 12';


會話已更改。


sys@JINGYONG> select * from dual;


D
-
X


sys@JINGYONG>exit
如果會話沒有退出可以執行以下語句來禁用10046跟蹤
sys@JINGYONG> alter session set events '10046 trace name context off';


會話已更改。








sys@JINGYONG> select value from v$diag_info where name='Default Trace File';  
VALUE
----------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_2572_10046.trc
注意:如果會話不是徹底的關閉和禁用跟蹤那麼重要的跟蹤資訊可能會從跟蹤檔案中丟失.
注意:這裡statistics_level=all因此它會在這種情況下收集一定程度的統計資訊.這個引數有三個引數值all,typical,basic.為了診斷效能問題會要求獲得一定程度的統計資訊.設定為all可能是不必要的但可以使用typical以此來獲得全面的診斷資訊.
跟蹤一個已經啟動的程式
如果要跟蹤一個已經存在的會話可以使用oradebug來連線到會話初始化10046跟蹤
1.透過某種方法來確定要被跟蹤的會話
例如在sql*plus中啟動一個會話然後找到這個會話的作業系統進行id(spid):
select p.PID,p.SPID,s.SID
from v$process p,v$session s
where s.paddr = p.addr
and s.sid = &SESSION_ID
/
SPID是作業系統程式識別符號
PID是oracle程式識別符號
如果你不知道要不得被跟蹤會話的sid可以使用類似於下面的查詢來幫助你識別這個會話:
column line format a79
set heading off
select 'ospid: ' || p.spid ||' pid: '||p.pid || ' # ''' ||s.sid||','||s.serial#||''' '||
s.osuser || ' ' ||s.machine ||' '||s.username ||' '||s.program line
from v$session s , v$process p
where p.addr = s.paddr
and s.username <> ' ';
執行結果如下:
sys@JINGYONG> column line format a79
sys@JINGYONG> set heading off
sys@JINGYONG> select 'ospid: ' || p.spid || ' # ''' ||s.sid||','||s.serial#||'''
 '||
  2    s.osuser || ' ' ||s.machine ||' '||s.username ||' '||s.program line
  3  from v$session s , v$process p
  4  where p.addr = s.paddr
  5  and s.username <> ' ';


ospid: 2529 # '30,32' Administrator WORKGROUP\JINGYONG SYS sqlplus.exe
注意:在oracle12c中對於多執行緒程式,在v$process檢視中加入了新的列stid來找到特定的執行緒.因為oracle會組合多個程式到一個單獨的ospid中.為了找到這個特定的執行緒使用下面的語法:
oradebug setospid
2.當確定程式的作業系統程式ID後然後可以使用下面的語句來初始化跟蹤:
假設要被跟蹤程式的作業系統程式ID是2529
SQL>connect / as sysdba
sys@JINGYONG> oradebug setospid 2529
Oracle pid: 21, Unix process pid: 2529, image: oracle@jingyong
sys@JINGYONG> oradebug unlimit
已處理的語句
sys@JINGYONG> oradebug event 10046 trace name context forever,level 12
已處理的語句
sys@JINGYONG> select * from dual;


X


sys@JINGYONG> oradebug event 10046 trace name context off
已處理的語句
sys@JINGYONG> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_2529.trc
注意:連線到一個會話也可以使用oradebug setorapid
在這種情況下PID(oracle程式識別符號)將被使用(而不是使用SPID):
sys@JINGYONG> oradebug setorapid 21
Oracle pid: 21, Unix process pid: 2529, image: oracle@jingyong
從顯示的資訊可知道使用oradebug setorapid 21與oradebug set0spid 2529是一樣的
sys@JINGYONG> oradebug unlimit
已處理的語句
sys@JINGYONG> oradebug event 10046 trace name context forever,level 12
已處理的語句
sys@JINGYONG> select sysdate from dual;


11-11月-13


sys@JINGYONG> oradebug event 10046 trace name context off
已處理的語句
sys@JINGYONG> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_2529.trc
注意:在oracle12c中對於多執行緒程式,在v$process檢視中加入了新的列stid來找到特定的執行緒.因為oracle會組合多個程式到一個單獨的ospid中.為了找到這個特定的執行緒使用下面的語法:
oradebug setospid
跟蹤產生的跟蹤檔名稱類似於_.trc
例項級別的跟蹤
注意:在例項級別啟用跟蹤因為每一個會話都會被跟蹤這樣對效能是有影響的在設定這個跟蹤引數後產生的每一個會話都會被跟蹤斷開的會話將不會被跟蹤設定系統級別的10046跟蹤是用於當出現了一個問題會話但不能提前識別這個會話的情況下.在這種情況下跟蹤可以被短時間地啟用,這個問題可能會記錄到跟蹤檔案中然後禁用跟蹤在生成的跟蹤檔案中找到這個問題的原因
啟用系統級別的10046跟蹤:
alter system set events '10046 trace name context forever,level 12';
對所有會話禁有系統級別的10046跟蹤:
alter system set events '10046 trace name context off';
初始化引數的設定:
當例項重新啟動後對每一個會話啟用10046跟蹤.
event="10046 trace name context forever,level 12"
要禁用例項級別的10046跟蹤可以刪除這個初始化引數然後重啟例項或者使用alter system語句
alter system set events '10046 trace name context off';
編寫登入觸發器
在有些情況下可能要跟蹤特定使用者的會話活動在這種情況下可以編寫一個登入觸發器來實現例如:
CREATE OR REPLACE TRIGGER SYS.set_trace
AFTER LOGON ON DATABASE
WHEN (USER like '&USERNAME')
DECLARE
lcommand varchar(200);
BEGIN
EXECUTE IMMEDIATE 'alter session set tracefile_identifier=''From_Trigger''';
EXECUTE IMMEDIATE 'alter session set statistics_level=ALL';
EXECUTE IMMEDIATE 'alter session set max_dump_file_size=UNLIMITED';
EXECUTE IMMEDIATE 'alter session set events ''10046 trace name context forever, level 12''';
END set_trace;
/
注意:為了能跟蹤會話使用者執行觸發器需要顯式的被授予'alter session'許可權:
grant alter session to username;
使用SQLT來收集跟蹤資訊
什麼是SQLTXPLAIN(SQLT)
SQLTXPLAIN也叫作SQLT,它是由專業的oracle服務技術中心提供了一個工具.SQLT輸入一個SQL語句後它會輸出一組診斷檔案.這些診斷檔案會被用來診斷效能低下的sql語句.SQLT連線到資料庫並收集執行,基於成本最佳化的統計資訊,方案物件後設資料,效能統計,配置引數和類似影響SQL效能的元素.
使用SQLTXPLAIN的Xecute選項可以生成10046跟蹤作為SQLT輸出的一部分.
使用dbms_monitor包來進行跟蹤
dbms_monitor是一個新的跟蹤包.跟蹤基於特定的客戶端識別符號或者服務名,模組名和操作名的組合形式來啟用診斷和工作負載管理.在有些情況下可能會生成多個跟蹤檔案(例如對於一個模組啟用服務級別的跟蹤)使用新的trcsess工具來掃描所有的跟蹤檔案並將它們合成一個跟蹤檔案.在合併這一組跟蹤檔案後可以使用標準跟蹤檔案分析方法進行分析
檢視啟用的跟蹤
可以查詢dba_enabled_traces來檢測什麼跟蹤被啟用了.
例如:
sys@JINGYONG>select trace_type, primary_id, QUALIFIER_ID1, waits, binds 
             from DBA_ENABLED_TRACES;


TRACE_TYPE                   PRIMARY_ID  QUALIFIER_ID1           WAITS        BINDS
---------------------- ---------------   ------------------      --------    -------
SERVICE_MODULE         SYS$USERS        SQL*Plus                 TRUE        FALSE
CLIENT_ID              HUGO                                      TRUE        FALSE
SERVICE                v101_DGB                                  TRUE        FALSE
在這個資料庫中已經啟用了三個不同的跟蹤狀態
1.第一行記錄顯示將會對在SQL*Plus中執行的所有sql語句進行跟蹤
2.第二行記錄顯示將會對帶有客戶端識別符號"HUGO'的所有會話進行跟蹤
3.第三行記錄顯示將會對使用服務"v101_DGB'連線到資料庫的所有程式進行跟蹤
session_trace_enable函式
可以使用session_trace_enable過程來對本地例項的一個指定的資料庫會話啟用sql跟蹤.
語法如下:
啟用sql跟蹤
dbms_monitor.session_trace_enable(session_id => x, serial_num => y,
waits=>(TRUE|FALSE),binds=>(TRUE|FALSE) );
禁止sql跟蹤
dbms_monitor.session_trace_disable(session_id => x, serial_num => y);
其中waits的預設值是true,binds的預設值是false.
可以從v$session檢視中查詢會話id和序列號
SQL> select serial#, sid , username from v$session; 


SERIAL#             SID  USERNAME
-------           -----  --------------
 20                 21   SYS
 
然後可以使用下面的命令來對指定的會話啟用跟蹤
SQL> execute dbms_monitor.session_trace_enable(21,20);
跟蹤狀態在資料庫重啟後就會被刪除可以查詢dba_enabled_traces檢視看到沒有記錄
sys@JINGYONG> oradebug tracefile_name
/u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_2529.trc
sys@JINGYONG> select trace_type,primary_id,qualifier_id1,waits,binds
  2  from dba_enabled_traces;


未選定行
當會話斷開或者使用下面的命令可以禁止跟蹤
SQL> execute dbms_monitor.session_trace_disable(21,20);
client_id_trace_enable函式
在多層架構環境中,一個請求從一個終端客戶端透過中間層分發到不同的資料庫會話.這意味著終端客戶端與資料庫會話的聯絡不是靜態的.在oracle10g之前沒有方法可以對一個客戶端跨不同資料庫會話進行跟蹤.端到端的跟蹤可以透過一個新的屬性client_identifier來標識它是唯一標識一個特定的終端客戶端.這個客戶端識別符號對應於v$session檢視中的client_identifier列.透過系統上下文也可以檢視.
語法如下:
啟用跟蹤
execute dbms_monitor.client_id_trace_enable ( client_id =>'client x',
waits => (TRUE|FALSE), binds => (TRUE|FALSE) );
禁止跟蹤
execute dbms_monitor.client_id_trace_disable ( client_id =>'client x');
其中waits的預設值是true,binds的預設值是false.
例如:
可以使用dbms_session.set_identifier函式來設定client_identifier
sys@JINGYONG> exec dbms_session.set_identifier('JY');


PL/SQL 過程已成功完成。


sys@JINGYONG> select sys_context('USERENV','CLIENT_IDENTIFIER') client_id from dual;


JY




sys@JINGYONG> select client_identifier client_id from v$session where sid=30;


JY


sys@JINGYONG> exec dbms_monitor.client_id_trace_enable('JY');


PL/SQL 過程已成功完成。
使用查詢來檢查跟蹤是否已經啟用
sys@JINGYONG> select primary_id,qualifier_id1,waits,binds
  2  from dba_enabled_traces where trace_type='CLIENT_ID';
PRIMARY_ID         QUALIFIER_ID1         WAITS    BINDS
----------------   --------------        -------- --------
JY                                       TRUE     FALSE
這個跟蹤在資料庫重啟之後還是有效的你得呼叫函式來禁用.
sys@JINGYONG> exec dbms_monitor.client_id_trace_disable('JY');


PL/SQL 過程已成功完成。
檢查生成的跟檔案
Trace file /u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_2529.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/11.2.0/db
System name: Linux
Node name: jingyong
Release: 2.6.18-164.el5
Version: #1 SMP Tue Aug 18 15:51:54 EDT 2009
Machine: i686
Instance name: jingyong
Redo thread mounted by this instance: 1
Oracle process number: 21
Unix process pid: 2529, image: oracle@jingyong




*** 2013-11-11 11:31:56.737
*** SESSION ID:(30.32) 2013-11-11 11:31:56.737
*** CLIENT ID:() 2013-11-11 11:31:56.737
*** SERVICE NAME:(jingyong) 2013-11-11 11:31:56.737
*** MODULE NAME:(sqlplus.exe) 2013-11-11 11:31:56.737
*** ACTION NAME:() 2013-11-11 11:31:56.737


PARSING IN CURSOR #8 len=96 dep=0 uid=0 oct=3 lid=0 tim=1384150635839986 hv=3018843459 ad='275fa5ec' sqlid='3gg23wktyzta3'
select primary_id,qualifier_id1,waits,binds
from dba_enabled_traces where trace_type='CLIENT_ID'
END OF STMT
在啟用跟蹤後執行的語句被記錄到了跟蹤檔案中.
sys@JINGYONG> select primary_id,qualifier_id1,waits,binds
2 from dba_enabled_traces where trace_type='CLIENT_ID';
未選定行
當你使用MTS時有時將會生成多個跟蹤檔案,不同的共享伺服器程式能執行sql語句這就將會生成多個跟蹤檔案.對於RAC
環境也是一樣.
serv_mod_act_trace_enable函式
端到端跟蹤對於使用MODULE,ACTION,SERVICES標識的應用程式能夠進行有效地管理和計算其工作量.service名,module和
action名提供了一種方法來識別一個應用程式中重要的事務.你可以使用serv_act_trace_enable過程來對由一組service,module和action名指定的全域性會話啟用sql跟蹤,除非指定了特定的例項名.對於一個會話的service名,module名與v$session檢視中的service_name和module列相對應.
語句如下:
啟用跟蹤
execute dbms_monitor.serv_mod_act_trace_enable('Service S', 'Module M', 'Action A',
waits => (TRUE|FALSE), binds => (TRUE|FALSE), instance_name => 'ORCL' );
禁止跟蹤
execute dbms_monitor.serv_mod_act_trace_disable('Service S', 'Module M', 'Action A');
其中waits的預設值是true,binds的預設值是false,instance_name的預設值是null.
例如想要對在資料庫伺服器使用SQL*Plus執行的所有sql語句進行跟蹤可以執行以下命令:
sys@JINGYONG> select module,service_name from v$session where sid=25;
MODULE                                      SERVICE_NAME
-----------------------------               ---------------------
sqlplus@jingyong (TNS V1-V3)                SYS$USERS


sys@JINGYONG> exec dbms_monitor.serv_mod_act_trace_enable('SYS$USERS','sqlplus@j
ingyong (TNS V1-V3)');


PL/SQL 過程已成功完成。


sys@JINGYONG> select primary_id,qualifier_id1,waits,binds
  2  from dba_enabled_traces
  3  where trace_type='SERVICE_MODULE';
PRIMARY_ID       QUALIFIER_ID1                WAITS    BINDS
---------------  -------------------          -------- --------
SYS$USERS        sqlplus@jingyong (TNS V1-V3) TRUE     FALSE


啟用跟蹤後我們執行一個測試語句
SQL> select 'x' from dual;


'
-
x
檢查生成的跟蹤檔名
SQL> select * from v$diag_info where name='Default Trace File';


   INST_ID NAME
---------- ----------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
         1 Default Trace File
/u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_4411.trc
檢視跟蹤內容如下
trace file /u01/app/oracle/diag/rdbms/jingyong/jingyong/trace/jingyong_ora_4411.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /u01/app/oracle/product/11.2.0/db
System name: Linux
Node name: jingyong
Release: 2.6.18-164.el5
Version: #1 SMP Tue Aug 18 15:51:54 EDT 2009
Machine: i686
Instance name: jingyong
Redo thread mounted by this instance: 1
Oracle process number: 24
Unix process pid: 4411, image: oracle@jingyong (TNS V1-V3)




*** 2013-11-11 14:34:00.971
*** SESSION ID:(25.412) 2013-11-11 14:34:00.972
*** CLIENT ID:() 2013-11-11 14:34:00.972
*** SERVICE NAME:(SYS$USERS) 2013-11-11 14:34:00.972
*** MODULE NAME:(sqlplus@jingyong (TNS V1-V3)) 2013-11-11 14:34:00.972
*** ACTION NAME:() 2013-11-11 14:34:00.972
 
WAIT #1: nam='SQL*Net message from client' ela= 152965072 driver id=1650815232 #bytes=1 p3=0 obj#=-1 tim=1384151640937525
CLOSE #1:c=1000,e=521,dep=0,type=0,tim=1384151640973430
=====================
PARSING IN CURSOR #1 len=20 dep=0 uid=0 oct=3 lid=0 tim=1384151640977682 hv=2740543121 ad='275fa9e4' sqlid='04vfkrajpkrnj'
select 'x' from dual
我們執行的測試語句被記錄了在跟蹤檔案中.
sys@JINGYONG> exec dbms_monitor.serv_mod_act_trace_disable('SYS$USERS','sqlplus@
jingyong (TNS V1-V3)');


PL/SQL 過程已成功完成。


sys@JINGYONG> select primary_id,qualifier_id1,waits,binds
  2  from dba_enabled_traces
  3  where trace_type='SERVICE_MODULE';


未選定行
使用trcsess來合併跟蹤檔案
從某些跟蹤操作中會得到多個跟蹤檔案.在oracle10g之前的版本中你得手動將這些跟蹤檔案合併到一起.現在可以使用trcsess工具來幫你合併這些跟蹤檔案.
語句如下:
trcsess [output=] [session=] [clientid=] [service=] [action=] [module=] 
output= output destination default being standard output.
 session= session to be traced.
 Session id is a combination of session Index & session serial number e.g. 8.13.
clientid= clientid to be traced.
service= service to be traced.
action= action to be traced.
module= module to be traced.
Space separated list of trace files with wild card '*' suppor
ted.
[oracle@jingyong trace]$ trcsess output=jingyong_ora_88888888.trc service=jingyong jingyong_ora_2529.trc jingyong_ora_4411.trc
[oracle@jingyong trace]$ ls -lrt jingyong_ora_88888888.trc
-rw-r--r-- 1 oracle oinstall 16219 Nov 11 14:59 jingyong_ora_88888888.trc
dbms_application_info
可以在過程開始一個事務之前使用dbms_application_info.set*過程來註冊一個事務名/客戶端資訊/模組名為以後檢查效能來使用.你應該對以後可能消耗你最多系統資源的活動事務進行指定.
dbms_application_info包有以下過程
SET_CLIENT_INFO ( client_info IN VARCHAR2 );
SET_ACTION ( action_name IN VARCHAR2 );
SET_MODULE ( module_name IN VARCHAR2, action_name IN VARCHAR2 );
例如
sys@JINGYONG> create table emp as select * from scott.emp where 1=0;


表已建立。


sys@JINGYONG> exec dbms_application_info.set_module(module_name=>'add_emp',actio
n_name=>'insert into emp');


PL/SQL 過程已成功完成。


sys@JINGYONG> insert into emp select * from scott.emp;


已建立14行。


sys@JINGYONG> commit;


提交完成。


sys@JINGYONG> exec dbms_application_info.set_module(null,null);


PL/SQL 過程已成功完成。
下面查詢v$sqlarea檢視使用module和action列進行查詢
sys@JINGYONG> select sql_text from v$sqlarea where module='add_emp';


insert into emp select * from scott.emp


sys@JINGYONG> select sql_text from v$sqlarea where action='insert into emp';


insert into emp select * from scott.emp


dbms_session包:只能跟蹤當前會話,不能指定會話。
跟蹤當前會話:
SQL> exec dbms_session.set_sql_trace(true);
SQL> 執行sql
SQL> exec dbms_session.set_sql_trace(false);
dbms_session.set_sql_trace相當於alter session set sql_trace,從生成的trace檔案可以明確地看alter session set sql_trace語句。使用dbms_session.session_trace_enable過程,不僅可以看到等待事件資訊還可以看到繫結變數資訊,相當於alter session set events '10046 trace name context forever, level 12';語句,從生成的trace檔案可以確認。
SQL> exec dbms_session.session_trace_enable(waits=>true,binds=>true);
SQL> 執行sql
SQL> exec dbms_session.session_trace_enable();  
dbms_support包:不應該使用這種方法,非官方支援。
系統預設沒有安裝這個包,可以手動執行$ORACLE_HOME/rdbms/admin/bmssupp.sql指令碼來建立該包。
SQL> desc dbms_support
FUNCTION MYSID RETURNS NUMBER
FUNCTION PACKAGE_VERSION RETURNS VARCHAR2
PROCEDURE START_TRACE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 WAITS                          BOOLEAN                 IN     DEFAULT
 BINDS                          BOOLEAN                 IN     DEFAULT
PROCEDURE START_TRACE_IN_SESSION
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL                         NUMBER                  IN
 WAITS                          BOOLEAN                 IN     DEFAULT
 BINDS                          BOOLEAN                 IN     DEFAULT
PROCEDURE STOP_TRACE
PROCEDURE STOP_TRACE_IN_SESSION
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL                         NUMBER                  IN
SQL> select dbms_support.package_version from dual;
PACKAGE_VERSION
--------------------------------------------------------------------------------
DBMS_SUPPORT Version 1.0 (17-Aug-1998) - Requires Oracle 7.2 - 8.0.5
SQL> select dbms_support.mysid from dual;
     MYSID
----------
       292
SQL> select * from v$mystat where rownum=1;
       SID STATISTIC#      VALUE
---------- ---------- ----------
       292          0          1
跟蹤當前會話:
SQL> exec dbms_support.start_trace
SQL> 執行sql
SQL> exec dbms_support.stop_trace
跟蹤其他會話:等待事件+繫結變數,相當於level 12的10046事件。
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_support.start_trace_in_session(sid=>sid,serial=>serial#,waits=>true,binds=>true);
SQL> exec dbms_support.stop_trace_in_session(sid=>sid,serial=>serial#);
dbms_system包:9i時使用
跟蹤其他會話:
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
SQL> exec dbms_system.set_sql_trace_in_session(sid,serial#,false);
注意:dbms_system這個包在10gR2官方文件上面沒有找到這個包的說明,但資料庫中有。
SQL> exec sys.dbms_system.SET_BOOL_PARAM_IN_SESSION(sid, serial#, 'sql_trace', TRUE);
SQL> exec sys.dbms_system.SET_BOOL_PARAM_IN_SESSION(sid, serial#, 'sql_trace', FALSE);
使用dbms_system.set_ev設定10046事件
SQL> select sid,serial#,username from v$session where ...;
SQL> exec dbms_system.set_ev(sid,serial#,10046,12,'');
SQL> exec dbms_system.set_ev(sid,serial#,10046,0,'');
最後一個引數只有為''時,才會生成trace檔案,否則不報錯,但沒有trace檔案生成。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-777381/,如需轉載,請註明出處,否則將追究法律責任。

相關文章