在Oracle数据库10g中跟踪SQL 2
SQL> select sid, serial#, username
from v$session;
SID SERIAL# USERNAME
------ ------- ------------
133 4152 SYS
137 2418 SYSMAN
139 53 KIMBERLY
140 561 DBSNMP
141 4 DBSNMP
. . .
168 1
169 1
170 1
28 rows selected.
通过会话ID(SID)和序号,您可以使用DBMS_MONITOR只对下面的会话启用跟踪:
SQL> exec dbms_monitor.session_trace_enable(139);
PL/SQL过程已成功完成。
该序号默认为该SID的当前序号(除非另外指定),因此如果那就是您想跟踪的会话和序号,那么您就不必查看更多的内容了。还有,默认情况下,WAITS设置为true而BINDS设置为false,因此上面的语法实际上与下面的语法效果相同:
SQL> exec dbms_monitor.session_trace_enable
(session_id=>139, serial_num=>53, waits=>true, binds=>false);
请注意,WAITS和BINDS是相同的参数,您在过去可能已经使用DBMS_SUPPORT和10046事件对它们进行了设置。
如果您正在一个生产环境中工作,那么此时您最好重新运行出错的SQL或应用程序,并且相应地创建跟踪文件。
用企业管理器建立跟踪
通过Oracle企业管理器建立跟踪从Top Consumers页面(可以通过Additional Monitoring Links区域中的Performance页面得到,如图1所示)开始。该页面显示服务、模块、客户和动作对系统资源的当前使用情况。
图1:Oracle企业管理器的Top Consumers页面
您可以单击Top Services、Top Modules、Top Actions、Top Clients或Top Sessions选项卡,来查看这些类别的顶级消费者中每一种的详细信息,随后您可以通过这些页面中的每一个页面轻松启用(或禁用)SQL跟踪。从页面上的列表中简单地选择项目,然后单击启用SQL跟踪(Enable SQL Trace)开始跟踪(当您完成跟踪时,单击禁用按钮)。
您还可以启用(或禁用)这些页面上列出的任何项目的统计数据集合。(DBMS_MONITOR还提供了用于启用和禁用数据集合的例程)。
分析跟踪结果
获取关于Kimberly Floss的图书的信息
无论您是使用DBMS_MONITOR或者是使用Oracle企业管理器建立跟踪,您都将使用trcsess 命令行工具来整合跟踪文件。单击Oracle企业管理器中的查看SQL跟踪(View SQL Trace)按钮显示一个页面,其中显示了您将用于整合所有跟踪文件的语法。
要确保用双引号括住字符串,并在文件名后添加一个".trc"扩展名;否则,TKPROF将不会把它作为一个文件名来接受。在执行该命令之前,找到在user_dump_dest(或者,如果您没有更改该参数名,则在\udump)中指定的目录。
C:\...\udump> trcsess output="kfloss.trc" service="testenv"
module="product update"
action="batch insert"
随后,您可以对整合的跟踪文件运行TKPROF,以生成一份报告。
C:\...\udump> tkprof kfloss.trc
output=kfloss_trace_report SORT=(EXEELA, PRSELA, FCHELA)
如果您不终止跟踪,那么运行该服务和模块的每一个会话都会被跟踪。因此,当您完成跟踪时,要确保通过使用Oralce企业管理器或DBMS_MONITOR包来终止跟踪。