如何跟踪某个session的SQL详解程序员
1 oracle自带的sql trace程序可以跟踪本地session
sys: alter system set sql_trace = true;对所有会话跟踪
schema: alter session set sql_trace = true; 对某个session 会话跟踪sql语句
11g可以通过 select * from v$DIAG_INFO;来获取当前trace文件的位置
10g可用:当前用户:
SELECT d.value|| / ||lower(rtrim(i.instance, chr(0)))|| _ora_ ||p.spid|| .trc trace_file_name
from ( select p.spid from v$mystat m,v$session s, v$process p
where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
( select t.instance from v$thread t,v$parameter 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;
如果是查询其他用户session的跟踪文件,则根据用户的sid和#serial使用如下查询:
SELECT d.value|| / ||lower(rtrim(i.instance, chr(0)))|| _ora_ ||p.spid|| .trc trace_file_name
from
( select p.spid from v$session s, v$process p
where s.sid=’’ and s. SERIAL#= and p.addr = s.paddr) p,
( select t.instance from v$thread t,v$parameter 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
用tkprof 来格式化跟踪文件输出
tkprof 输出内容包括 1 sql 语句 2统计信息 3explain table 执行计划
2 基于DBMS_MONITOR包来跟踪会话,这种情况一般是
通过该程序包可以跟踪从客户机到中间层、再到后端数据库的任何用户会话,从而可以较为容易的标识创建大量工作量的特定用户。
dbms_monitor.serv_mod_act_trace_enable(service_name= orcl1 ,module_name= salary_update ,action_name= insert_item );
dbms_monitor.serv_mod_act_trace_disable(service_name= orcl1 ,module_name= salary_update ,action_name= insert_item );
操作名:开发人员在其应用程序中使用DBMS_APPLICATION_INFO.SET_ACTION过程设置该值 trcsess提取跟踪文件,可以基于会话ID或者模块名称,具体参考trcsess帮助usage
这个很常用
3 DBMS_system包也可以跟踪系统中其他session的sql执行语句
dbms_system.set_sql_trace_in_session(sid,serial#,true);
dbms_system.set_sql_trace(true)跟踪本地session
4 使用10046事件来实现
运用10046进程sql跟踪
全局或者session范围
level 1
level 4 : 1+bind variable
level 8 : 1+wait events
level 12 : 1 +4+8
tkprof 的时候 4,8,12的信息被忽略
全局设定,修改initial文件
event= 10046 trace name context forever,level12
alter system set events
session设定
alter session set events= 10046 trace name context forever,level 8
alter session set events= 10046 trace name context off
以上4中session跟踪方法,通过dbms_monitor,和dbms_system可以用来跟踪其他指定session的sql,其他两个方法都是本地
session或者system级别的跟踪
7191.html
服务器部署程序员系统优化网站设置运维相关文章
- 2022-11-17:组合两个表。请写出sql语句,执行结果是{“headers“: [“first_name“, “last_name“, “city“, “
- Oracle查看SQL执行计划的方式详解程序员
- MySQL如何导入SQL文件(mysql怎么导入sql文件)
- 实现成功:使用SQL登录Oracle数据库(sql登录oracle)
- sql通过Oracle实现批量执行SQL语句(oracle批量执行)
- SQL与MySQL:开放式数据库创新(sql和mysql)
- 数据库操作在Linux系统中操作SQL数据库(linux下sql)
- Oracle 中优化SQL性能的终极指南(oracle中sql优化)
- Oracle 锁定 SQL:保护安全性(oracle锁sql)
- 如何用Oracle监视SQL语句?(oracle监视sql)
- SQL如何转换成MySQL,易学易用(sql转换成mysql)
- 如何使用MySQL查询并分析SQL计划(mysql查询sql计划)
- MySQL备份:如何使用SQL语句(mysql备份sql语句)
- MySQL备份:安全保护SQL文件(mysql备份sql文件)
- 如何在Linux上导入SQL文件:操作简单易学(linux导入sql文件)
- sql体验SQL Server:本周SQLServer之旅(sqlserver 本周)
- 性能报告Oracle季度SQL性能分析报告(oracle 季度sql)
- Oracle数据库如何写复杂SQL语句?(oracle复杂sql)
- 数据库如何使用MSSQL附加SQL数据库(mssql附加sql)
- 一步搞定!MySQL命令行快速导入SQL文件(mysql命令导入sql文件)
- 如何利用Oracle掌握SQL写作技巧(oracle写sql格式)
- MySQL操作如何使用SQL窗口进行数据查询和修改(mysql 中sql窗口)
- MySQL中如何筛选不为空的SQL语句(mysql中sql不为空)
- 如何用一条SQL更新MySQL数据(mysql一条sql更新)
- SQL取用Redis缓存技术实现数据提速(sql读取redis缓存)
- 如何合并两条 MySQL SQL 语句(mysql两条sql合并)
- Oracle SQL如何快速获取列号(oracle sql列号)