在Oracle中做SQL跟踪,估计大部分都会用sqlplus中的autotrace或者设置10046跟踪。但是,如果是调试某个应用系统的话,特别是打开了连接池的系统,靠以上两种方法基本上就歇菜了。还是SQL Server的SQL Server Profiler好啊。最近在看冯大辉翻译的《Oracle性能诊断艺术》,发现一个很好的技巧,思路是建一个Logon,现摘录如下(稍作了一个修改):
01 | create role trace_10046_role; |
03 | CREATE OR REPLACE TRIGGER SYS.set_10046_trace_on_logon |
04 | AFTER LOGON ON DATABASE |
06 | if ( dbms_session.is_role_enabled("trace_10046_role") and user not in ("SYS","SYSTEM") ) then |
07 | EXECUTE IMMEDIATE "alter session set statistics_level=ALL"; |
08 | EXECUTE IMMEDIATE "alter session set max_dump_file_size=UNLIMITED"; |
09 | EXECUTE IMMEDIATE "alter session set tracefile_identifier="""||user||"_10046"""; |
10 | EXECUTE IMMEDIATE "alter session set events ""10046 trace name context forever, level 12"""; |
12 | END set_10046_trace_on_logon; |
启用和禁用对系统进行做10046跟踪SQL:
03 | SQL> grant trace_10046_role to cms_text; |
04 | SQL> select * from dba_ROLE_PRIVS where granted_role="TRACE_10046_ROLE"; |
06 | GRANTEE GRANTED_ROLE ADM DEF |
08 | SYS TRACE_10046_ROLE YES YES |
09 | CMS_TEXT TRACE_10046_ROLE NO YES |
11 | SQL> revoke trace_10046_role from cms_text; |
12 | SQL> select * from dba_ROLE_PRIVS where granted_role="TRACE_10046_ROLE"; |
14 | GRANTEE GRANTED_ROLE ADM DEF |
16 | SYS TRACE_10046_ROLE YES YES |
其实就是将 trace_10046_role grant/revoke 给相应的用户。当具有 trace_10046_role 角色的用户登录后在udump下就会出现相应的trc文件:
1 | [oracle@test-server udump]$ pwd |
2 | /u01/app/admin/ora8i/udump |
3 | [oracle@test-server udump]$ ls |
4 | ora8i_ora_8259_CMS_TEXT_10046.trc |
SQL语句创建Oracle Spatial的图层方法简介在Oracle中手工对任务进行分区的方法相关资讯 oracle
- [INS-32052] Oracle基目录和Oracle (07/22/2014 07:41:41)
- Oracle 4个大对象(lobs)数据类型 (02/03/2013 12:33:05)
- Oracle按时间段分组统计 (07/26/2012 10:36:48)
| - [Oracle] dbms_metadata.get_ddl的 (07/12/2013 07:37:30)
- Liferay Portal 配置使用Oracle和 (07/31/2012 20:07:18)
- Concurrent Request:Inactive (07/20/2012 07:44:05)
|
本文评论 查看全部评论 (0)