Oracle 启用 Sql 跟踪的方式

启用 SQL 跟踪的方式

一、跟踪自己的会话或者是别人的会话
1、跟踪自己当前会话

exec dbms_session.set_sql_trace(true/false);

2、跟踪其他的会话

exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false);

二、整个数据库系统开启跟踪
1、开启全库跟踪,不建议

alter system set events '10046 trace name context forever,level 1';

2、关闭跟踪

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

3、10046 跟踪级别

level 1:跟踪SQL语句,等于sql_trace=true,level 0 相当于 sql_trace=false

level 4:包括变量的详细信息

level 8:包括等待事件

level 12:包括绑定变量与等待事件

注意:在11g以及后续版本中已经不推荐使用

alter system set sql_trace=true;

alter system set sql_trace= false;

三、查看跟踪文件
1、查看跟踪文件位置(当前会话)

SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || 'ora' ||

P.SPID || '.trc' TRACE_FILE_NAME

FROM (SELECT P.SPID

FROM VMYSTAT M, VSESSION S, V$PROCESS P

WHERE M.STATISTIC# = 1

AND S.SID = M.SID

AND P.ADDR = S.PADDR) P,

(SELECT T.INSTANCE

FROM SYS.VTHREAD T, SYS.VPARAMETER V

WHERE V.NAME = 'thread'

AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I,

(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;

2、tkprof 格式化跟踪文件

tkprof trace_file_name out_file

其他启用方式

一、通过 oradebug 跟踪其他会话
查出spid和pid

select spid,pid from vprocess where addr in (select paddr from vsession where sid=(613));
选定pid

oradebug setospid 5024
取消对trace文件大小的限制

oradebug unlimit;
开启10046

oradebug event 10046 trace name context forever,level 12;
查看trace地址

oradebug tracefile_name;
格式化trace文件

tkprof zzh_ora_5024.trc zzh_ora_5024.txt
关闭10046(一定要关闭)

oradebug event 10046 trace name context off;

参数介绍:

count = OCI过程执行的次数

CPU = CPU时间,以秒为单位执行

Elapsed =以秒为单位的执行时间

Disk =从磁盘读取缓冲区的物理次数

Query =为一致性读取而获得的缓冲区数量

Current =在当前模式下获得的缓冲区数量(通常用于更新)

Rows =由取回或执行调用处理的行数

二、通过 dbms_system.set_ev 启用会话跟踪

使用 dbms_system.set_ev 系统包根据 SID,SERIAL# 跟踪其他会话事件,如10046等:

exec dbms_system.set_ev(sid,serial#,10046,trace_level,'');

根据 sid 查看会话跟踪文件位置:

SELECT pa.value || '/' || LOWER(SYS_CONTEXT('userenv', 'instance_name')) ||

'ora' || p.spid || '.trc' AS trace_file

FROM vsession s, vprocess p, v$parameter pa

WHERE pa.name = 'user_dump_dest'

AND s.paddr = p.addr

AND s.sid = 979;

相关推荐
2301_7944615710 分钟前
MVCC机制
数据库
kngines1 小时前
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】电商数据分析案例-9.1 业务场景与数据准备
数据库·postgresql·数据分析·数据质量评估
qq_366086221 小时前
sql serve 多表联合查询,根据一个表字段值动态改变查询条件
数据库·sql
odng1 小时前
Redis如何实现分布式锁
数据库·redis·分布式
长流小哥2 小时前
MySQL C API高效编程:C语言实现数据库操作的深入解析
数据库·c++·mysql
JhonKI2 小时前
【MySQL】存储引擎 - MEMORY详解
数据库·mysql
pqq的迷弟2 小时前
redis多路复用IO模型 以及 6.0引入的多线程模型
数据库·redis·php
larance3 小时前
Django rest_framework 信号机制生成并使用token
数据库·django·sqlite
didiplus3 小时前
MySQL 8.0 OCP(1Z0-908)英文题库(11-20)
数据库·mysql·adb·认证·ocp
等雨季4 小时前
电商双11美妆数据分析(二)
数据库