OracleSQLTrace几种不同方法示例(一)

2014-11-24 15:37:55 · 作者: · 浏览: 4

示例相关:SQL

tname.sql

select value from v$diag_info

where name = 'Default Trace File';

sinfo.sql

select sid,serial# from v$session where sid=&sid;

spinfo.sql

select s.sid,s.serial# from v$process p,v$session s

where p.addr=s.paddr and p.spid=&pid;

sid.sql

select sid from v$mystat where rownum<2 ;

已知session ID 对其进行跟踪

dbms_monitor

用法:

execute dbms_monitor.session_trace_enable(session_id=>&sid, serial_num=>&serial,

waits=>true,binds=>false);

关闭:

execute dbms_monitor.session_trace_disable(session_id=>&sid,serial_num=>&serial);

DBMS_MONITOR.SESSION_TRACE_ENABLE(

session_id IN BINARY_INTEGER DEFAULT NULL,

serial_num IN BINARY_INTEGER DEFAULT NULL,

waits IN BOOLEAN DEFAULT TRUE,

binds IN BOOLEAN DEFAULT FALSE,

plan_stat IN VARCHAR2 DEFAULT NULL);

示例:

dexter@DEX11g> @sid
 
       SID
----------
        36
 
sys@DEX11g> @sinfo
Enter value for sid: 36
old   1: select sid,serial#from v$session where sid=&sid
new   1: select sid,serial#from v$session where sid=36
 
       SID    SERIAL#
---------- ----------
        36        415
 

sys@DEX11g> executedbms_monitor.session_trace_enable(session_id=>&sid,serial_num=>&serial,waits=>true,binds=>false);
Enter value for sid: 36
Enter value for serial: 415
 
PL/SQL procedure successfully completed.
 
dexter@DEX11g> select count(*) from t ;
 
  COUNT(*)
----------
     72523
 
关闭对session的跟踪
 
sys@DEX11g> executedbms_monitor.session_trace_disable(session_id=>&sid,serial_num=>&serial);
Enter value for sid: 36
Enter value for serial: 415
 
PL/SQL procedure successfully completed.

dbms_system

用法:

exec dbms_system.set_ev(&sid,&serial,&event,&level,'&name');

若要关闭,只需要将level设置为0即可

dbms_syste.set_ev(&sid,&serial,&event,0, '&name') ;

这个方法比较通用

PROCEDURE SET_EV

Argument Name Type In/Out Default

----------------------------------------------------- ------ --------

session_id BINARY_INTEGER IN

seriv# BINARY_INTEGER IN

event BINARY_INTEGER IN

level BINARY_INTEGER IN

name VARCHAR2 IN

示例

dexter@DEX11g> @sid
 
       SID
----------
        36
 
sys@DEX11g> @sinfo 36
Enter value for sid: 36
old   1: select sid,serial#from v$session where sid=&sid
new   1: select sid,serial#from v$session where sid=36
 
       SID    SERIAL#
---------- ----------
        36        421
 
sys@DEX11g> execdbms_system.set_ev(&sid,&serial,&event,&level,'&name') ;
Enter value for sid: 36
Enter value for serial: 421
Enter value for event: 10046
Enter value for level: 12
Enter value for name:
 
PL/SQL procedure successfully completed.

找到相应的trace文件。注意

select value from v$diag_info

where name = 'Default Trace File';

得到的trace文件的path只是针对本session的。

比如这个例子中,使用sys用户对sid为36的session进行跟踪,那么trace文件的位置可以在sid为36的session也就是dexter用户执行

select value from v$diag_info

where name = 'Default Trace File';

才可以得到相应的trace文件。

dexter@DEX11g> select count(*) from t ;

COUNT(*)

----------

72523

关闭(设置level=0即可):

sys@DEX11g> execdbms_system.set_ev(&sid,&serial,&event,&level,'&name') ;

Enter value for sid: 36

Enter value for serial: 421

Enter value for event: 10046

Enter value for level: 0

Enter value for name:

PL/SQL procedure successfully completed.

已知os pid 对其进行跟踪

oradebug

用法

oradebug event 10046 trace context forever , level 12 ;

oradebug event 10046 trace context off ;

示例

oradebug setospid &pid

oradebug event 10046 trace context forever , level 12 ;

oradebug event 10046 trace cont