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;

相关推荐
小马同学-20 分钟前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang21 分钟前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
geovindu1 小时前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
IT大白鼠2 小时前
图数据库系列 · 第 02 篇——架构拆解:原生图存储到因果集群
数据库·架构·nosql
EatFan2 小时前
从“框架混战“到“运行时收敛“:2026 年 AI Agent 开发框架的三条路线之争
java·数据库·人工智能·多智能体·ai agent·mcp·agent 框架
小蒜学长2 小时前
基于SpringBoot的佳新超市管理系统设计与实现系统(代码+数据库+LW)
java·数据库·spring boot·后端·佳新超市管理系统
jinyishu_3 小时前
向量数据库入门:记录结构、索引、检索与选型
数据库
写后端的胖头鱼7 小时前
【高频面试题】FullText 全文索引(MySQL)
数据库·mysql·索引·全文索引
路远的数据库笔记7 小时前
SQL Server迁移国产数据库怎么做?九套口岸库零停机割接实战
数据库·经验分享·sqlserver·dba
樱花落木兰7 小时前
分布式登录实战:Session 会话共享改造,Redis 存储用户登录状态
java·javascript·数据库·redis·分布式·缓存