DBMS_MONITOR
sql server提供了事件查看器,用来跟踪后台的sql执行。oracle如何跟踪呢?oralce提供了多种跟踪方法,下面先介绍10g提供的新包。 DBMS_MONITOR,它提供了多种级别的trace.
一、语法:
· 模块级别跟踪:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name => 'EDGAR', module_name =>
'product_module', action_name => ‘INSERT_DATA’);
其中,module_name和action_name可以通过在程序中调用模块DBMS_APPLICATION_INFO来定义。也可以通
过dbms_monitor.all_modules和dbms_monitor.all_actions来设置对所有模块和动作进行跟踪。
·用户级别跟踪:
SQL> exec dbms_monitor.client_id_trace_enable(client_id => 'DEMO');
Client_id就是数据库中的用户名。
·会话级别跟踪:SQL> exec dbms_monitor.session_trace_enable(138);138就是会话ID.
二、修改生成跟踪的文件名称:
激活跟踪后,就可以用新工具trcsess来生成trace文件,先跳转到udump目录:
C:> cd adminudump 可以生成不同级别的的trace文件(前提是该级别的trace已经激活)
· 模块级别:C:\oracle\product10.2.0\admine\orcl\udump> trcsess output="abc.trc"
service="EDGAR" module="product_module" action="INSERT_DATA"
· 用户级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
clientid="DEMO"
· 会级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
session=138.12432其中session必须是SID.SERIAL#的格式(可以从v$session中查到) 打开产生的trace
文件,会发现内面的内容实际上相当于10046和10053事件产生的trace文件内容的组合。
三、使用tkprof进行分析:
C:\oracle\product10.2.0\admine\orcl\udump> tkprof abc.trc abc.txt
转自:http://www.nipei.com/article/2354
以下来自另一文
以下来自另一文
dbms_monitor.session_trace_enable 跟踪某个会话
1、先查出你想跟踪的某个机器的session信息SID,SERIAL#
select SID,SERIAL# from v$session where lower(terminal) like '%yf07%';
2、开启跟踪:
exec dbms_monitor.session_trace_enable(SID,SERIAL#,TRUE) ;
3、查出跟踪文件位置:show parameter user
user_dump_dest参数的值就是跟踪文件存放的位置。
4、取得跟踪文件并分析。
5、关闭跟踪:
exec dbms_monitor.session_trace_disable(SID,SERIAL#,FALSE);
转自:http://blog.csdn.net/caok/article/details/3297469
sql server提供了事件查看器,用来跟踪后台的sql执行。oracle如何跟踪呢?oralce提供了多种跟踪方法,下面先介绍10g提供的新包。 DBMS_MONITOR,它提供了多种级别的trace.
一、语法:
· 模块级别跟踪:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name => 'EDGAR', module_name =>
'product_module', action_name => ‘INSERT_DATA’);
其中,module_name和action_name可以通过在程序中调用模块DBMS_APPLICATION_INFO来定义。也可以通
过dbms_monitor.all_modules和dbms_monitor.all_actions来设置对所有模块和动作进行跟踪。
·用户级别跟踪:
SQL> exec dbms_monitor.client_id_trace_enable(client_id => 'DEMO');
Client_id就是数据库中的用户名。
·会话级别跟踪:SQL> exec dbms_monitor.session_trace_enable(138);138就是会话ID.
二、修改生成跟踪的文件名称:
激活跟踪后,就可以用新工具trcsess来生成trace文件,先跳转到udump目录:
C:> cd adminudump 可以生成不同级别的的trace文件(前提是该级别的trace已经激活)
· 模块级别:C:\oracle\product10.2.0\admine\orcl\udump> trcsess output="abc.trc"
service="EDGAR" module="product_module" action="INSERT_DATA"
· 用户级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
clientid="DEMO"
· 会级别:C:\oracle\product10.2.0\admine\orcl\udump>trcsess output="abc.trc"
session=138.12432其中session必须是SID.SERIAL#的格式(可以从v$session中查到) 打开产生的trace
文件,会发现内面的内容实际上相当于10046和10053事件产生的trace文件内容的组合。
三、使用tkprof进行分析:
C:\oracle\product10.2.0\admine\orcl\udump> tkprof abc.trc abc.txt
转自:http://www.nipei.com/article/2354
以下来自另一文
使用dbms_monitor包收集执行信息和trace
一。可以用来收集的条件
1.client identifier
--客户端标识,可以通过dbms_session.set_identifier来设置
2.Service
3.module
---指定一个模块
4.action
---指定一个行为,如insert,update等等
5.session
6.instance
二。详细使用说明
1.通过client identifier来收集执行信息
开始
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE(client_id => 'test');
结束
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_DISABLE(client_id => 'test');
2. 通过service_name,module,action收集信息的方法
收集service为testdb的my_mod模块的信息,模块的信息由应用开发者通过DBMS_APPICATION_INFO的SET_MODULE 和 SET_ACTION 存储过程去定制
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(service_name => 'testdb',module_name => 'my_mod');
收集service为testdb的GLEDGER模块的insert动作信息
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(service_name => 'testdb',module_name => 'my_mod', action_name => 'inserting');
结束信息收集就是将上面包的enable改为disable执行一边即可。
3.通过以下的视图查看收集后的信息
DBA_ENABLED_AGGREGATIONS
----这是一个全局视图
V$CLIENT_STATS
V$SERVICE_STATS
V$SERV_MOD_ACT_STATS
V$SVCMETRIC
V$CLIENT_STATS
---如果通过client_identifier来收集执行信息,可以通过这个视图查看结果
下面是一个通过client_id来收集执行信息的例子
session1 :
执行
SQL> exec dbms_session.set_identifier('test');
session2 :
执行
SQL> EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE(client_id => 'test');
session1:执行一个sql语句
SQL> select count(*) from test;
COUNT(*)
----------
49761
session2 :查看V$CLIENT_STATS可以看到如下的信息,
1* select * from V$CLIENT_STATS
SQL> /
CLIENT_IDENTIFIER
STAT_ID
STAT_NAME
VALUE
----------------- ---------- -------------------------------------------------- ----------
test
2882015696 user
calls
4
test
3649082374 DB
time
150628
test
2748282437 DB
CPU
30029
test
63887964 parse count
(total)
3
test
1431595225 parse time
elapsed
77768
test
2453370665 execute
count
7
test
2821698184 sql execute elapsed
time
148951
test
85052502 opened cursors
cumulative
3
test
3143187968 session logical
reads
748
test
2263124246 physical
reads
684
test
1190468109 physical
writes
0
test
1236385760 redo
size
0
test
582481098 user
commits
0
test
3211650785 workarea executions -
optimal
0
test
798730793 workarea executions -
onepass
0
test
3804491469 workarea executions -
multipass
0
test
3678609077 session cursor cache
hits
0
test
3671147913 user
rollbacks
0
test
916801489 db block
changes
0
test
2877738702 gc cr blocks
received
0
test
1759426133 gc cr block receive
time
0
test
326482564 gc current blocks
received
0
test
1388758753 gc current block receive
time
0
test
2432034337 cluster wait
time
0
test
3868577743 concurrency wait
time
0
test
1099569955 application wait
time
0
test
3332107451 user I/O wait
time
136913
三。跟踪session
1.通过client_identifier来跟踪session
EXECUTE DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(client_id => 'OE.OE',waits => TRUE, binds => FALSE);
---waits 表示等待信息是否记录在trace文件中
---binds 表示是否记录绑定变量的信息
关闭
EXECUTE DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE(client_id => 'OE.OE');
2.跟踪service,module,action
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'testdb',waits => TRUE, binds => FALSE, instance_name => 'testdb');
也可以指定模块名称
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'testdb',module_name => 'my_mod', waits => TRUE, binds => FALSE,instance_name => 'testdb');
以上两个列子的关闭方法
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE(service_name => 'testdb',instance_name => 'testdb');
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE(service_name => 'testdb',module_name => 'my_mod', instance_name => 'testdb');
3.通过session id去trace
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 144, serial_num => 154,waits => TRUE, binds => FALSE);
关闭
EXECUTE DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id => 27, serial_num => 60);
如果是在当前用户模式下,可以直接输入
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(waits => TRUE, binds => FALSE);
关闭
EXECUTE DBMS_SESSION.SESSION_TRACE_DISABLE();
4.trace整个实例
EXECUTE DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE,instance_name => ’testdb’);
关闭
EXECUTE DBMS_MONITOR.DATABASE_TRACE_DISABLE(instance_name => ’testdb’);
通过tkprof格式化trace文件后,即可查看
转自:http://blog.chinaunix.net/uid-20185205-id-1972530.html
一。可以用来收集的条件
二。详细使用说明
1.通过client identifier来收集执行信息
开始
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE(client_id => 'test');
结束
EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_DISABLE(client_id => 'test');
2. 通过service_name,module,action收集信息的方法
收集service为testdb的my_mod模块的信息,模块的信息由应用开发者通过DBMS_APPICATION_INFO的SET_MODULE 和 SET_ACTION 存储过程去定制
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(service_name => 'testdb',module_name => 'my_mod');
收集service为testdb的GLEDGER模块的insert动作信息
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_STAT_ENABLE(service_name => 'testdb',module_name => 'my_mod', action_name => 'inserting');
结束信息收集就是将上面包的enable改为disable执行一边即可。
3.通过以下的视图查看收集后的信息
DBA_ENABLED_AGGREGATIONS
V$CLIENT_STATS
V$SERVICE_STATS
V$SERV_MOD_ACT_STATS
V$SVCMETRIC
V$CLIENT_STATS
下面是一个通过client_id来收集执行信息的例子
session1 :
执行
SQL> exec dbms_session.set_identifier('test');
session2 :
执行
SQL> EXECUTE DBMS_MONITOR.CLIENT_ID_STAT_ENABLE(client_id => 'test');
session1:执行一个sql语句
SQL> select count(*) from test;
COUNT(*)
----------
49761
session2 :查看V$CLIENT_STATS可以看到如下的信息,
1* select * from V$CLIENT_STATS
SQL> /
CLIENT_IDENTIFIER
----------------- ---------- -------------------------------------------------- ----------
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
test
三。跟踪session
1.通过client_identifier来跟踪session
EXECUTE DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE(client_id => 'OE.OE',waits => TRUE, binds => FALSE);
---waits 表示等待信息是否记录在trace文件中
---binds 表示是否记录绑定变量的信息
关闭
EXECUTE DBMS_MONITOR.CLIENT_ID_TRACE_DISABLE(client_id => 'OE.OE');
2.跟踪service,module,action
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'testdb',waits => TRUE, binds => FALSE, instance_name => 'testdb');
也可以指定模块名称
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE(service_name => 'testdb',module_name => 'my_mod', waits => TRUE, binds => FALSE,instance_name => 'testdb');
以上两个列子的关闭方法
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE(service_name => 'testdb',instance_name => 'testdb');
EXECUTE DBMS_MONITOR.SERV_MOD_ACT_TRACE_DISABLE(service_name => 'testdb',module_name => 'my_mod', instance_name => 'testdb');
3.通过session id去trace
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id => 144, serial_num => 154,waits => TRUE, binds => FALSE);
关闭
EXECUTE DBMS_MONITOR.SESSION_TRACE_DISABLE(session_id => 27, serial_num => 60);
如果是在当前用户模式下,可以直接输入
EXECUTE DBMS_MONITOR.SESSION_TRACE_ENABLE(waits => TRUE, binds => FALSE);
关闭
EXECUTE DBMS_SESSION.SESSION_TRACE_DISABLE();
4.trace整个实例
EXECUTE DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE,instance_name => ’testdb’);
关闭
EXECUTE DBMS_MONITOR.DATABASE_TRACE_DISABLE(instance_name => ’testdb’);
通过tkprof格式化trace文件后,即可查看
转自:http://blog.chinaunix.net/uid-20185205-id-1972530.html
以下来自另一文
dbms_monitor.session_trace_enable 跟踪某个会话
1、先查出你想跟踪的某个机器的session信息SID,SERIAL#
select SID,SERIAL# from v$session where lower(terminal) like '%yf07%';
2、开启跟踪:
exec dbms_monitor.session_trace_enable(SID,SERIAL#,TRUE) ;
3、查出跟踪文件位置:show parameter user
user_dump_dest参数的值就是跟踪文件存放的位置。
4、取得跟踪文件并分析。
5、关闭跟踪:
exec dbms_monitor.session_trace_disable(SID,SERIAL#,FALSE);
转自:http://blog.csdn.net/caok/article/details/3297469