WEB开发网
开发学院数据库Oracle 如何从trace文件中查找引起问题的sql 阅读

如何从trace文件中查找引起问题的sql

 2008-09-28 12:57:04 来源:WEB开发网   
核心提示: 1 VARCHAR2 or NVARCHAR22 NUMBER8 LONG11 ROWID12 DATE23 RAW24 LONG RAW96 CHAR112 CLOB or NCLOB113 BLOB114 BFILEb.) mxl 指最大长度,即变量占用的最大字节数,如何从trace文

1 VARCHAR2 or NVARCHAR2

2 NUMBER

8 LONG

11 ROWID

12 DATE

23 RAW

24 LONG RAW

96 CHAR

112 CLOB or NCLOB

113 BLOB

114 BFILE

b.) mxl 指最大长度,即变量占用的最大字节数,dty=2 and mxl=22 表示NUMBER(22)列

c.) scl 指位数 (对NUMBER列而言)

d.) pre 指小数点位数(对NUMBER列而言)

e.) value 指绑定变量的值

将游标dump中的绑定变量的值和sql语句中绑定变量的值直接对应:

:b1 ~ bind 0

:b2 ~ bind 1

:b3 ~ bind 2

以此类推………

绑定变量可以称为:1, :2,等,或者:a1, :a2等。最关键的是,在sql语句中的排列顺序和变量的dump部分的排列要完全一致。

现在你应该能找到绑定变量(包括长度,数值长度,精度)以及对应的值。

例子:

下面我们举例说明在trace文件中如何提取sql语句。

特别注意:

如果使用字面值替代绑定变量,会导致优化器选择不同的查询路径,从而使得问题可能不会再现。

Example 1:

******************** Cursor Dump ************************
Current cursor: 2, pgadep: 1
Cursor Dump:
----------------------------------------
我们查找cursor 2:
----------------------------------------
Cursor 2 (20139ad0): CURFETCH curiob: 2013bca4
curflg: 7 curpar: 20139ab0
curusr: 0 curses 587a250c
cursor name: select text from view$ where rowid=:1
child pin: 50a5b650, child lock: 50a5a628,
parent lock: 50a5a844
xscflg: 20141466, parent handle: 4f348490, xscfl2: 400
nxt: 2.0x0000006c nxt: 1.0x000001d8
Cursor
frame allocation dump:
frm: -------- Comment -------- Size Seg Off
bhp size: 52/560
bind 0: dty=11 mxl=16(16) mal=00
scl=00 pre=00 oacflg=18 oacfl2=1 size=16
offset=0
bfp=2013e9f4 bln=16 avl=16 flg=05
value=0000138C.0046.0004
当前SQL 语句:
select text from view$ where rowid=:1
绑定变量转换成:
:1 ~ bind 0 - ROWID (dty=11), value = 0000138C.0046.0004
因此我们得到下面的原始sql语句:
select text from view$ where rowid=0000138C.0046.0004

Tags:如何 trace 文件

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接