查詢當前正在執行的SQL語句並KILL

zhangsharp20發表於2015-01-05
一、查詢當前正在執行的SQL(其中一種方式):

select a.username, a.sid,b.SQL_TEXT, b.SQL_FULLTEXT  from v$session a, v$sqlarea b where a.sql_address = b.address;



其中v$session檢視結構中的username為執行該條SQL的使用者名稱
                              sid為session ID,即會話標識
                              sql_address為和SQL_HASH_VLAUE的一樣用來標識正在執行的SQL(官方文件解釋:Used with SQL_HASH_VALUE to identify the SQL statement that is currently being executed



v$sqlarea檢視結構中的sql_text為前1000位元組的SQL語句
                             sql_fulltext為所有位元組的SQL語句(即不管超不超過1000位元組均可以顯示出來)
                             address為根指標所在控制程式碼的地址,此值與HASH_VALUE一對一的關係(官方文件解釋:Address of the handle to the parent for this cursor)


二、檢視正在執行的SQL

select sid,serial# from v$session where sid='上面查出來的sid';

v$session檢視中的serial#欄位含義為session serial number,主要是用來唯一標識會話連線的物件,如果一個會話結束而另外一個會話以相同的SID開始的情況下,保證會話級別的命令能夠唯一的作用到正確的會話物件

三、終止該SQL

alter system kill session 'sid,serial#';

如果如此還沒有終止,則需透過系統級別的命令殺死改SQL

SQL> select b.username,b.SPID from v$session a,v$process b where a.PADDR=b.ADDR and a.sid=1511;
 
USERNAME        SPID
--------------- ------------
oracle          6066

其中v$process檢視中username的含義為該程式所屬的OS user
                           SPID的含義為該程式的作業系統程式號

然後透過系統級別命令 kill -9 6066終止即可



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

相關文章