# **取得SQL层的trace**#
可以直接将结构体中取得相应sql语句的trace,当然建立一个包体在其中的一个过程或者方法里取得sql语句的trace也可以。
##下面是在结构体中取得相应的sql语句的trace。##
declare
tool int;
begin
--开启当前session的trace
dbms_session.set_sql_trace(sql_trace => true);
--trace记录的是下面这段sql语句的执行详情
SELECT distinct cyinm.tool_no into tool
FROM CUX_14497_BEGINNING_CARRYING cbc,
CUX_14497_Y_ITEM_NUMBER_MST cyinm,
CUX_14497_y_item_no_sup_mst cyinsm,
mtl_system_items_b msib,
financials_system_params_all fspa
WHERE fspa.inventory_organization_id = msib.organization_id
AND fspa.org_id = fnd_profile.value('ORG_ID')
AND msib.segment1 = cbc.y_item_no
AND msib.inventory_item_id = cyinm.inventory_item_id
AND msib.organization_id = cyinm.organization_id
AND cyinm.y_item_no_id = cyinsm.y_item_no_id
AND cbc.supplier_id = cyinsm.supplier_id
AND cyinsm.spec=9;
end;
执行完成后我们需要查看生成的trace所在位置。
--查看生成trace的所在路径
SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, 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 T.INSTANCE
FROM V$THREAD T, V$PARAMETER V
WHERE V.NAME = 'thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I,
--犹豫配置文件存在错误,当时我所用的路径不是在这个目录
(SELECT VALUE FROM V$PARAMETER WHERE NAME = 'user_dump_dest') D;
突然发现可以通过下面这段代码可直接查看trace文件的生成位置,文件的所在位置是对的但是文件名字好像不对,还是要通过上面的代码查看trace文件名。
select * from v$diag_info where name='Default Trace File';
可能是因为oracle版本的原因。
此时可在服务器上相应的位置查找到生成的trace文件
这是通过WinSCP在服务器上查看生成的trace
然后通过putty软件的tkporf命令对生成的trace文件进行可读性解析:
[tkprof TRAIN_ora_5646.trc trc187262.txt