SELECT * FROM V$SQLTEXT;select username,sid,opname,
       round(sofar*100 / totalwork,0) || '%' as progress,
       time_remaining,sql_text
from v$session_longops , v$sql
where time_remaining <> 0
and sql_address = address
and sql_hash_value = hash_value
或者通过工具plsql developer来查看,

解决方案 »

  1.   

    获得当前台正在发出的sql语句select user_name,sql_text from v$open_cursor where sid in (select sid from (select sid,serial#,username,program from v$session where status='ACTIVE'))
      

  2.   

    看来只用audit了。
    看你信誉是100就告诉你啦!(不是100的人提的问题是不能回答的)
      

  3.   

    没怎么用过跟踪功能,正好手头有点资料,帮贴一下,楼主可以试试看。[Q]如何设置自动跟踪
    [A]用system登录
    执行$ORACLE_HOME/rdbms/admin/utlplan.sql创建计划表
    执行$ORACLE_HOME/rdbms/admin/plustrce.sql创建plustrace角色
    如果想计划表让每个用户都能使用,则
    SQL>create public synonym plan_table for plan_table;
    SQL> grant all on plan_table to public;
    如果想让自动跟踪的角色让每个用户都能使用,则
    SQL> grant plustrace to public;
    通过如下语句开启/停止跟踪
    SET AUTOTRACE ON |OFF | ON EXPLAIN | ON STATISTICS | TRACEONLY | TRACEONLY EXPLAIN[Q]如果跟踪自己的会话或者是别人的会话
    [A]跟踪自己的会话很简单
    Alter session set sql_trace true|false
    Or
    Exec dbms_session.set_sql_trace(TRUE);
    如果跟踪别人的会话,需要调用一个包
    exec dbms_system.set_sql_trace_in_session(sid,serial#,true|false)
    跟踪的信息在user_dump_dest 目录下可以找到或通过如下脚本获得文件名称(适用于Win环境,如果是unix需要做一定修改)
    SELECT p1.value||'\'||p2.value||'_ora_'||p.spid||'.ora' filename
    FROM
    v$process p,
    v$session s,
    v$parameter p1,
    v$parameter p2
    WHERE p1.name = 'user_dump_dest'
    AND p2.name = 'db_name'
    AND p.addr = s.paddr
    AND s.audsid = USERENV ('SESSIONID')
    最后,可以通过Tkprof来解析跟踪文件,如
    Tkprof 原文件 目标文件 sys=n[Q]怎么设置整个数据库系统跟踪
    [A]其实文档上的alter system set sql_trace=true是不成功的
    但是可以通过设置事件来完成这个工作,作用相等
    alter system set events
    '10046 trace name context forever,level 1';
    如果关闭跟踪,可以用如下语句
    alter system set events
    '10046 trace name context off';
    其中的level 1与上面的8都是跟踪级别
    level 1:跟踪SQL语句,等于sql_trace=true
    level 4:包括变量的详细信息
    level 8:包括等待事件
    level 12:包括绑定变量与等待事件