前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于oracle中session跟踪的总结(56天)

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

作者头像
jeanron100
发布2018-03-13 18:30:51
1K0
发布2018-03-13 18:30:51
举报

数据库中的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 后期补充。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2014-04-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 杨建荣的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档