`

如何直接阅读Oracle中的trace文件(原创)

 
阅读更多

大部分情况下,我们可以利用tkprof工具格式化trace文件,让trace文件便于阅读,但trkprof产生的是trace文件的汇总结果,如果需要知道sql每一步确切执行了什么,我们也只能直接阅读trace
==============================================
APPNAME mod='%s' mh=%lu act='%s' ah=%lu

==============================================

APPNAME:Application name setting。在Oracle 7.2和以上版本中出现。这个名称可以由DBMS_APPLICATION_INFO包来设定。
mod:模块名
mh:模块的散列值
act:动作,如DBMS_APPLICATION_INFO
ah:动作的散列值
示例

APPNAME mod='SQL*Plus' mh=3669949024 act='' ah=4029777240

===============================================
PARSING IN CURSOR # len=X dep=X uid=X oct=X lid=X tim=X hv=X ad='X'
statement....
END OF STMT

=============================================
==
CURSOR:Cursor number
len :Length of SQL statement,SQL语句的长度
dep :Recursive depth of the cursor,当前SQL语句的递规深度,如果为0则表示是用户提交的SQL,为1则是由于用户SQL而导致Oracle后台自己执行的SQL,为2则是由1级SQL继续诱发的下一级SQL。
uid :Schema user id of parsing user,当前模式的用户id和lid不同。我们知道当使用alter session set current_schema=NEWUSER命令后,用户OLDUSER在执行需要NEWUSER的相关权限时才会切换为NEWUSER,则这时代UID即为OLDUSER,lib为NEWUSER
oct :Oracle command type. oracle的命令类型
lid :Privilege user id. 核对访问权限的id
tim :Timestamp。在Oracle9i之前单位是1%秒,9i之后则是1/1,000,000秒。利用这个值可以计算一个SQL执行了到底多长时间。这个值就是当前行被写入trace文件时数据库V$TIMER视图的值。
hv :Hash id. sql的散列id
ad :SQLTEXT address,SQLTEXT的地址,跟V$SQLAREA和V$SQLTEXT视图中的ADDRESS字段值相等。
statement :The actual SQL statement being parsed.实际的sql语句

示例
PARSING IN CURSOR #2 len=60 dep=0 uid=55 oct=6 lid=55 tim=1303778511213906 hv=478751424 ad='2ce279a4'
update employees set salary=1.1*salary where employee_id=100
END OF STMT

======================================================
PARSE #<CURSOR>:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0
EXEC #<CURSOR>:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0
FETCH #<CURSOR>:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0
UNMAP #<CURSOR>:c=0,e=0,p=0,cr=0,cu=0,mis=0,r=0,dep=0,og=4,tim=0

======================================================

PARSE :Parse a statement. 解析一个SQL
EXEC :Execute a pre-parsed statement. 执行已经解析完毕的SQL
FETCH :Fetch rows from a cursor. 从游标中得到数据,通常指select返回记录
UNMAP :如果游标使用了临时表(temporary table), 当游标关闭的时候将会看到UNMAP,用以从程序中间结果中释放不在用到的临时段
c:CPU time,CPU时间 (100th's of a second Oracle7, 8. Microseconds in Oracle 9 onwards).
e:Elapsed time,消耗的时间 (100th's of a second Oracle7, 8. Microseconds in Oracle 9 onwards).
p:Number of physical reads,物理读的数量.
cr:Number of buffers retrieved for Consistent reads,consistent模式下的读次数,个人认为可以理解为query模式下的读次数
cu:Number of buffers retrieved in current mode,current模式下的读次数
mis:Cursor missed in the cache,在库缓存池中丢失的游标
r:Number of rows processed,处理的行数
dep:Recursive call depth (0 = user SQL, >0 = recursive),递归语句的深度
og:Optimizer goal,优化目标: 1=All_Rows, 2=First_Rows, 3=Rule, 4=Choose
tim:Timestamp (large number in 100ths of a second).计时器
示例
FETCH #2:c=0,e=106,p=0,cr=3,cu=0,mis=0,r=1,dep=1,og=4,tim=6005498548671
======================================================
ERROR #%d:err=%d tim=%lu
======================================================

当执行或者取数据发生错误
err :Oracle error code (e.g. ORA-XXXXX) at the top of the stack,Oracle 错误代码(e.g. ORA-XXXXX)
tim :Timestamp,时间戳
示例
ERROR #2:err=1013 tim=431155915
======================================================
STAT # id=N cnt=0 [pid=0 pos=0 obj=0 op='SORT AGGREGATE ']

======================================================
CURSOR的执行计划.
CURSOR :Cursor which the statistics apply to,游标号
id :Line of the explain plan which the row count applies to,执行计划中各操作在执行计划树中的编号,从1开始
cnt :Number of rows for this row source,执行计划此为第几行
pid :Parent id of this row source. 执行计划中,这一步的父ID
pos :Position in explain plan,执行计划的位置
obj :Object id of row source (if this is a base object),引用对象的对象ID
op : The row source access operation,进行操作的原文描述
示例
STAT #2 id=2 cnt=0 pid=1 pos=1 obj=510 op='TABLE ACCESS BY INDEX ROWID OBJECT_USAGE (cr=2 r=0 w=0 time=83 us)'
STAT #2 id=3 cnt=1 pid=2 pos=1 obj=511 op='INDEX RANGE SCAN I_STATS_OBJ# (cr=1 r=0 w=0 time=43 us)'

======================================================
XCTEND rlbk=%d rd_only=%d

======================================================

XCTEND是事务结束的标志.
rlbk:1 if a rollback was performed, 0 if no rollback (commit),1表示回滚,0表示提交
rd_only:1 if transaction was read only, 0 if changes occurred,只读标记,1表示事务是只读的,0表示可以进行修改,提交或返回
示例
XCTEND rlbk=0, rd_only=0
======================================================
BINDS #%d:
bind 0: dty=2 mxl=22(22) mal=00 scl=00 pre=00 oacflg=03 oacfl2=0 size=24 offset=0
bfp=02fedb44 bln=22 avl=00 flg=05
value=10

======================================================

BIND :Variables bound to a cursor,游标号
bind N :The bind position being bound,绑定游标的位置,从0开始,0是第一个游标
dty :Data type,数据类型
mxl :Maximum length of the bind variable (private max len in paren),绑定变量的最大长度
mal :Array length,最大数组长度(当用到绑定变量数组或批量操作时)
scl :Scale,比例
pre :Precision,精度
oacflg :Special flag indicating bind options,内部标记,若是奇数,则绑定变量为空值,允许有空值。
oacflg2 :Continuation of oacflg,内部标记的扩展
size :Amount of memory to be allocated for this chunk,缓冲区的大小
offset :Offset into this chunk for this bind buffer,缓冲区的chunk大小
bfp :Bind address,绑定变量地址
bln :Bind buffer length,绑定变量缓冲区长度
avl :Actual value length (array length too),实际值的长度
flg :Special flag indicating bind status,内部标记
value :The actual value of the bind variable,绑定变量的实际值,有可能是16进制转储
示例

BINDS #2:
kkscoacd
 Bind#0
  oacdty=11 mxl=16(16) mxlc=00 mal=00 scl=00 pre=00
  oacflg=18 fl2=0001 frm=00 csi=00 siz=16 off=0
  kxsbbbfp=b7f1b944  bln=16  avl=16  flg=05
  value=0000E899.0018.0001

======================================================
WAIT #[CURSOR]: nam="event name" ela=0 p1=0 p2=0 p3=0

======================================================

#CURSOR:游标号
WAIT :An event that we waited for,表示正在进行等待某个事件
nam :What was being waited for,等待事件名称
ela :Elapsed time for the operation,等待事件所花的时间,以0.01秒为单位
p1 :P1 for the given wait event,P1,P2,P3可查阅references文档
p2 :P2 for the given wait event.
p3 :P3 for the given wait event.
示例

WAIT #1: nam='enq: TX - row lock contention' ela= 2961282 name|mode=1415053318 usn<<16 | slot=196643 sequence=435 obj#=51857 tim=1303778558416950


参考至:《Oracle专家高级编程》Thomas kyte著
         《让Oracle跑得更快》谭怀远著
         https://support.oracle.com/CSP/main/article?cmd=show&type=NOT&id=39817.1
         http://blog.csdn.net/kamus/article/details/223451
         http://dbaoracle.itpub.net/post/901/5547
         http://dbaoracle.itpub.net/post/901/5547
本文原创,转载请注明出处、作者
如有错误,欢迎指正
邮箱:czmcj@163.com

0
0
分享到:
评论

相关推荐

    oracle系统状态trace文件分析器

    oracle系统状态trace文件分析器 当系统hang住时,或者进程间有阻塞时,你可以产生下面两种跟踪文件,一种是进程状态跟踪文件,一种是系统状态跟踪文件:  process state dumps ==&gt; 一个进程的所有对象状态,...

    oracle 诊断事件列表trace文件 ORA报错

    包含了oracle诊断 oracle 诊断事件列表trace文件 ORA报错信息

    Oracletrace

    ### Oracle中的Trace跟踪详解 #### 一、概述 在Oracle数据库管理中,追踪(Trace)是一种重要的工具,它可以帮助数据库管理员(DBA)诊断问题、优化性能以及理解SQL语句的执行过程。Oracle提供了多种追踪手段,如...

    Tidy 代替tkprof,Oracle Trace 跟踪文件格式化工具

    Oracle数据库在进行性能调优时,经常会涉及到对跟踪文件(Trace Files)的分析。这些跟踪文件包含了数据库执行的详细信息,如SQL语句、执行计划、等待事件等,但原始的跟踪文件数据往往混乱且不易读。这时,我们就...

    BLOG_Oracle_lhr_【方法整理】Oracle 获取trace跟踪文件名的几种常用方式.pdf

    在Oracle数据库管理与维护过程中,跟踪文件(trace file)是一种非常重要的诊断工具,它可以帮助DBA和开发人员定位问题并解决性能瓶颈。本文将详细介绍如何获取Oracle的trace跟踪文件名,包括通过`user_dump_dest`...

    XXX_EBS_TRACE文件详解

    TRACE文件是Oracle数据库在运行过程中生成的一种特殊日志文件,它记录了数据库操作的详细信息,对于诊断问题、性能调优等方面具有不可替代的作用。本文将详细探讨如何生成、获取以及解读TRACE文件,特别是针对Oracle...

    oracle控制文件损坏恢复

    在Oracle数据库管理过程中,控制文件作为数据库的关键组成部分之一,其健康状态对于数据库的正常运行至关重要。控制文件存储了关于数据库物理结构的重要信息,如数据文件的位置、重做日志文件的位置等。一旦控制文件...

    linux下向oracle中导入dmp文件

    在实际工作中,我们经常需要将 dmp 文件导入到 Oracle 数据库中。下面我们将详细介绍如何在 Linux 下向 Oracle 数据库中导入 dmp 文件。 首先,我们需要登录 Linux 系统,以 oracle 用户登录。如果我们以 root 用户...

    oracle导出txt文件方法

    Oracle 文本导出的原理是将 SELECT 输出结果直接输出到文本文件中。使用 spool 文件名方式指定输出结果。 在使用 spool 命令时,我们需要设置一些参数以便于输出结果。这些参数包括: * set echo off:用于关闭...

    navicat链接oracle文件,OCI文件 oracle11版本 OCI文件链接oracle11

    在本文中,我们将深入探讨如何使用Navicat连接到Oracle数据库,特别是涉及Oracle Call Interface (OCI) 文件在Oracle 11版本中的应用。 首先,Oracle Call Interface (OCI) 是Oracle提供的一种C语言编程接口,它...

    读取oracle dmp文件进行查看

    Oracle expdp/exp dump备份文件恢复工具OraDumpReader可以直接读取查看oracle导出工具(包括exp和expdp)所产生的dump文件中的数据。 当这些dmp文件被病毒软件加密破坏后,仍可以通过扫描整个文件,找出剩余的数据。

    直接拷贝数据文件实现Oracle数据迁移

    然而,在特定条件下,如服务器环境相同且Oracle版本一致,直接拷贝数据文件是一种快速而有效的方法。本文将详细介绍如何通过直接拷贝数据文件来实现在新服务器上的Oracle数据迁移。 首先,我们需要了解迁移的背景。...

    oracle客户端配置文件

    在压缩包文件"instantclient_11_2"中,包含了Oracle Instant Client的轻量级版本,它不包含完整的Oracle客户端,但提供了基本的连接和查询功能。Instant Client通常包括oci.dll、libclntsh.so等库文件,以及相关的...

    修改oracle dmp文件版本

    在不同版本的Oracle数据库之间进行数据迁移时,可能会遇到版本兼容性问题,比如高版本的DMP文件无法直接导入到低版本的数据库中。这时,就需要了解如何“修改Oracle DMP文件版本”。 首先,我们得明白Oracle Data ...

    oracle最新OCI文件最新的19.3版本oracle的OCI文件,兼容其下所有版本.zip

    oracle最新OCI文件,兼容一切版本! 本地安装的是64位的Oracle,但由于Navicat仅支持32位的,因此我们还需下载一个32位的客户端。 解决方案 下载32位客户端,配置进navicat中。 第1步:下载 最新OCI文件最新...

    Oracle可执行文件,包含导入导出可执行文件

    这个转储文件可以在需要时用`impdp`工具导入到其他Oracle数据库中。`expdp`支持多种导出模式,例如全库导出、用户模式导出、表或视图级别的导出,以及基于条件的导出。此外,还可以通过参数设置来控制导出的详细程度...

    Oracle控制文件的备份和恢复

    假设通过日志找到了之前创建的Trace文件,可以利用该文件中的信息来重建控制文件: ```sql SQL&gt; CREATE CONTROLFILE SET DATABASE 'sales' RESETLOGS DATABASE ID 12345678901234567 ENCRYPTION ('ON') ... ``` ...

    oracle获得跟踪文件的sql查询语句

    在Oracle数据库管理中,跟踪文件(Trace Files)是用于记录数据库操作详细信息的重要工具,它可以帮助DBA(数据库管理员)诊断性能问题、错误和异常。本文将深入探讨如何通过SQL查询语句在Linux和Windows环境下获取...

    Oracle 主要配置文件介绍

    - **定义**: `/etc/oratab` 文件描述当前系统中创建的所有 Oracle 数据库实例及其启动与关闭的控制情况。 - **示例内容**: ```bash cams:/u01/app/oracle/product/8.1.7:Y ``` - **解释**: - `cams`: 实例 ID。 ...

    Oracle数据库引用文件

    Oracle数据库引用文件Oracle数据库引用文件Oracle数据库引用文件Oracle数据库引用文件Oracle数据库引用文件Oracle数据库引用文件Oracle数据库引用文件

Global site tag (gtag.js) - Google Analytics