10046 event 知多少
2017年5月10日
10:08
1、在当前session级打开trace
适用于SQL语句可以在新的session创建后再运行。
在session级收集10046 trace:
alter session set tracefile_identifier='10046'; --为便于区分 tracefile,最好做这一步
alter session set timed_statistics = true;
alter session set statistics_level=all;
alter session set max_dump_file_size = unlimited;
alter session set events '10046 trace name context forever,level 12';
-- 执行需要被trace的SQL --
select * from dual;
exit;
如果不退出当前session, 可以用以下命令关闭trace:
alter session set events '10046 trace name context off';
注意,如果session没有被彻底地关闭并且跟踪被停止了,某些重要的trace信息的可能会丢失。
2、跟踪一个已经开始的进程
如果需要跟踪一个已经存在session,可以用 oradebug连接到session上,并发起10046 trace。
a. 首先,用某种方法找到需要被跟踪的session.
例如,在SQL*Plus里,找出目标session的OS的进程ID(spid):
select distinct sess.sid db_sid,
sess.serial# db_serial#,
process.pid db_process_id,
process.spid os_process_id,
sess.program
from v$process process, v$session sess
where sess.paddr = process.ADDR
and sess.sid = &sid;
注:SPID 是操作系统的进程标识符(os pid),PID 是Oracle的进程标识符(ora pid)。
dbms_system.set_ev跟踪该会话
dbms_system.set_ev( si =>135,
se =>137,
le=>12,
nm=> null )
为该会话关闭sql跟踪
dbms_system.set_ev( si =>135,
se =>137,
ev => 10046, --注意此处跟代开跟踪不一样
le=>0, --注意此处跟代开跟踪不一样
nm=> null )
b. 一旦找到OS PID,就可以用以下命令初始化跟踪:
假设需要被跟踪的OSPID是9834. 以sysdba的身份登录到SQL*Plus并执行下面的命令:
SQL> connect / as sysdba
SQL> oradebug setospid 7090
Oracle pid: 19, Unix process pid: 3050, image: oracle@Oracle11g (Q000)
SQL> 0radebug unlimit
o
SQL> oradebug event 10046 trace name context forever,level 12
SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/prod/prod/trace/prod_q000_3050.trc
SQL> oradebug event 10046 trace name context
跟踪过程完成以后,关闭oradebug跟踪:
SQL> oradebug event 10046 trace name context off
Note: 也可以通过oradebug使用 'setorapid'命令连接到一个session。
c、下面的例中, 使用PID(Oracle进程标识符)(而不是SPID), oradebug命令将被改为:
SQL> connect / as sysdba
SQL> oradebug setorapid 29
SQL> oradebug unlimit
SQL> oradebug event 10046 trace name context forever,level 12
SQL> oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/prod/prod/trace/prod_q000_3050.trc
SQL> oradebug event 10046 trace name context off
跟踪过程完成以后,关闭oradebug跟踪:
SQL> oradebug event 10046 trace name context off
dbms_monitor.session_trace_enable (cliend_id=>'', --只跟踪某种客户端标记的会话
Waits=> true,
Binds=>false)
dbms_monitor.session_trace_disable(cliend_id=>'') --关闭跟踪某种客户端标记的会话
转载于:https://www.cnblogs.com/iyoume2008/p/7160750.html