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;

相关推荐
Databend3 分钟前
CRC32 自包含退化现象分析
数据库
ITZHIHONH1 小时前
FastGPT源码解析 Agent知识库文本资料处理详解和代码分析
数据库·ai编程
小蒜学长2 小时前
基于Spring Boot的火灾报警系统的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
福赖2 小时前
《MySQL基础——C 语言链接》
c语言·数据库·mysql
KIDAKN2 小时前
Redis 分布式锁
数据库·redis·分布式
程序新视界3 小时前
如何为MySQL中的JSON字段设置索引
数据库·mysql
Ultipa3 小时前
查询语言的进化:SQL之后,为什么是GQL?数据世界正在改变
数据库·sql·图数据库·gql
LB21123 小时前
SQL隐式链接显式连接
大数据·数据库·sql
隔壁阿布都4 小时前
spring boot + mybatis 使用线程池异步修改数据库数据
数据库·spring boot·mybatis
GM_8286 小时前
【Go项目基建】GORM框架实现SQL校验拦截器(完整源码+详解)
sql·golang·拦截器·gorm·慢查询·持久层基建