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

时间:2022-05-04
本文章向大家介绍关于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 后期补充。