使用DBMS_MONITOR启用SQL跟踪2

2023年 8月 26日 36.5k 0

 

●组件级别

包dbms_monitor分别提供了过程serv_mod_act_trace_enable和serv_mod_act_trace_disable来利用服务名、模块名和动作名为组件启用和禁用SQL跟踪。要充分使用这些过程,你需要设置会话属性、模块名和动作名。

 

以下PL/SQL调用为所有使用指定参数的会话启用SQL跟踪:

dbms_monitor.serv_mod_act_trace_enable(service_name=>'DBM11203.antognini.ch',

module_name =>'mymodule',

action_name =>'myaction',

waits =>TRUE,

binds =>TRUE,

instance_name=>NULL,

plan_stat=>'all_executions');

 

这里唯一一个没有默认值的参数是第一个service_name。参数module_name和action_name默认值分别为any_module和any_action。同时,NULL也是一个有效的值。如果指定了参数action_name的值,那么也必须指定参数module_name的值。如果不设置,则会引发ORA-13859错误。在RAC环境下,参数instance_name用来限定具体跟踪哪个数据库实例。默认情况下,SQL跟踪对所有数据库实例生效。请注意,参数service_name、module_name、action_name和instance_name区分大小写。

 

由于设置保存在数据字典中,数据库实例重启不会影响使用。

 

与客户端级别的SQL跟踪相同,在dba_enabled_traces和12.1多租户环境下的cdb_enabled_traces视图里,通过过程serv_mod_act_trace_enable,会显示启用了SQL跟踪的用户标识符组件以及使用的参数。使用以上PL/SQL调用启用SQL跟踪后,你可以查询到以下信息:

SELECT primary_id AS service_name,
qualifier_id1 AS module_name,

 
qualifier_id2 AS action_name, waits, binds, plan_stats

FROM dba_enabled_traces

WHERE trace_type IN
('SERVICE','SERVICE_MODULE','SERVICE_MODULE_ACTION');

 

注意,根据启用SQL跟踪指定的参数定义(即服务名、模块名和动作名),会将列trace_type设置成SERVICE、SERVICE_MODULE或者SERVICE_MODLE_ACTION。

 

以下PL/SQL调用为所有使用指定参数的会话禁用SQL跟踪:

dbms_monitor.serv_mod_act_trace_disable(service_name_=>'DBM11203.antognini.ch',

module_name=>'mymodule',

action_name=>'myaction',

instance_name=>NULL);

 

过程serv_mod_act_trace_disable会移除过程serv_mod_act_trace_enable添加到数据字典里的信息。所有参数都与过程serv_mod_act_trace_enable具有一样的默认值并且作用一致。

 

①服务名对于数据库来说是一个逻辑名。它是通过初始化参数service_names或包dbms_service进行配置的。 一个数据库可以有多个服务名。

 

●数据库级别

包dbms_monitor为所有连接到数据库的会话启用和禁用SQL跟踪(那些后台进程创建的除外),分别提供过程database_trace_enable和database_trace_disable。

 

以下PL/SQL调用为单个数据库实例启用级别12的SQL跟踪:

dbms_monitor.database_trace_enable(waits
=> TRUE,

binds => TRUE,

instance_name  =>'DBM11203',

plan_stat ='first_execution');

 

所有参数都有默认值。在RAC环境下,使用参数instance_name来限制要跟踪的数据库实例。指定_的值可以从视图gv$instance的列instance_name获得。如果将参数instance_name设置为NULL(同时也是默认值),SQL跟踪会在所有数据库实例启用。请注意,参数instance_name区分大小写。

 

由于设置保存在数据字典中,数据库实例重启不会影响使用。

 

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

SELECT instance_name, waits,
binds,plan_stats

FROM dba_enabled_traces

WHERE trace_type ='DATABASE';

 

以下PL/SQL调用会禁用数据库级别的SQL跟踪,同时会移除过程database_trace_enable相应加入到数据字典里的信息:

dbms_monitor.database_trace_disable(instance_name=>'DBM11203');

 

请注意,这不会禁用其他级别(包括会话级别、客户端级别或组件级别)的SQL跟踪。如果将参数instance_name设置为NULL(同时也是默认值),则会禁用所有数据库实例的SQL跟踪功能。

 

相关文章

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

发布评论