使用DBMS_MONITOR启用SQL跟踪1

2023年 8月 23日 39.3k 0

Oracle数据库也提供了dbms_monitor包来启用和禁用SQL跟踪。这个包不仅提供了一种启用会话级别的扩展SQL跟踪方法,更重要的是,你可以基于会话属性来启用和禁用SQL跟踪。这些属性包括:客户端标识符、服务名、模块名和动作名。这意味着如果应用配置正确,你可以针对执行数据库调用的会话单独启用和禁用SQL跟踪。目前,这是特别有用的方法,因为在大多数情况下都会用到连接池,所以用户已经不会关联某个特定的会话。

 

当使用dbms_monitor包时,不需要直接指定诊断事件10046的级别。每个过程提供三个参数(binds、waits以及自版本11.1起才有的plan_stat)
来启用SQL 跟踪。使用以下参数可以启用对应的级别。

Ø  启用级别4,binds 需要设置为TRUE。

Ø  启用级别8,waits 需要设置为TRUE。

Ø  启用级别16,plan_stat 需要设置为all_executions。

Ø  启用级别32,plan_stat 需要设置为never。

Ø  dbms_monitor 无法启用级别64。

 

参数waits的默认值为TRUE。binds的默认值为FALSE。plan_stat的默认值为NULL(相当于first_execution)。因此,默认级别是8。

 

接下来的内容给出了一些使用dbms_monitor包在会话、客户端、组件和数据库级别启用和禁用SQL跟踪的例子。请注意,在默认情况下,只有拥有dba角色的用户可以执行dbms_monitor包下的过程。

 

●会话级别

为会话启用和禁用SQL跟踪,dbms_monitor包分别提供了session_trace_enable和session_trace_disable过程。

以下PL/SQL调用针对ID为127、序列号为29的会话启用级别8的SQL跟踪:

dbms_monitor.session_trace_enable(session_id
=> 127,

serial_num => 29,

waits 
=> TRUE,

binds 
=> FALSE,

plan_stat 
=>'first_execution')

 

所有参数都有默认值。如果有两个关于会话的参数没有指定,就针对执行此PL/SQL调用的会话启用SQL跟踪。

 

当通过session_trace_enable启用SQL跟踪时,也会相应地设置视图v$session中的sql_trace、sql_trace_waits和sql_trace_binds列。此外,自版本11.1开始,sql_trace_plan_stats列也会生效。注意,直至(并包括)10.2.0.5,这只会在以下情况下发生:在执行sessiontraceenable后至少有一条SQL语句在被跟踪的会话中执行。例如,以下信息在执行了之前的PL/SQL调用后才能查询到:

select
sql_trace,sql_trace_waits,sql_trace_binds,sql_trace_plan_stats

from v$session

where sid=127

 

下面的PL/SQL调用禁用了ID为127、序列号为29的SQL 跟踪:

dbms_monitor.session_trace_disable(session_id
=> 127,serial_num => 29);

 

请注意,这两个参数都有默认值。如果不指定,会禁用与执行这个PL/SQL调用对应的会话的SQL跟踪。

 

在RAC(Real
Application Cluster,真实应用程序集)环境中,session_trace_enable

session_trace_diable 需要在存在会话的对应数据库实例上执行。

 

●客户端级别

为客户端启用和禁用SQL跟踪, dbms_monitor包分别提供了client_id_trace_enable和 client_id_trace_disable过程。这些过程仅会在已设置会话属性的客户端标识符的情况下使用。

 

以下PL/SQL调用为所有具有指定客户端标识符的会话启用了级别12的SQL跟踪:

dbms_monitor.client_id_trace_enable(client_id
=>'helicon.antognini.ch',

waits 
=> TRUE,

binds 
=> TRUE,

plan_stat 
=>'first_execution');

 

参数client_id没有默认值,并且区分大小写。

 

由于这个设置会保存在数据字典里,所以实例重启后也会存在,同时,在一个RAC的环境下,它对所有数据库实例生效。

 

在dba_enabled_traces和12.1多租户环境下的cdb_enabled_traces视图里,会通过client_id_trace_enable 过程,显示启用SQL跟踪的用户标识符以及使用的参数。例如,使用以上的PL/SQL调用启用SQL跟踪后,可以查到如下信息:

SELECT primary_id AS client_id, waits,
binds, plan_stats

FROM dba_enabled_traces

WHERE trace_type='CLIENT_ID';

 

以下PL/SQL调用针对所有指定客户端标识符的会话禁用SQL跟踪:

dbms_monitor.client_id_trace_disable(client_id
=>'helicon.antognini.ch')

 

过程client_id_trace_disable移除过程client_id_trace_enable相应在数据字典里增加的信息。参数client_id没有默认值。

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论