关于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 条评论
登录 后参与评论

相关文章

来自专栏电光石火

PHP从数据库提取并显示数据的典型代码

PHP从数据库提取并显示数据的典型代码如下: if ($res=mysql_query($sql)) { //数据库查询执行成功 ...

1838
来自专栏源哥的专栏

如何对表操作进行监控

我们在跟踪定位一些系统问题的时候,经常需要知道哪些地方对一个表进行了操作,查询代码很麻烦,其实有一个简单的方法,就是跟踪表, 如下语句,就可以给表t_table...

762
来自专栏WindCoder

通过Mysql数据库批量修改WordPress的URL地址

更换个域名,文章的地址有时不会跟着改变,之前遇到过一次,今天又遇到了,就暂且记录一个以备日后使用,由于网上资源很多,就不在写明原创作者了O(∩_∩)O~(主要是...

1542
来自专栏黑白安全

MSSQL手工注入总结

之前搞mssql数据库的注入都是直接跑工具,但是总是有些注入点工具一扫就崩,关键时候还是要手工注入,因此总结学习mssql手工注入,写此文留作笔记。本次主要总结...

1632
来自专栏有困难要上,没有困难创造困难也要上!

Oracle12c创建用户

1452
来自专栏Android学习之路

MySql命令集锦

19813
来自专栏Rgc

mysql数据库优化(四)-项目实战

在flask项目中,防止随着时间的流逝,数据库数据越来越多,导致接口访问数据库速度变慢。所以自己填充数据进行测试及 mysql优化

833
来自专栏nummy

python中MySQLdb模块用法实例

MySQLdb提供了connect方法用来和数据库建立连接,接收数个参数,返回连接对象:

611
来自专栏c#开发者

Oracle常用数据字典表

Oracle常用数据字典表      查看当前用户的缺省表空间   SQL>select username,default_tablespace ...

2766
来自专栏禅林阆苑

Sphinx&coreseek实现中文分词索引

众所周知,mysql等数据库的LIKE模糊搜索不支持索引,因此查询效率极低,需要结合第三方索引引擎程序(索引程序)来提高查询性能。

1123

扫码关注云+社区