菜单

全面介绍Oracle的诊断事件

2020年1月14日 - 计算机数据

Oracle为RDBMS提供了多种的诊断工具,诊断事件(Event)是其中一种常用、好用的方法,它使DBA可以方便的转储数据库各种结构及跟踪特定事件的发生。

10046event可以跟踪记录orale有关sql执性语句情况。跟踪记录文件记录在user_dump_dest指定的目录下。

oracle sql跟踪方法:
1、sql_trace

打开跟踪:alter session set sql_trace=true;
为跟踪文件做标记:alter session set
tracefile_identifier=’look_for_me’;
停止跟踪:alter session set sql_trace=false;
最后生成的跟踪文件可以采用tkprof工具生成来查看。

一、Event的通常格式及分类

其中有四种level:

2、10046跟踪代码
跟踪界别介绍:
Level 0 停用SQL跟踪,相当于SQL_TRACE=FALSE
Level 1 标准SQL跟踪,相当于SQL_TRACE=TRUE
Level 4 在level 1的基础上增加绑定变量的信息
Level 8 在level 1的基础上增加等待事件的信息
Level 12 在level 1的基础上增加绑定变量和等待事件的信息

1、 通常格式如下:

打开跟踪:
GRANT ALTER SESSION TO lttfm; –必须具有alter session权限
alter session set events ‘10046 trace name context forever,level
12’;–当前用户设置
或者在init.ora文件中插入下面的行:event = 10046 trace name context
forever,level 12;–为全局设置

EVENT=事件名称动作跟踪项目范围限定

 

关闭跟踪:
alter session set events ‘10046 trace name context off’;–关闭用户跟踪

2、 Event分类

打开事件跟踪:

注:sql_金沙国际唯一官网,trace和10046设置代码跟踪只能针对本会话或者系统级进行会话跟踪,具体设置某个非本会话的跟踪需要采用oradebug或者
dbms_system.set_ev或者dbms_monitor.session_trace_enable。

诊断事件大体上可以分为四类:

  1. 针对所有session,在initsid.ora里设置-打开 或 alter system
    set:event=’10046 trace name context forever,level n’ 
    [scope=spfile]
      –需要重启oracle
  2. 针对所有session,在initsid.ora里设置-关闭 或 alter system
    set:event=”  [scope=spfile] 
     –需要重启oracle
  3. 针对当前session,打开:alter session set events=’10046 trace name
    context forever,level n’
      –立即生效
  4. 针对当前session,关闭:alter session set events=’10046 trace name
    context off’
      –立即生效
  5. 针对其他session,如何跟踪:

3、使用oradebug
–用如下语句找出要跟踪的spid
select * from v$session a where audsid = userenv(‘sessionid’);
–查询当前的sessionid
select s.USERNAME,
s.OSUSER,
s.SID,
s.PADDR,
s.PROCESS,
p.spid os_process_id,
p.pid oracle_process_id
金沙国际棋牌下载官网,from v$session s, v$process p
where s.paddr = p.addr
and s.username = upper(‘LTWEBGIS’)
and s.SID = 145;

a.
转储类事件:它们主要用于转储Oracle的一些结构,例如转储一下控制文件、数据文件头等内容。

step1:确定要跟踪的pid(oracle的processid) 或 spid(os的进程pid):

–设置跟踪进程id。
SQL> connect / as sysdba
SQL> oradebug setospid
5672;该语句为跟踪其他会话(5672为v$process的spid),

b.
捕捉类事件:它们用于捕捉一些Error事件的发生,例如捕捉一下ORA-04031发生时一些Rdbms信息,以判断是Bug还是其它原因引起的这方面的问题。

SELECT a.sid, a.serial#, b.spid, b.pid, a.username, a.osuser,
a.machine 

若跟踪本会话,执行 oradebug setmypid。

SQL> connect / as sysdba
SQL> oradebug setorapid 15 –输入的15为v$process的pid

c.
改变执行途径类事件:它们用于改主一些Oracle内部代码的执行途径,例如设置10269将会使Smon进程不去合并那些Free的空间。

FROM v$session a, v$process b

–设置跟踪文件大小无限制
SQL> oradebug unlimit;
–设置跟踪,级别8
SQL> oradebug event 10046 trace name context forever,level 8;
已处理的语句

d.
跟踪类事件:这们用于获取一些跟踪信息以用于Sql调优等方面,最典型的便是10046了,将会对Sql进行跟踪。

WHERE a.username IS NOT NULL AND a.paddr=b.addr;

–关闭跟踪
SQL> oradebug event 10046 trace name context off;

3、 说明:

step2:以sysdba的身份登陆sqlplus

执行该语句(SQL> oradebug setospid 5672;)时,提示“ORA-01031:
权限不足”,
原因:oradebug是sysdba的命令(一般用户执行提示权限不足),而且是sqlplus特有的命令,不能在plsql工具中执行(否则提示无效sql)。
可以用oradebug help命令查看oradebug工具说明。

