DBMS_MONITOR 使用
sql server提供了事件查看器,用来跟踪后台的sql执行。oracle如何跟踪呢,oralce提供了多种跟踪方
法,下面先介绍10g提供的新包。 DBMS_MONITOR,它提供了多种级别的trace.
一、语法:
· 模块级别跟踪:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name => 'EDGAR', module_name =>
'product_module', action_name => ‘INSERT_DATA’);
其中,module_name和action_name可以通过在程序中调用模块DBMS_APPLICATION_INFO来定义。也可以通
过dbms_monitor.all_modules和dbms_monitor.all_actions来设置对所有模块和动作进行跟踪。
·用户级别跟踪:
SQL> exec dbms_monitor.client_id_trace_enable(client_id => 'DEMO');
Client_id就是数据库中的用户名。
·会话级别跟踪:SQL> exec dbms_monitor.session_trace_enable(138);138就是会话ID.
二、修改生成跟踪的文件名称:
激活跟踪后,就可以用新工具trcsess来生成trace文件,先跳转到udump目录。C:> cd
<ORACLE_HOME>admin<SID>udump 可以生成不同级别的的trace文件(前提是该级别的trace已经激活)
· 模块级别:C:\oracle\product10.2.0\admine\orcl\udump> trcsess output="abc.trc"
service="EDGAR" module="product_module" action="INSERT_DATA"
· 用户级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
clientid="DEMO"
· 会级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
session=138.12432其中session必须是SID.SERIAL#的格式(可以从v$session中查到) 打开产生的trace
文件,会发现内面的内容实际上相当于10046和10053事件产生的trace文件内容的组合。
三、使用tkprof进行分析:
C:\oracle\product10.2.0\admine\orcl\udump> tkprof abc.trc abc.txt
四、简单测试例子,通过会话跟踪。
1、打开PL/SQL Developer sql测试窗口
输入select * from hr.job 执行后报错。确定就可以了。
2、打开sql*plus 执行
select sid ,serial#,action from v$session
找到sql窗口-新建的那行,代表PL/SQL Developer sql测试窗口的会话.
部分截图:
143 1379 SQL 窗口 - 新建
执行如下语句,打开跟踪功能.
begin
dbms_monitor.session_trace_enable(session_id => 143,serial_num => 1379);
--dbms_monitor.session_trace_disable(session_id => 143, serial_num => 1379);
end;
3、进入命令提示符,进入相应的目录,将跟踪文件命名为abc.trc
C:\oracle\product\10.2.0\admin\orcl\udump>trcsess output="abc1.trc" session=143.
1379
4、执行命令,关闭跟踪功能。
begin
--dbms_monitor.session_trace_enable(session_id => 143,serial_num => 1379);
dbms_monitor.session_trace_disable(session_id => 143, serial_num => 1379);
end;
5、进入命令提示符,将跟踪文件输出成txt格式。
C:\oracle\product\10.2.0\admin\orcl\udump>tkprof abc1.trc ac.txt
6、打开ac.txt
跟踪文件部分内容:
The following statement encountered a error during parse:
select * from hr.job
Error encountered: ORA-00942
后台使用oracle的其他软件跟踪道理是相同的。使用plsqldev做个简单的例子。