10046 事件学习

一、作用

sql执行过程中所有动作和等待的追踪。

二、等级

level:12 包含常用的分析信息:基本信息+绑定变量+等待事件;

level:1 基本信息;

level:4 基本信息+绑定变量

level:8 基本信息+绑定变量+等待事件

level:16 、32、64不常用。

三、普通使用方法

alter session set tracefile_identifier='10046';

alter session set max_dump_file_size=UNLIMITED;

alter session set timed_statistics=true;

--开启

alter session set events '10046 trace name context forever,level 12';

--执行sql

select * from zxb.text;

--关闭

alter session set events '10046 trace name context off';

select value from v$diag_info where name like 'Default Trace File%';

可以使用tkprof 解析格式化(整形)

四、根据process ID 取10046

1、取得process id

select p.pid,p.spid,s.sid from v$process p,v$session s where

s.paddr=p.addr

and s.sid=&session_id;

2、oradebug

conn / as sysdba

oradebug setospid

oradebug unlimit

oradebug event 10046 trace name context forever,level 12;

--一段时间后

oradebug event 10046 trace name context off;

这种模式取得的trc文件,建议读源码,不要用tkprof

五、特定处理的10046 trace

1、data pump 的10046

11G:

alter system set events 'sql_trace {process:pname= dw | pname=dm} level =12';

alter system set events 'sql_trace {process:pname= dw | pname=dm} off';

12C:

alter system set events 'sql_trace {process:pname = dw | pname=dm} level =12';

alter system set events 'sql_trace {process:pname=dw | pname=dm} off';

六、imp、exp,(同样也适合其他操作的追踪)

1、exp zxb/oracle

2、找到系统进程号,即:spid

3、conn /as sysdba

oradebug setospid 27778

oradebug event 10046 trace name context forever,level 12;

4、用之前的进程开始导出

5、关闭

oradebug event 10046 trace name context off;

七、触发器的方式(同样也适合其他操作的追踪)

conn / as sysdba

create or replace trigger sys.set_trace

after logon on database

when (sys_context('userenv','module') like 'sqlldr')

begin

execute immediate 'alter session set tracefile_identifier='||'SQLLDR';

execute immediate 'alter session set max_dump_file_size=unlimited';

execute immediate 'alter session set events "10046 trace name context forever,level 12"';

execute immediate 'alter session set events "10053 trace name context forever,level 1"';

end set_trace;

/

---sys_context('userenv','module')的获取,在v$session 中的module字段。

八、dblink的获取方式

带有dblink的语句,oracle会自动将其划分成两部分的sql,一部分在本地执行的sql,一部分在远端的sql。

取10046trace 的时候也要两端去取。

方法:

1、建立空dblink

select sysdate from dual@dblinkname;

2、确认dblink的本端的process id

select p.pid,p.spid,s.sid from v$process p,v$session s where

s.paddr=p.addr

and s.sid=&session_id;

process_id=23780

3、确认dblink远端数据库的process_id(在远端数据库执行)

select p.pid,p.spid,s.sid from v$process p,v$session s where

s.paddr=p.addr

and s.process='23780';

4、根据步骤3找到的process_id,进行oradebug方式追踪

conn / as sysdba

oradebug setospid

oradebug unlimit

oradebug event 10046 trace name context forever,level 12;

--一段时间后

oradebug event 10046 trace name context off;

5、在dblink本地执行语句

6、结束10046 trace

八、event++方式获取

sql_id的 10046 trace,只要该sql执行,就会打出trace

设定:

alter system set events 'sql_trace[sql:sql_id] level 12; --内存有效

alter system set events 'sql_trace[sql:sql_id] level 12 scope=spfile;

解除:

alter system set events 'sql_trace off';

alter system reset event scope=spfile;

九、10046 trace 解析

1、tkprof

2、直接读原文

tim时间,两行相减就是该行的执行时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值