时间:2021-07-01 10:21:17 帮助过:2人阅读
若跟踪本会话,执行 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
SQL 跟踪方法相关介绍
标签: