查询锁表的进程信息

select sess.sid,
sess.serial#,
lo.oracle_username,
lo.os_user_name,
ao.object_name,
lo.locked_mode
from v$locked_object lo, dba_objects ao, v$session sess
where ao.object_id = lo.object_id
and lo.session_id = sess.sid;

可以根据用户查询(如用户USER1)

SELECT b.sid      oracleID,
       b.username 登录Oracle用户名,
       b.serial#,
       spid       操作系统ID,
       paddr,
       sql_text   正在执行的SQL,
       b.machine  计算机名
  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 = 'USER1'

根据查出的锁进程ID进行kill进程

alter system kill session 'sid,serial#';
注:其中的sid及serial#是查出来的,其格式必须是'sid,serial#',中间用英文逗号分隔。

更快捷的方式,将查杀所的语句查询并拼接出来,直接执行

SELECT 'alter system kill session ''' || c.sid || '' || ',' || c.serial# || ''';',  
       a.object_id,  
       a.session_id,  
       b.object_name,  
       c.*  
  FROM v$locked_object a, dba_objects b, v$session c  
 WHERE a.object_id = b.object_id  
   AND a.SESSION_ID = c.sid(+)  
   AND schemaname = 'USER1'  -- 查询是哪登陆用户的数据库
 ORDER BY logon_time
最后修改:2022 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