Chinaunix

标题: How to check events in system and session? [打印本页]

作者: miloluo    时间: 2011-12-23 03:17
标题: How to check events in system and session?
出现了一个问题,当想确认是否有人开启了 系统的trace 事件。

可以通过如下方法去确认,我们可以通过如下实验去看:

1. 在没有开任何事件时,做一次oradebug
  1. SYS@liuzhou> oradebug setmypid
  2. Statement processed.
  3. SYS@liuzhou>
  4. SYS@liuzhou> oradebug dump events 4
  5. Statement processed.


2. 查看udump的trace文件
  1. SYS@liuzhou> oradebug tracefile_name
  2. /u01/app/oracle/admin/liuzhou/udump/liuzhou_ora_3232.trc

  3. [oracle@milo ~]$ tail /u01/app/oracle/admin/liuzhou/udump/liuzhou_ora_3232.trc
  4. *** 2011-10-26 06:15:33.543
  5. Dump event group for level SYSTEM
  6. TC Addr Evt#(b10) Action TR Addr Arm Life


3. 开启 系统 10046 事件
  1. SYS@liuzhou> alter system set events '10046 trace name context forever, level 4';

  2. System altered.


4. 再做一次oradebug
  1. SYS@liuzhou> oradebug setmypid
  2. Statement processed.
  3. SYS@liuzhou>
  4. SYS@liuzhou> oradebug dump events 4
  5. Statement processed.


5. 查看生成到的trace文件
  1. SYS@liuzhou> oradebug tracefile_name
  2. /u01/app/oracle/admin/liuzhou/udump/liuzhou_ora_3232.trc
  3. SYS@liuzhou>

6. 查看具体生成的trace文件内容
  1. [oracle@milo ~]$ tail /u01/app/oracle/admin/liuzhou/udump/liuzhou_ora_3232.trc
  2. *** 2011-10-26 06:17:01.698
  3. Dump event group for level SYSTEM
  4. TC Addr Evt#(b10) Action TR Addr Arm Life
  5. 36042A04 10046 1 36042a70 0 0
  6.         TR Name TR level TR address TR arm TR life TR type
  7.         CONTEXT 4 0 -1 2 952320028



需要注意的是:
a. 只有系统事件才会有记录。
b. "immediate trace"这种一次性的trace,也不会被记录。


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
dump Session event的过程:

  1. oradebug setospid 449
  2. oradebug dump events 1
  3. oradebug tracefile_name


trace文件里有如下信息:
  1. *** 2011-10-25 12:08:53.131
  2. Received ORADEBUG command 'dump events 1' from process Unix process pid: 13235, image:
  3. Dump event group for level SESSION
  4. TC Addr Evt#(b10) Action TR Addr Arm Life
  5. B7F900B0 10046 1 b7f9011c 0 0
  6.         TR Name TR level TR address TR arm TR life TR type
  7.         CONTEXT 10 0 -1 2 -1208418192
  8. Received ORADEBUG command 'tracefile_name' from process Unix process pid: 13235, image:




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
自己写了个脚本,去获取所有session的event状态,但是如果session多的话,可能会涉及到很多trace文件:


1. 获取当前的客户端连接进程,并生成获取每个session的脚本到get_sess_event.sql
  1. $ ps -ef | grep LOCAL= | grep -v grep | grep -i <instance_name> |awk 'BEGIN{print "spool sess_trc.txt\n" } {print "oradebug setospid " $2 "\n" "oradebug dump events 1 \n" "oradebug tracefile_name\n"}END{print "spool off"}' > get_sess_event.sql


2. 执行脚本,结果输出到sess_trc.txt
  1. $ sqlplus / as sysdba
  2. SQL> @get_sess_event.sql


3. 查看生成出来的trace文件:
  1. $ grep -E ".trc" sess_trc.txt | sort -u
  2. /opt/oracle/admin/myrac/udump/myrac1_ora_449.trc
  3. /opt/oracle/admin/myrac/udump/myrac1_ora_679.trc

在自己的环境测试过(RHEL 5.5), 其他平台没有测试。
希望能帮到各位。:)







欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2