我执行一个重建索引,都好几个小时了。所以非常想知道它是否在执行。
通过V$sqltext查询出来的应该是缓存区曾经执行过的语句,不是正在执行的,哪位知道怎么查询。
谢谢啊,我着急啊。

解决方案 »

  1.   

    1.获得Library cache Pin等待对象
    select addr,kglhdadr,kglhdpar,
              kglnaown,kglnaobj,kglnahsh,kslhdobj
      from x$kglob
    where kglhdadr in (select p1raw
                                       from v$session_wait
                                     where event like 'library%')
    2.获得持有对象的session信息
    select a.sid,a.username,a.program,b.addr,
              b.kglpnadr,b.kglpnuse,b.kglpnses,
              b.kglpnhdl,b.kglpnlck,b.kglpnmod,
              b.kglpnreq
      from v$session a,x$kglpn b
    where a.saddr=b.kglpnuse
          and b.kglpnmod<>0
          and b.kglpnhdl in (select p1raw
                                          from v$session_wait
                                          where event like 'library%')
    3.获得持有对象用户的执行代码
    select sql_text
      from v$sqlarea
    where (v$sqlarea.address,v$sqlarea.hash_value
        in (
     select sql_address,sql_hash_value
        from v$session 
       where sid in (
     select sid from v$session a, x$kglpn b
       where a.saddr=b.kglpnuse
    and b.kglpnmod<>0
    and kglpnhdl in (
       select p1raw from v$session_wait
          where event like 'library%'))) 
      

  2.   

    可以进入管理控制台em中,查看正在active的会话,找到你自己的会话id,双击会话,可以看到正在执行的sql
      

  3.   

    select * from v$process a,v$session b , v$sqlarea c
    where a.ADDR=b.PADDR and b.SQL_HASH_VALUE=c.HASH_VALUE
    and b.USERNAME is not null