a.
如果immediate放在第一个说明是无条件事件,即命令发出即转储到跟踪文件。

step3:初始化跟踪,oradebug setpid pid_n | oradebug setospid
spid_n


**
4、dbms_system(必须用sys用户执行)**
exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le
=>8 ,nm => ”);–会话id等参数必须设置正确,否则trace无法生成
生成后可用sql语句查看trace文件位置。

b. trace
name位于第二、三项,除它们外的其它限定词是供Oracle内部开发组用的。

step4:打开跟踪,oradebug event 10046 trace name context forever,lever
n

–停止跟踪
exec dbms_system.set_ev(si => 159,se => 254,ev => 10046,le
=>0 ,nm => ”);

c.
level通常位于1-10之间(10046有时用到12),10意味着转储事件所有的信息。例如当转储控制文件时,level1表示转储控制文件头,而level
10表明转储控制文件全部内容。

step5:关闭跟踪,oradebug event 10046 trace name context off

5、dbms_monitor
exec dbms_monitor.session_trace_enable(session_id =>
136,serial_num => 4,waits => true,binds => true);
exec dbms_monitor.session_trace_disable(session_id =>
136,serial_num => 4);
如果不设置session_id或者设置为null,则跟踪当前会话

d. 转储所生成的trace文件在user_dump_dest初始化参数指定的位置。

其他:oradebu还可以设置跟踪文件的fullpathname,oradebug
tracefile_name filepec

6、dbms_support
exec dbms_support.start_trace_in_session(sid => 1234,serial#
=> 56789,waits => true,binds => true);
exec dbms_support.stop_trace_in_session(sid => 1234,serial#
=> 56789);
dbms_support默认情况下,系统不安装这个包。如果需要使用的话,需进行单独设置。在$ORACLE_HOME/rdbms/admin/目录下应该存在
dbmssupp.sql,prvtsupp.plb这两个文件,执行这两个文件后才可使用,如果别的用户要使用,需要进行相应的授权,并创建同义词。

跟踪类别

  6.使用dbms_system

注:3,4,5,6这几种跟踪方法都是在sys的用户下才能执行,可对任意会话进行跟踪。

事件名称

Dbms_system.set_ev (
si binary_integer, — SID
se binary_integer, — Serial#
ev binary_integer, — Event code or number to set.
le binary_integer, — Usually level to trace
cm binary_integer — When to trigger (NULL = context forever.)
 
To enable 10046 level 12 tracing for SID 22 with a serial# of 99 we
would execute the set_ev procedure as shown here:
Exec dbms_system.set_ev(12,22,10046,12,’’);
To disable 10046 tracing enter the following:
Exec dbms_system.set_ev(12,22,10046,0,’’);

获取跟踪文件:
1)oradebug获取跟踪文件
–使用oradebug获取本会话跟踪文件位置
SQL> oradebug setmypid
SQL> oradebug tracefile_name

动作 (Action)

–获取任意会话跟踪文件位置
SQL> oradebug setospid 5392
已处理的语句
SQL> oradebug tracefile_name
d:oracleproduct10.2.0adminfgisdbudumpfgisdb_ora_5600.trc

Name


2)sql获取跟踪文件

–sql查看当前session跟踪文件位置
SELECT d.value || ” || lower(rtrim(i.instance_name, chr(0))) ||
‘_ora_’ ||
p.spid || ‘.trc’ trace_file_name
FROM (SELECT p.spid
FROM v$mystat m, v$session s, v$process p
WHERE m.statistic# = 1
AND s.sid = m.sid
AND p.addr = s.paddr) p,
(SELECT instance_name FROM v$instance) i,
(SELECT VALUE FROM v$parameter WHERE NAME = ‘user_dump_dest’) d;

跟踪项目

–以下sql为查询输入的spid的会话跟踪文件
select d.value || ” || lower(rtrim(i.instance_name, chr(0))) ||
‘_ora_’ ||
&spid || ‘.trc’ trace_file_name
from (SELECT instance_name FROM v$instance) i,
(select value from v$parameter where name = ‘user_dump_dest’) d;

查看跟踪级别

1)查看当前session的跟踪级别(必须在sys用户下执行)
declare
event_level number;
begin
dbms_system.read_ev(10046,event_level);
dbms_output.put_line(to_char(event_level));
end;

2)执行如下语句查看跟踪事件的跟踪级别

SQL> oradebug setospid spid –先指定要查看跟踪级别的spid
SQL> oradebug eventdump session
10046 trace name CONTEXT level 8, forever

范围限定

注:如果开启了跟踪会话,但之后数据库关闭,那么跟踪自动关闭。

转储类事件

转自:http://www.cnblogs.com/lanzi/archive/2012/07/31/2616606.html

immediate

Trace

name

blockdump

redohdr

file_hdrs

controlf

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图