很多時候,我們在數據庫中設置了event,如何確認設置的event生效或者如何確認你的庫中設置了什麼event.下面的文章測試了在11g中比較方便的方法
數據庫版本
SQL>
select
*
from
v$version;
BANNER
--------------------------------------------------------------------------------
Oracle
Database
11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL
Release 11.2.0.3.0 - Production
CORE
11.2.0.3.0 Production
TNS
for
Solaris: Version 11.2.0.3.0 - Production
NLSRTL
Version 11.2.0.3.0 - Production
設置測試event
SQL>
alter
session
set
events
'10510
trace name context forever,level 1'
;
Session
altered.
SQL>
alter
session
set
events
2
'10046
trace name context forever,level 4'
;
Session
altered.
SQL>
alter
system
set
events
'60025
trace name context forever'
;
System
altered.
SQL>
alter
system
set
events
'10513
trace name context forever,level 2'
;
System
altered.
測試spfile參數中是否有event
SQL>
create
pfile=
'/tmp/pfile'
from
spfile;
File
created.
solaris*orcl-/home/oracle$
grep -i event /tmp/pfile
--無記錄
SQL>
show parameter event;
NAME
TYPE VALUE
------------------------------------
----------- -----------------
event
string
xml_db_events
string enable
查詢會話event
--dbms_system實現
SQL>
set
serveroutput
on
size
1000000
SQL>
declare
2
event_level number;
3
begin
4
for
i
in
1..100000 loop
5
sys.dbms_system.read_ev(i,event_level);
6
if (event_level > 0)
then
7
dbms_output.put_line(
'Event
'
||to_char(i)||
'
set at level '
||
8
to_char(event_level));
9
end
if;
10
end
loop;
11
end
;
12
/
Event
10510
set
at
level
1
Event
10513
set
at
level
2
Event
60025
set
at
level
1
PL/SQL
procedure
successfully completed.
--oradebug實現
SQL>
oradebug SETMYPID
Statement
processed.
SQL>
oradebug eventdump session
10510
trace
name
context forever,
level
1
10513
trace
name
context forever,
level
2
60025
trace
name
context forever
sql_trace
level
=4
測試證明使用dbms_system可以捕獲到event,oradebug可以捕獲到本身會話,還可以通過setospid/setorapid來跟蹤其他會話的event設置情況.event
10046對應的本質是sql_trace所以使用dbms_system不能捕獲到10046
原文地址:http://www.xifenfei.com/2012/10/%E5%A6%82%E4%BD%95%E6%9F%A5%E8%AF%A2%E4%BC%9A%E8%AF%9D-event.html