千家信息网

数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等

发表于:2025-01-31 作者:千家信息网编辑
千家信息网最后更新 2025年01月31日,这篇文章主要为大家展示了"数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习
千家信息网最后更新 2025年01月31日数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等

这篇文章主要为大家展示了"数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等"这篇文章吧。


概述

在 具有连接池或共享服务器的多层环境中,一个会话可以跨越多个进程,甚至跨越多个实例。DBMS_MONITOR是在Oracle 10g中引入的内置的程序包,通过该程序包可以跟踪从客户机到中间层、再到后端数据库的任何用户的会话。由于每个会话都会产生独立的trace文件,因而 可以较为容易地标识创建大量工作量的特定用户。DBMS_MONITOR取代了传统的跟踪工具,例如DBMS_SUPPORT。需要具有DBA角色才可以使用DBMS_MONITOR。
端对端的应用程序跟踪可以基于如下:
会话(SID):基于会话ID(SID)和序列号。
客户端标识符(client_identifier):允许跨越多个会话设置跟踪。基于登录ID指定终端用户。使用DBMS_SESSION.SET_IDENTIFIER过程设置该值。
实例(INST_NAME):基于实例名指定给定的实例。
服务名(SERVICE_NAME):指定一组相关的应用程序。使用DBMS_SERVICE.CREATE_SERVICE过程设置该值。
模块名(MODULE):开发人员在其应用程序代码中使用DBMS_APPLICATION_INFO.SET_MODULE过程设置该值。使用该名称表示执行的模块或代码。
操作名(ACTION):开发人员在其应用程序代码中使用DBMS_APPLICATION_INFO.SET_ACTION过程设置该值。使用该名称表示模块执行的操作。

也可以执行如下sql:
select sid,serial#,SERVICE_NAME,MODULE,ACTION,client_identifier from v$session;

最后3个跟踪选项在层次上关联;不可以在没有指定模块名和服务名的情况下就指定操作名,但是可以只指定服务名,或者只指定服务名和模块名。


1.基于会话ID和序列号设置跟踪(serial#可以加,也可以不加)
为了基于会话ID和序列号设置跟踪,首先确定需要跟踪的会话的SID和序列号:
SQL> COL PROGRAM FOR A30
SQL> COL EVENT FOR A30
SQL> select sid,serial#,username,program,status,type,event,blocking_session from v$session where type='USER';

SID SERIAL# USERNAME PROGRAM STATUS TYPE EVENT BLOCKING_SESSION
---------- ---------- ------------------------------ ------------------------------ -------- ---------- ------------------------------ ----------------
1 5 SYS sqlplus@wang (TNS V1-V3) ACTIVE USER SQL*Net message to client
37 123 SYS plsqldev.exe INACTIVE USER SQL*Net message from client
38 133 SYS plsqldev.exe INACTIVE USER SQL*Net message from client
39 215 SYS plsqldev.exe INACTIVE USER SQL*Net message from client
41 79 HR sqlplus.exe INACTIVE USER SQL*Net message from client


为了启用跟踪,可执行如下语句:
第三个参数用于等待(默认为TRUE),第四个参数用于绑定变量(默认为FALSE)。
SQL> exec dbms_monitor.session_trace_enable(1,5,TRUE,TRUE);

PL/SQL procedure successfully completed.

SQL> select sid from v$mystat where rownum=1;

SID
----------
1

SQL> select count(*) from hr.jobs;

COUNT(*)
----------
19


为了关闭跟踪,可执行如下语句:
SQL> exec dbms_monitor.session_trace_disable(1,5);

PL/SQL procedure successfully completed.


--查询trace文件位置:
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
FROM v$process a, v$session b, v$parameter c, v$instance d
WHERE a.addr = b.paddr
AND b.audsid = userenv('sessionid')
AND c.name = 'user_dump_dest';

执行如下:
SQL> select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
2 FROM v$process a, v$session b, v$parameter c, v$instance d
3 WHERE a.addr = b.paddr
4 AND b.audsid = userenv('sessionid')
5 AND c.name = 'user_dump_dest';

TRACE
------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/dbdb/DBdb/trace/DBdb_ora_5994.trc

使用vi工具查看,/dbms_monitor.session_trace 按键n/N

为了跟踪当前的会话,可设置SID和SERIAL#为空:
SQL> exec dbms_monitor.session_trace_enable(null,null);

2.基于客户端标识符设置跟踪
为了基于表示用户的客户端标识符设置跟踪,可运行如下语句:
SQL> exec dbms_session.set_identifier('bryan id');

或者执行执行如下sql:
select sid,serial#,username,client_identifier from v$session;

为了验证客户端标识符,可执行如下语句:
select sid,serial#,username,client_identifier from v$session;

SID SERIAL# USERNAME CLIENT_IDENTIFIER
---------- ---------- ------------------------------ ----------------------------------------------------------------
1 5 SYS bryan id

现在就可以为这个客户端标识符设置跟踪:第二个参数用于等待(默认为TRUE),第三个参数用于绑定变量(默认为FALSE)。
SQL> exec dbms_monitor.client_id_trace_enable('bryan id',true,true);

PL/SQL procedure successfully completed.

--执行一些操作:
SQL> create table a as select * from dba_objects where rownum <10;

Table created.

SQL> insert into a select * from a;

9 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from a;

COUNT(*)
----------
18

为了禁用这个客户端标识符跟踪,可执行如下语句:
SQL> exec dbms_monitor.client_id_trace_disable('bryan id');

PL/SQL procedure successfully completed.

--查询trace文件位置:
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
FROM v$process a, v$session b, v$parameter c, v$instance d
WHERE a.addr = b.paddr
AND b.audsid = userenv('sessionid')
AND c.name = 'user_dump_dest';

SQL> select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
2 FROM v$process a, v$session b, v$parameter c, v$instance d
3 WHERE a.addr = b.paddr
4 AND b.audsid = userenv('sessionid')
5 AND c.name = 'user_dump_dest';

TRACE
-----------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/dbdb/DBdb/trace/DBdb_ora_5994.trc

3.设置服务名/模块名/操作名的跟踪
为了使用操作名,必须有对应的模块名和服务名。为了使用模块名,必须有服务名。对全局范围内针对某个数据库的服务名、模块名和操作名的给定组合启用跟踪,除非为过程指定了实例名。服务名由用于连接到服务的连接字符串确定。
Oracle 数据库表示为作为服务的客户端;也就是说,数据库代表客户端执行相应的操作。数据库可以有一个或多个与其关联的服务。例如,可以有一个数据库,该数据库带 有两个用于Web客户端的不同服务:用于购买书籍的客户端的book.us.acme.com,以及用于购买软件的客户端的 soft.us.acme.com。在该示例中,数据库名是sales.acme.com,因此服务名并不基于数据库名。服务名由初始参数文件中的 SERVICE_NAMES参数指定。服务名默认为由数据库名(DB_NAME参数)和域名(DB_DOMAIN参数)组成的全局数据库名

--使用如下失去了查询服务名/模块名/操作名
select sid,serial#,SERVICE_NAME,MODULE,ACTION,client_identifier from v$session;


为了启用服务名的跟踪,可执行如下语句:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'DBdb');
这将跟踪服务名为DBdb所有会话。

