【oracle】锁相关脚本
2022-08-01 21:13 abce 阅读(135) 评论(0) 编辑 收藏 举报#查看哪些表被锁住了
1 | 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; |
#查看被锁住的对象和用户信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | SELECT c.owner, c.object_name, c.object_type, b.sid, b.serial#, b.inst_id, b.status, b.osuser, b.machine, 'alter system kill session ' '' || b.sid || ',' || b.serial# || ',@' ||b.inst_id || '' ';' FROM gv$locked_object a, gv$session b, dba_objects c WHERE b.sid = a.session_id AND a.object_id = c.object_id and a.inst_id = b.inst_id; |
#查看历史阻塞会话和锁信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | select v.sql_text, v.sql_fulltext, sub.* from v$sql v, ( select sample_time, s.sql_id sql_id, session_state, blocking_session, owner || '.' || object_name || ':' || nvl(subobject_name, '-' ) obj_name, s.program, s.module, s.machine from dba_hist_active_sess_history s, dba_objects o where sample_time between to_date( '27/02/2019 07:30:02' , 'DD/MM/YYYY HH24:MI:SS' ) and to_date( '28/02/2019 15:10:02' , 'DD/MM/YYYY HH24:MI:SS' ) and event = 'enq: TX - row lock contention' and o.data_object_id = s.current_obj# order by 1 desc ) sub where sub.sql_id = v.sql_id; |
#找到暂时阻塞的会话和锁定。
1 2 3 4 5 6 7 8 9 | select s1.username || '@' || s1.machine || ' ( THIS SID=' || s1.sid || ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status from gv$lock l1, gv$session s1, gv$lock l2, gv$session s2 where s1.sid = l1.sid and s2.sid = l2.sid and l1.BLOCK = 1 and l2.request > 0 and l1.id1 = l2.id1 and l2.id2 = l2.id2; |
#kill掉大于300秒的会话
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 32 | SELECT 'kill -9 ' || p.spid, s.username, 'alter system kill session ' '' || SID || ',' || s.serial# || '' ';' FROM v$session s, v$process p WHERE s.paddr = p.addr(+) AND s.SID IN ( select sid from v$sql_monitor where status = 'EXECUTING' and elapsed_time / 1000000 > 300 and username in ( 'MEHMET' , 'SALIH' )); SELECT 'alter system kill session ' '' || SID || ',' || s.serial# || ',@' || inst_id || '' ';' , sid, username, serial#, process, NVL(sql_id, 0), sql_address, blocking_session, wait_class, event, p1, p2, p3, seconds_in_wait FROM gv$session s WHERE blocking_session_status = 'VALID' OR sid IN ( SELECT blocking_session FROM gv$session WHERE blocking_session_status = 'VALID' ); |
#Oracle--找到被锁住的对象(非死锁)
1 2 3 4 5 6 7 8 9 10 11 12 | SELECT a.sid, a.serial#, a.username, c.os_user_name , a.program, a.logon_time, a.machine, a.terminal , b.object_id, substr(b.object_name,1,40) object_name , DECODE(c.locked_mode,1, 'No Lock' , 2, 'Row Share' , 3, 'Row Exclusive' , 4, 'Shared Table' , 5, 'Shared Row Exclusive' , 6, 'Exclusive' ) locked_mode from v$session a, dba_objects b, v$locked_object c where a.sid = c.session_id and b.object_id = c.object_id; |
#当前会话中查看引起行锁竞争的语句
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | select sw.event, sw.sid, sw.p1, sw.p2, sw.p3, s.ROW_WAIT_OBJ#, s.ROW_WAIT_FILE#, s.ROW_WAIT_BLOCK#, s.ROW_WAIT_ROW#, o.OWNER, o.OBJECT_NAME, o.OBJECT_ID, o.DATA_OBJECT_ID, o.OBJECT_TYPE, st.sql_id, st.sql_text from v$session_wait sw, v$session s, dba_objects o, v$sql st where sw.sid = s.sid and o.object_id = s.ROW_WAIT_OBJ# and (st.sql_id = s.sql_id or st.sql_id = s.prev_sql_id) and sw.event = 'enq: TX - row lock contention' ; |
#从历史会话中查看引起行锁竞争的语句
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 32 | select ash.sample_time, ash.instance_number, ash.user_id, u.username, ash.session_id, ash.session_serial#, ash.current_obj#, o.owner, o.object_name, o.object_type, ash.sql_id, ash.sql_opname, ash.wait_class, ash.program, ash.module, ash.blocking_session_status, ash.blocking_session, ash.blocking_session_serial#, ash.blocking_inst_id, st.inst_id, st.sql_text from dba_hist_active_sess_history ash, dba_users u, dba_objects o, gv_$sql st where to_char(ash.sample_time, 'YYYY-MM-DD hh24:mi:ss' ) between '2022-03-22 13:30:00' and '2022-03-22 15:30:00' and ash.time_waited > 0 and ash.session_state = 'WAITING' and ash.user_id = u.user_id and ash.current_obj# = o.object_id and st.sql_id = ash.sql_id and ash.event = 'enq: TX - row lock contention' ; |
#单实例的会话阻塞
1 2 3 4 5 6 7 8 9 10 | SELECT s1.username || '@' || s1.machine || ' ( SID=' || s1.sid || ' ) is blocking ' || s2.username || '@' || s2.machine || ' ( SID=' || s2.sid || ' ) ' AS blocking_status FROM v$lock l1, v$session s1, v$lock l2, v$session s2 WHERE s1.sid = l1.sid AND s2.sid = l2.sid AND l1.BLOCK = 1 AND l2.request > 0 AND l1.id1 = l2.id1 AND l2.id2 = l2.id2; |
#单实例的会话阻塞,详细信息
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 32 33 34 35 | SELECT vs.username, vs.osuser, vh.sid locking_sid, vs.status status, vs.module module, vs.program program_holding, jrh.job_name, vsw.username, vsw.osuser, vw.sid waiter_sid, vsw.program program_waiting, jrw.job_name, 'alter system kill session ' || '' '' || vh.sid || ',' || vs.serial# || '' ';' "Kill_Command" FROM v$lock vh, v$lock vw, v$session vs, v$session vsw, dba_scheduler_running_jobs jrh, dba_scheduler_running_jobs jrw WHERE (vh.id1, vh.id2) IN ( SELECT id1, id2 FROM v$lock WHERE request = 0 INTERSECT SELECT id1, id2 FROM v$lock WHERE lmode = 0) AND vh.id1 = vw.id1 AND vh.id2 = vw.id2 AND vh.request = 0 AND vw.lmode = 0 AND vh.sid = vs.sid AND vw.sid = vsw.sid AND vh.sid = jrh.session_id(+) AND vw.sid = jrw.session_id(+); |
#RAC环境的会话阻塞
1 2 3 4 5 6 7 8 9 10 11 12 13 | SELECT DISTINCT S1.USERNAME || '@' || S1.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S1.SID || ' ) IS BLOCKING ' || S2.USERNAME || '@' || S2.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S2.SID || ' ) ' AS BLOCKING_STATUS FROM GV$LOCK L1, GV$SESSION S1, GV$LOCK L2, GV$SESSION S2 WHERE S1.SID = L1.SID AND S2.SID = L2.SID AND S1.INST_ID = L1.INST_ID AND S2.INST_ID = L2.INST_ID AND L1.BLOCK > 0 AND L2.REQUEST > 0 AND L1.ID1 = L2.ID1 AND L1.ID2 = L2.ID2; |
#RAC环境的会话阻塞和对象信息
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | SELECT DISTINCT S1.USERNAME || '@' || S1.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S1.SID || ' ) IS BLOCKING ' || S2.USERNAME || '@' || S2.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S2.SID || ' ) OBJ_ID:' || L1.ID1 || ' OBJ_NAME:' || O.OBJECT_NAME AS BLOCKING_STATUS FROM GV$LOCK L1, GV$SESSION S1, GV$LOCK L2, GV$SESSION S2, DBA_OBJECTS O WHERE S1.SID = L1.SID AND S2.SID = L2.SID AND S1.INST_ID = L1.INST_ID AND S2.INST_ID = L2.INST_ID AND L1.ID1 = OBJECT_ID AND L1.ID1 = O.OBJECT_ID AND L1.BLOCK > 0 AND L2.REQUEST > 0 AND L1.ID1 = L2.ID1 AND L1.ID2 = L2.ID2; |
#RAC环境的会话阻塞,针对某个具体的对象
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | SELECT DISTINCT S1.USERNAME || '@' || S1.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S1.SID || ' ) IS BLOCKING ' || S2.USERNAME || '@' || S2.MACHINE || ' ( INST=' || S1.INST_ID || ' SID=' || S2.SID || ' ) OBJ_ID:' || L1.ID1 || ' OBJ_NAME:' || O.OBJECT_NAME AS BLOCKING_STATUS FROM GV$LOCK L1, GV$SESSION S1, GV$LOCK L2, GV$SESSION S2, DBA_OBJECTS O WHERE S1.SID = L1.SID AND S2.SID = L2.SID AND S1.INST_ID = L1.INST_ID AND S2.INST_ID = L2.INST_ID AND L1.ID1 = OBJECT_ID AND L1.ID1 = O.OBJECT_ID AND L1.BLOCK > 0 AND L2.REQUEST > 0 AND L1.ID1 = L2.ID1 AND L1.ID2 = L2.ID2 AND object_id in ( SELECT OBJECT_ID FROM DBA_OBJECTS WHERE OWNER = 'ABC' AND OBJECT_NAME = 'XYZ' ); |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2017-08-01 二进制安装mysql 5.6
2016-08-01 Oracle 11g RAC 第二节点root.sh执行失败后再次执行root.sh
2016-08-01 RAC GI安装,报"Task resolv.conf Integerity"验证失败