如何在Oracle 10g中跟踪SQL

 

如何在Oracle 10g中跟踪SQL

 

 

  http://www.cnscn.org/htm_data/20/0811/18237.html

 

        在具有许多活跃用户的繁忙生产环境中,跟踪SQL会话是费时且十分复杂的,

因为在任何使用连接池的多层系统中处理SQL语句可能要涉及多个进程,或者甚至是不

同的实例。 

 

  利用Oracle数据库10g,Oralce通过一个新的内置软件包DBMS_MONITOR合理化了SQL

的跟踪,这个软件包中包含以前无书面记载的跟踪工具(如DBMS_SUPPORT软件包)的功

能。现在,您可以轻松地从头到尾--从客户机到中间层再到后端--跟踪任何用户的会

话,并且基于特定的客户ID、模块或动作生成跟踪文件。

 

  此外,Oracle数据库10g包含一种新的实用程序trcsess,它可以让您基于会话ID或

模块名称之类的条件,有选择地从大量跟踪文件中抽取出跟踪数据,并将它们保存到一

个文件中。该实用程序在共享服务器配置中特别有用,因为调度程序可能把每一个用户

请求传递给不同的共享服务器进程,从而为任何给定的会话产生多个跟踪文件。与通过

大量跟踪文件发掘信息不同,Oracle数据库10g的trcsess可以让您获得关于单一用户会

话的整合后的跟踪信息。

 

  开始

 

  和Oracle数据库的以前版本一样,跟踪文件将被输出到由服务器的初始化文件(或

spfile)的user_dump_dest参数指定的目录中。默认的位置取决于操作系统;例如,对于

使用DBCA的Microsoft Windows平台,默认位置是

$ORACLE_BASEinstance_nameadminudump,其中instance_ name是Oracle实例的名称。

您可以通过使用以下改变会话命令来动态地更改该参数:

 

  alter session set user_dump_dest="c:kflosstrace";

 

  您还可以把您自己的标记添加到跟踪文件名中,以便您能够更容易地找到生成的文

件。为此,可以在启动跟踪之前设置tracefile_identifier初始化参数:

 

  alter session set 

 

  tracefile_identifier ="kfloss_test";

 

  通过该命令生成的跟踪文件带有您设置的附加在文件名后的字符串值。尽管这些改

变会话命令都不是必要的,但是它们都会使查找跟踪会话的结果更容易。

 

  现在,我们已经设置了这些参数,那么让我们看看新的跟踪软件包和Oracle企业管

理器的界面。让我们使用新的DBMS_MONITOR软件包通过模块名称和客户机名称来建立一

个跟踪。

 

  用DBMS_MONITOR建立跟踪

 

  DBMS_MONITOR包具有多个例程,用于启用和禁用统计数据集合,以及用于根据会话

ID进行跟踪、或者基于服务名称、模块名称和动作名称的组合进行跟踪。(它们三者从

层次结构上是关联的:您不能在不指定模块和服务名称的情况下指定一个动作,但是您

可以只指定服务名称,或者只指定服务名称和模块名称)。模块名称和动作名称(如果有

的话)都来自于应用程序代码内部。例如,Oracle电子商务套件应用程序在代码中提供

了模块名称和动作名称,这样您就可以在任何Oralce企业管理器页面中通过名称来识别

它们。 (PL/SQL开发人员可以通过使用DBMS_APPLICATION_INFO包设置模块名称和动作

名称,把一些调用嵌入到他们的应用程序中)。

 

  请注意,设置模块、动作及其他参数(如client_id)将不造成对数据库的往返操作

--这些例程携带来自应用程序的所有调用。

 

  服务名称由用于连接该服务的连接字符串来确定。未与特定服务关联的用户会话将

由sys$users处理(sys$background是后台进程的默认服务)。由于我们具有一个服务和

一个模块名称,因而我们可以启动对该模块的跟踪,如下所示:

 

  SQL> exec dbms_monitor.serv_mod_act_trace_enable

 

  (service_name=>'testenv', module_name=>'product_update');

 

  PL/SQL过程已成功完成。

 

  我们可以启动对客户机的跟踪:

 

  SQL> exec dbms_monitor.client_id_trace_enable

 

  (client_id=>'kimberly');

 

  PL/SQL过程已成功完成。

 

  请注意,所有这些设置都是永久性的--所有与该服务和模块关联的会话都会被跟

踪,而不仅仅是跟踪当前会话。

 

  为了基于会话ID跟踪SQL,可以查看Oracle企业管理器的Top Sessions页面,或者

像您当前做的那样查询V$SESSION视图。

 

  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所示)开始。该页面显示服

务、模块、客户和动作对系统资源的当前使用情况。

 

  <http://database.51cto.com/files/uploadimg/20061231/1159400.jpg> 

 

 

 

  图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包来终止跟踪。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值