为了启用服务名、模块名和操作名组合的跟踪,可执行如下语句:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'ebk2', module_name=>'salary_update', action_name=>'insert_item');

为了禁用前面代码中的跟踪,可使用过程SERV_MOD_ACT_TRACE_DISABLE,如下说是:
SQL> exec dbms_monitor.serv_mod_act_trace_disable(service_name=>'ebk2', module_name=>'salary_update', action_name=>'insert_item');

为了跟踪整个数据库或实例,可执行如下语句(不推荐这样操作):
execute DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE, instance_name => 'ebk1');
execute DBMS_MONITOR.DATABASE_TRACE_DISABLE(instance_name => 'ebk1'
);

注意:使用DBMS_MONITOR时,请确保在完成操作时禁用跟踪;否则,将会跟踪满足指定条件的每个会话。

以上是"数据库中如何使用dbms_monitor跟踪多个会话,service_name,sid等"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

跟踪 服务 数据 数据库 客户 模块 参数 客户端 语句 多个 实例 标识 标识符 程序 过程 代码 序列 序列号 应用程序 文件 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 同时更新同一数据库 服务器性能瓶颈一般是什么 以下哪个数据库提供期刊评价报告 校园网络安全海报 网络安全政策的满意度 超南润网络技术 黄浦区立体化软件开发使用方法 小米2打不开ftp服务器 网络技术的发达 上海市网络安全周宣传片 新中大数据库加载失败 网络安全志愿宣传活动 软件开发的阶段和对应测试 正式服哪个服务器不卡 怎么用c 做数据库的菜单 真实的软件开发 服务器网址不能打开 徐汇区仓库管理软件开发 qq服务器正在维护 美团服务器托管在哪儿 数据库连接不上 谈谈对计算机网络技术的理解 网络安全是国家工作的核心 中国人民解放军网络安全保密规定 全国网络安全小组学习测试卷 智能互联网络技术就业意向 北邮网络技术研究院导师简介 未来科技城互联网有哪些 第二届民航网络安全张电生 三级医院网络安全等级分几级
0