数据库是oracle8i,客户端上跑了一个企业的应用程序(无源码),想跟踪软件中某一步所执行的sql语句,该如何做?
能否做到只跟踪某一台客户机上(比如:pc1)所执行的sql语句? 请高手指教,先谢了!

解决方案 »

  1.   

    可以。
    步骤如下:
    1.当应用程序运行时,通过v$session的terminal=PC1字段查询出指定客户机上应用程序连接oracle的会话sid,serial#
    2.exec dbms_system.set_sql_trace_in_session(sid,serial#,true);
    3.待应用程序查询结束后,exec dbms_system.set_sql_trace_in_session(sid,serial#,false);
    4.查看trc跟踪文件,结束。
      

  2.   

    谢谢1楼的,请问这个trc跟踪文件在服务器的哪个目录?
      

  3.   

    需要注意:
    1.上面的那个过程是SYS用户的。如果你用别的用户执行,则需要授权;
    2.生成的跟踪文件,如果你主要目的是看SQL情况,则需要用tkprof工具格式化。
    执行以下SQL获取trc文件位置:
    SELECT    d.VALUE
          || '/'
        || LOWER (RTRIM (i.INSTANCE, CHR (0)))
        || '_ora_'
         || p.spid
          || '.trc' trace_file_name
    FROM (SELECT p.spid
            FROM v$session s, v$process p
             WHERE p.addr = s.paddr and s.sid=&sid) 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;
      

  4.   

    简单的方法:
    1.建立个独立测试环境。
    2.到oracle的udump目录下把所有的.trc文件drop
    3.执行:alter system set events '10046 trace name context forever,level 1'; 
    4.一个用户,执行你的企业应用程序。
    5.执行:alter system set events '10046 trace name context off'; 
    6.到oracle的udump目录下看生成的.trc文件就可以了