不求甚解

此博客为个人学习之用,如与其他作品雷同,纯属巧合。
随笔 - 155, 文章 - 1, 评论 - 2, 阅读 - 10万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Q:查看锁表进程,及杀死所有锁表进程sql

Posted on   三年三班王小朋  阅读(210)  评论(0编辑  收藏  举报

 查看锁表进程

复制代码
SELECT DISTINCT decode(s.inst_id, 1, 'DB1', 2, 'DB2') 数据库服务器,
                decode(s.BLOCKING_SESSION,
                       '',
                       S.USERNAME,
                       '--' || s.USERNAME) 登陆用户名,
                O.OWNER || '.' || O.OBJECT_NAME 锁的对象,
                S.SID,
                decode(S.BLOCKING_SESSION,
                       '',
                       '根锁为此会话',
                       '根锁会话:' || S.BLOCKING_SESSION) 阻塞SID,
                S.BLOCKING_SESSION_STATUS STATUS,
                (CASE
                  WHEN SQL_TEXT IS NULL THEN
                   '(SID:' || S.SID || ')会话 SQL已跑完'
                  ELSE
                   '(SID:' || S.SID || ')会话 正执行SQL:' || SQL_.SQL_TEXT
                END) SQL_TEXT,
                s.CLIENT_INFO,
                LO.REQUEST,
                S.STATE,
                S.EVENT,
                S.MACHINE,
                S.LOGON_TIME,
                S.INST_ID,
                S.BLOCKING_SESSION,
     
                       'ALTER SYSTEM KILL SESSION ''' || S.SID || ',' ||
                       S.SERIAL# || ''';',
                       '' KILL
  FROM GV$SESSION S
  LEFT JOIN GV$SQL SQL_
    ON SQL_.SQL_ID = S.SQL_ID
   AND SQL_.INST_ID = S.INST_ID
  JOIN GV$LOCKED_OBJECT L
    ON L.SESSION_ID = S.SID
   AND L.INST_ID = S.INST_ID
  JOIN ALL_OBJECTS O
    ON L.OBJECT_ID = O.OBJECT_ID
  JOIN GV$LOCK LO
    ON (LO.BLOCK != 0 OR LO.REQUEST != 0)
WHERE LO.SID = L.SESSION_ID
   AND LO.SID = S.SID
   AND LO.INST_ID = L.INST_ID
   AND LO.INST_ID = S.INST_ID
ORDER BY s.inst_id, S.BLOCKING_SESSION, s.SID DESC;
复制代码

/*****************************************

*Oracle数据库操作中,
*锁表查询以及解锁和kill操作
*****************************************/
--查看锁表记录条数
SELECT COUNT(*) FROM V$LOCKED_OBJECT;
--查看锁表记录
SELECT * FROM V$LOCKED_OBJECT;
--查看被锁表
SELECT B.OWNER, B.OBJECT_NAME, A.SESSION_ID, A.LOCKED_MODE
  FROM V$LOCKED_OBJECT A, DBA_OBJECTS B
WHERE B.OBJECT_ID = A.OBJECT_ID;
--查看锁表session
SELECT B.USERNAME, B.SID, B.SERIAL#, LOGON_TIME
  FROM VLOCKEDOBJECTA,VSESSION B
WHERE A.SESSION_ID = B.SID
ORDER BY B.LOGON_TIME;
--杀掉对应进程
ALTER SYSTEM KILL SESSION 'SID,SERIAL#' IMMEDIATE;
--如果数据库级别杀不到进程
(Windows-->) orakill <sid> <spid>
(Linux-->) kill -9 <spid>
select a.sid, b.spid, b.pid
  from vsessiona,vprocess b
 where a.PADDR = b.ADDR
   and a.sid = 192;
 
##查询锁表的sql(需要输入查询sid)
select username, sql_text, machine, osuser
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
复制代码
SELECT s.sid,
       s.serial#,
       s.username,
       spid,
       v$sql.sql_id,
       machine,
       s.terminal,
       s.program,
       sql_text
  FROM v$process, v$session s, v$sql
 WHERE addr = paddr
   and s.sql_id = v$sql.sql_id
   AND sql_hash_value = hash_value
复制代码

 

相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示