目的,想知道,我的中间件向后台发送了那些sql语句。通过,v$session 发现 所有的username,osuser相同,terminal,program 为空,
通过logon_time 不容易锁定,因为在同一时间可能有很多用户访问 。请朋友们,帮忙,推荐个解决方案 .

解决方案 »

  1.   

    好象是通过V$sessiion的ID关联V$SQL等试图。
    具体的不记得了。
      

  2.   

    至于username相同的问题,这个是当然的。
    对于数据库来讲,他只知道这个请求是从哪个IP的客户端(机器名),哪个用户oracle用户发出的。
    这样的话当然是同一个值。
    我建议你在中间件向数据库发出请求之前留下log,这样便于管理和分析。
      

  3.   

    v$session 中有标识 登陆的中间件,机器名称。 username  。
    然后关联 v$sql 和 v$sqlarea就可以取 
      

  4.   


    中间件,是成品 。
    如果,可以配置log 我就不用去数据库找sql啦。
      

  5.   

    这是我以前的一个实验总结的结果。
    希望对你有帮助。@d:\oracle\ora92\rdbms\admin\prvtutil.plb
    CREATE public SYNONYM DBMS_SYSTEM FOR SYS.DBMS_SYSTEM;
    GRANT EXECUTE ON DBMS_SYSTEM TO public;
    select sid,serial#,program... from v$session;  察看session情况
    execute dbms_system.set_sql_trace_in_session ( SID, serial#, TRUE);针对某个SID打开sql_trace
    或者ALTER SESSION SET SQL_TRACE TRUE  设定自己的sql_trace
     
    当结束了SQL_trace以后,在udump目录下会出现一个*.trc文件,
    可以使用tkprof 文件名.trc 想要解析成的目标文件名
    然后打开可以查看SQL的执行计划 
      

  6.   

    如果是还活着的sessionselect t1.username,t2.sql_text 
    from v$session t1,v$sqltext t2
    where t1.sql_address = t2.address