ITPub博客

首页 > 数据库 > Oracle > 查询当前正在执行的SQL语句并KILL

查询当前正在执行的SQL语句并KILL

原创 Oracle 作者:zhangsharp20 时间:2015-01-05 16:44:22 0 删除 编辑
一、查询当前正在执行的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/29802484/viewspace-1390968/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-08-12

  • 博文量
    382
  • 访问量
    801423