一、查询当前正在执行的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博客 ” ,链接:https://blog.itpub.net/28211342/viewspace-2131308/
,如需转载,请注明出处,否则将追究法律责任。