ORACLE 10gR2 使用DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION和SET_EV设置其他用户的sql_tracet和10046事件时,不能产生trace文件.整个过程没有报任何错误.使用alter session set events可以产生trace文件,在ORACLE 9i实验可以产生trace文件.
oracle 版本信息如下:
SQL> SELECT * FROM v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
既然不能用,又找出原因,使用下面的方法和设置sql_trace,10046
1.通过ORADEBUG设置sql_trace,10046事件
设置oradebug
oradebug setospid spid –spid:系统进程号
设置10046事件
oradebug event 10046 trace name context forever,level 12
结束10046事件
oradebug event 10046 trace name context off
取得的trace name
oradebug tracefile_name
oradebug的使用说明可以通过oradebug help获得
2.通过10g提供的新包DBMS_MONITOR设置sql_trace,10046事件
使用DBMS_MONITOR设置sql_trace,10046事件主要是调用SESSION_TRACE_DISABLE和SESSION_TRACE_ENABLE参数说明如下:
PROCEDURE : SESSION_TRACE_DISABLE
Argument Name Type In/Out Default?
------------------ --------------------- ----- -------
SESSION_ID BINARY_INTEGER IN DEFAULT
SERIAL_NUM BINARY_INTEGER IN DEFAULT
PROCEDURE: SESSION_TRACE_ENABLE
Argument Name Type In/Out Default?
--------------------- ------------------------ - ----- --------
SESSION_ID BINARY_INTEGER IN DEFAULT
SERIAL_NUM BINARY_INTEGER IN DEFAULT
WAITS BOOLEAN IN DEFAULT
BINDS BOOLEAN IN DEFAULT
SESSION_ID, SERIAL_NUM可以从v$session中查出
如:
SELECT s.sid, s.serial#, s.username, p.spid
FROM v$session s, v$process p
WHERE s.paddr = p.addr
AND sid = &sid
WAITS, BINDS指定是否记录等待事件,绑定变量
如:
EXEC DBMS_MONITOR.SESSION_TRACE_ENABLE(123,123,TRUE,TRUE)
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7419833/viewspace-608902/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7419833/viewspace-608902/