关于oracle中session跟踪的总结(56天)

数据库中的session在操作中可能会有各种各样的问题,比如一条sql语句执行失败,某一个应用在一些特定的场景下就会有一些性能问题等等,有时候在代码层去做一些debug来说肯定是不实际的,而且也不一定能够迅速的排查问题,对于session的监控显得尤为重要。可以灵活的开启和关闭,在数据库层面,session层面,甚至特定的应用层面都能够进行监控,今天和大家分享一下对于的session监控常用的一些方法。 1.dbms_system.set_sql_trace_in_session 可以对其他的session进行跟踪,功能比较全面,在早期版本中使用比较多。 2.dbms_system.set_ev 可以灵活的指定相应的诊断时间,可以对其他的session进行跟踪,功能比较全面。 3.dbms_monitor 在10g,11g及后期版本中大量使用。可以对其他的session进行跟踪,说是dbms_system的升级版本。 4.sql_trace 对当前session进行跟踪。 5.session level event 对当前的的session进行跟踪。 6.oradebug 可以绑定进程,session 对于oradebug,个人想专门开一个专题,自己好好琢磨一下,稍后分享,这篇文章会对以上的5种方法进行总结。 1.dbms_system.set_sql_trace_in_session 启用两个session session1: SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 9 session 2: 查到具体的session信息以后,开始进行跟踪。 SQL> exec dbms_system.set_sql_trace_in_session(254,9,true); PL/SQL procedure successfully completed. session1: 在session1中进行一些操作,以便跟踪。 SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 关闭跟踪。 SQL> exec dbms_system.set_sql_trace_in_session(254,9,false); PL/SQL procedure successfully completed. trace files: 得到具体的trace文件,可以使用tkprof进行格式化。 SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=9); SPID ------------------------ 2688 -rw-r----- 1 ora11g dba 128 Apr 27 01:43 TEST01_ora_2688.trm -rw-r----- 1 ora11g dba 3871 Apr 27 01:43 TEST01_ora_2688.trc 2.dbms_system.set_ev session1: 得到要监控的session的信息 SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 17 session2: 开启监控。 SQL> exec dbms_system.set_ev(254,17,100046,12,''); PL/SQL procedure successfully completed. --虽然定义的事件不正确,但是还是执行成功,不过不会有trace日志生成。 重新开启监控 SQL> exec dbms_system.set_ev(254,17,10046,12,''); PL/SQL procedure successfully completed. session1: 开始一些操作,以便跟踪。 SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 结束监控 SQL> exec dbms_system.set_ev(254,17,10046,0,''); PL/SQL procedure successfully completed. 查看trace日志 SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=17); SPID ------------------------ 3497 -rw-r----- 1 ora11g dba 100 Apr 27 04:10 TEST01_ora_3497.trm -rw-r----- 1 ora11g dba 3294 Apr 27 04:10 TEST01_ora_3497.trc 3.dbms_monitor session1: SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 7 session2: 开启监控 SQL> exec dbms_monitor.session_trace_enable(254,7); PL/SQL procedure successfully completed. session1: SQL> select count(*)from cat; COUNT(*) ---------- 2 session2: 结束监控。 SQL> exec dbms_monitor.session_trace_disable(254,7); PL/SQL procedure successfully completed. trace files: SQL> select process,paddr,sid from v$session where sid=254; PROCESS PADDR SID ------------------------ ---------------- ---------- 2560 000000007278E200 254 查看v$process得到spid SPID PID USERNAME ------------------------ ---------- --------------- 2561 27 ora11g -rw-r----- 1 ora11g dba 454 Apr 27 01:35 TEST01_ora_2561.trm -rw-r----- 1 ora11g dba 29887 Apr 27 01:35 TEST01_ora_2561.trc 4.sql_trace 只针对当前session SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 13 开启sql跟踪 SQL> alter session set sql_trace=true; Session altered. SQL> select count(*)from cat; COUNT(*) ---------- 2 关闭sql跟踪 SQL> alter session set sql_trace=false; Session altered. trace files: SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=13); SPID ------------------------ 2780 -rw-r----- 1 ora11g dba 121 Apr 27 01:52 TEST01_ora_2780.trm -rw-r----- 1 ora11g dba 3594 Apr 27 01:52 TEST01_ora_2780.trc 5.session level event 开启诊断事件 10046,当前session中查看trace 日志 SQL> select sid from v$mystat where rownum<2; SID ---------- 254 SQL> select sid,serial# from v$session where sid=254; SID SERIAL# ---------- ---------- 254 11 开启跟踪 SQL> alter session set events '10046 trace name context forever,level 12'; Session altered. SQL> select count(*)from cat; COUNT(*) ---------- 2 结束跟踪 SQL> alter session set events '10046 trace name context off'; Session altered. trace files: SQL> select spid from v$process where addr=(select paddr from v$session where sid=254 and serial#=11); SPID ------------------------ 2713 -rw-r----- 1 ora11g dba 134 Apr 27 01:50 TEST01_ora_2713.trm -rw-r----- 1 ora11g dba 4087 Apr 27 01:50 TEST01_ora_2713.trc 6.oradebug 后期补充。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-04-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小狼的世界

使用kubectl创建部署

创建部署之后,可以看到容器已经运行了,但是默认情况下,容器只能内部互相访问,如果需要对外提供服务,有以下几种方式:

710
来自专栏乐沙弥的世界

SYSAUX表空间管理及恢复

SYSAUX表空间是在10g之后引入的一个新的表空间,主要用于减轻对SYSTEM表空间的压力而作为SYSTEM表空间的辅助表空间。

492
来自专栏Pythonista

mysql 版本bug

ERROR 1055 (42000): Expression #1 of SELECT list is not in GROUP BY clause and c...

532
来自专栏乐沙弥的世界

使用FREDATED引擎实现跨实例访问

    跨数据库服务器,跨实例访问是比较常见的一种访问方式,在Oracle中可以通过DB LINK的方式来实现。对于MySQL而言,有一个FEDERATED存储...

621
来自专栏个人随笔

MySQL 事物

事务是数据库处理操作,其中执行就好像它是一个单一的一组有序的工作单元。换言之,事务将永远不会是完全的,除非在组内每个单独的操作是成功的。如果事务中的任何操作失败...

3258
来自专栏杨建荣的学习笔记

Data Guard跳归档恢复的实践(r9笔记第92天)

自前些天写了一个脚本通过shell脚本得到数据库的基本信息(一)(r9笔记第89天),今天特意测试了一下,没想到一下子发现了一个大问题。有一套一主两备的10gR...

3415
来自专栏乐沙弥的世界

mysqldump 快速搭建特定库主从架构(GTID)

相关知识点参考 基于mysqldump搭建gtid主从 MySQL GTID 错误处理汇总 配置MySQL GTID 主从复制 使用mysqld...

690
来自专栏高性能服务器开发

(二) 服务器端的程序的编译与部署

这篇我们来介绍下TeamTalk服务器端的编译与部署,部署文档在auto_setup下,这里我们只介绍下服务器程序的编译与部署,不包括管理后台的部署,其部署方法...

2707
来自专栏乐沙弥的世界

启用用户进程跟踪

仅仅需要标识该会话并为该会话启用跟踪(专用模式为一对一模式,即一个用户进程对应一个服务器进程)

632
来自专栏tiane12

记一次由内存不足引起的MYSQL停止故障

1092

扫描关注云+社区