dbms_monitor可以跟踪从客户端到中间层,再到后端数据库的任何用户的回话。从而可以比较容易的确定闯将大量工作负载的特定的回话。此程序包需要有DBA角色才能执行。
dbms_monitor可以机油以下信息:
会话,客户端标识符,实例,服务名,模块名,操作名。
会生成如下信息:
等待,绑定,实例名,计划统计
1.基于会话ID和序列号的设置跟踪
先确定要跟踪的会话的SID和序列号
select sid,serial#,username from v$session;
使用dbms_monitor启用跟踪,
exec dbms_monitor.session_trace_enable(sid,serial#,waits,binds,plan_stat);
执行语句如下:
exec dbms_monitor.session_trace_enable(24,15,true,false);
关闭跟踪,执行如下语句:
exec dbms_monitor.session_trace_disable(24,15);
跟踪当前会话,可以执行如下:
exec dbms_monitor.session_trace_enable(null,null) -----把sid和serial#都设置为空;
2.基于客户端标识符设置跟踪
先为当前会话设置标识符:
exec dbms_session.set_identifier('wlp id');
验证是否设置成功
select sid,serial#,username,client_identifier from v$session where client_identifier is not null;
现在可以为这个客户端标识符设置跟踪:
exec dbms_monitor.client_id_trace_enable('wlp id',true,false);
第二个参数用于waits,默认true,第三个参数为binds,默认false。使用带client_id跟踪的好处是,无论是否重启实例,无论用任何进程或会话id,用户的活动都能被记录跟踪。
3.设置服务名/模块名/操作名的跟踪
启用基于服务名的跟踪(假设服务名为wlp1),可执行如下语句:
exec dbms_monitor.serv_mod_act_trace_enable(service=>'wlp1');--跟踪服务名为wlp1的所有会话
为了启用服务名,模块名和操作名组合的跟踪,可执行如下语句:
exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'wlp1',module_name=>'n_update',action_name=>'insert_item');
为了跟踪整个数据库或实例,可以执行如下语句(不推荐)
exec dbms_monitor.database_trace_enable(waits=>true,binds=>false,instance_name=>'orcl');
4.启用跟踪视图
查看dba_enable_traces和dba_enable_aggregations视图可以看到启用的跟踪和收集统计信息。
因篇幅问题不能全部显示,请点此查看更多更全内容