查詢正在執行的sql語句及該語句執行的時間

mengzhaoliang發表於2008-07-03

/* 2008/07/03 星期四
*蒙昭良
*環境:windowsXP + Oracle10gR2
*查詢正在執行的sql語句及該語句執行的時間
*/

 查詢正在執行的sql語句:
SQL> select   address,sql_text,piece   from   v$session,v$sqltext   where   address=sql_address order by address,piece


從網上摘下:
$session中的last_call_et列表示從STATUS(狀態)改變到當前的時間(單位是秒)。
也就是說,如果session當前是inactive的,則表示inactive的時間
如果session當前是active的,則表示active的時間。
另外需要注意的是last_call_et表示的是last call的時間。
對於單條SQL而言,是指sql執行時間;對於plsql而言,則是指整個plsql的執行時間。
後臺程式一直是active的,因此後臺程式的last_call_et與例項執行時間相近。
查詢方法:
SQL> select sid,serial#,username,status,last_call_et from v$session where status
='ACTIVE' and username is not null order by last_call_et desc;

       SID    SERIAL# USERNAME   STATUS   LAST_CALL_ET
---------- ---------- ---------- -------- ------------
       128        168 SCOTT      ACTIVE           3025
       130        136 SYS        ACTIVE           1236
       125          1 DBSNMP     ACTIVE              3
       137        527 SYS        ACTIVE              0

再根據SID找出執行的SQL或PL/SQL:
select sql_text from v$session a,v$sqltext_with_newlines b
  where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash_value
  and a.sid=&sid order by piece;

 

 SQL> l
  1  select sid,serial#,username,machine,last_call_et,status from v$session
  2  where status='INACTIVE' and username is not null
  3* order by last_call_et
SQL> select sql_text from v$session a,v$sqltext_with_newlines b
  2    where DECODE(a.sql_hash_value, 0, prev_hash_value, sql_hash_value)=b.hash
_value
  3    and a.sid=&sid order by piece;
輸入 sid 的值:  128
原值    3:   and a.sid=&sid order by piece
新值    3:   and a.sid=128 order by piece

SQL_TEXT
----------------------------------------------------------------
insert into test
select * from test


可以看到上面的語句已經執行了3025秒,相當於50分鐘.


如果改語句不重要,可以kill掉
SQL> alter system kill session '128,168';

系統已更改。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12778571/viewspace-368969/,如需轉載,請註明出處,否則將追究法律責任。

相關文章