在Oracle数据库10g中跟踪SQL

文章作者 100test 发表时间 2007:03:14 13:33:43
来源 100Test.Com百考试题网


在具有许多活跃用户的繁忙生产环境中,跟踪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_BASE\instance_name\admin\udump,其中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_0update).

  PL/SQL过程已成功完成。

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

SQL> exec dbms_monitor.client_id_trace_enable
(client_id=>kimberly).

  PL/SQL过程已成功完成。

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

  为了基于会话ID跟踪SQL,可以查看Oracle企业管理器的Top Sessions页面,或者像您当前做的那样查询V$SESSION视图。

SQL> 0select 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 0selected.


相关文章


用户如何有效地利用Oracle数据字典
Oracle中加速数据导入特性和技术研究
用Oracle10g新的行时间戳捕捉变化
在Oracle数据库10g中跟踪SQL
对比Oracle数据库中多种导入数据方法
浅谈Oracle数据库外部身份认证研究
详细介绍Oracle数据库的聚簇技术
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