工作环境:
1、本地工作环境为WIN7 旗舰版 64位系统,本地装有11.2.0.1.0 版本的oracle数据库;
2、服务器环境为:linux,oracle版本为:11.2.0.4.0 ;
3、本地使用pl/sql工具:
PL/SQL Developer
Version 9.0.6.1665
01.275052 - Unlimited user license
Windows 7 (64-bit) 6.1 Build 7600
Language: 简体中文 (英宇世纪)
使用10046 trace 目的:
分析SQL执行的顺序;
操作步骤:
1、以SYSDBA登陆服务器数据库;
2、新建sql窗口;
3、命令执行顺序如下:
1)、开启级别为12的Trace,level后面的数字设置了Trace的级别:
ALTER SESSION SET EVENTS '10046 trace name context forever, level 12'
2)、执行需要跟踪的SQL语句。
也可以对单挑语句进行跟踪:altersession set events 'sql_trace [sql: sql_id=g3yc1js3g2689 |sql_id=7ujay4u33g337]bind=true, wait=true';
3)、关闭Trace,任何级别
ALTER SESSION SET EVENTS '10046 trace name context off'
4)、获取生成的trace文件路径
SELECT D.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' ||
P.SPID || '.trc' TRACE_FILE_NAME
FROM (SELECT P.SPID
FROM SYS.V$MYSTAT M, SYS.V$SESSION S, SYS.V$PROCESS P
WHERE M.STATISTIC# = 1
AND S.SID = M.SID
AND P.ADDR = S.PADDR) P,
(SELECT T.INSTANCE
FROM SYS.V$THREAD T, SYS.V$PARAMETER V
WHERE V.NAME = 'thread'
AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE))) I,
(SELECT VALUE FROM SYS.V$PARAMETER WHERE NAME = 'user_dump_dest') D;
4、取得文件使用notepad++打开,直接找到,trace中执行的SQL语句,文件中会打印完整的语句,打开trc文件后截图如下:找出所有的obj#=***;
5、在PL/SQL的SQL窗口中执行如下语句,查看obj门对应的表:
查看obj们对应的表名:
SELECT OBJECT_ID, OBJECT_NAME
FROM DBA_OBJECTS
WHERE OBJECT_ID IN (90631, 90627, 90598, 90595);