1、查询锁情况
1
|
select sid,serial#,event,BLOCKING_SESSION from v$session where event like '%TX%' ; |
2、根据SID查询具体信息(可忽略)
1
|
select sid,serial#,username,machine,blocking_session from v$session where sid=<SID>; |
3、杀掉会话
#根据1和2中查到的SID和SERIAL# 定位会话,并杀掉
1
|
ALTER SYSTEM DISCONNECT SESSION '<SID>,<SERIAL>' IMMEDIATE; |
或
1
|
ALTER SYSTEM KILL SESSION '<SID>,<SERIAL>' ; |
附件:
#查询阻塞脚本
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
col waiting_session for a20 col lock_type for a15 col mode_requested for a10 col mode_held for a10 col lock_id1 for a10 col lock_id2 for a10 set linesize 120 set pagesize 999 with dba_locks_cust as ( SELECT inst_id|| '_' ||sid session_id, DECODE (TYPE, 'MR' , 'Media Recovery' , 'RT' , 'Redo Thread' , 'UN' , 'User Name' , 'TX' , 'Transaction' , 'TM' , 'DML' , 'UL' , 'PL/SQL User Lock' , 'DX' , 'Distributed Xaction' , 'CF' , 'Control File' , 'IS' , 'Instance State' , 'FS' , 'File Set' , 'IR' , 'Instance Recovery' , 'ST' , 'Disk Space Transaction' , 'TS' , 'Temp Segment' , 'IV' , 'Library Cache Invalidation' , 'LS' , 'Log Start or Switch' , 'RW' , 'Row Wait' , 'SQ' , 'Sequence Number' , 'TE' , 'Extend Table' , 'TT' , 'Temp Table' , TYPE) lock_type, DECODE (lmode, 0, 'None' , /* Mon Lock equivalent */ 1, 'Null' , /* N */ 2, 'Row-S (SS)' , /* L */ 3, 'Row-X (SX)' , /* R */ 4, 'Share' , /* S */ 5, 'S/Row-X (SSX)' , /* C */ 6, 'Exclusive' , /* X */ TO_CHAR (lmode)) mode_held, DECODE (request, 0, 'None' , /* Mon Lock equivalent */ 1, 'Null' , /* N */ 2, 'Row-S (SS)' , /* L */ 3, 'Row-X (SX)' , /* R */ 4, 'Share' , /* S */ 5, 'S/Row-X (SSX)' , /* C */ 6, 'Exclusive' , /* X */ TO_CHAR (request)) mode_requested, TO_CHAR (id1) lock_id1, TO_CHAR (id2) lock_id2, ctime last_convert, DECODE (block, 0, 'Not Blocking' , /* Not blocking any other processes */ 1, 'Blocking' , /* This lock blocks other processes */ 2, 'Global' , /* This lock is global , so we can 't tell */ TO_CHAR (block)) blocking_others FROM gv$lock ), lock_temp as (select * from dba_locks_cust), lock_holder as ( select w.session_id waiting_session, h.session_id holding_session, w.lock_type, h.mode_held, w.mode_requested, w.lock_id1, w.lock_id2 from lock_temp w, lock_temp h where h.blocking_others in (' Blocking ',' Global ') and h.mode_held != ' None ' and h.mode_held != ' Null ' and w.mode_requested != ' None ' and w.lock_type = h.lock_type and w.lock_id1 = h.lock_id1 and w.lock_id2 = h.lock_id2 ), lock_holders as (select waiting_session,holding_session,lock_type,mode_held, mode_requested,lock_id1,lock_id2 from lock_holder union all select holding_session, null, ' None ', null, null, null, null from lock_holder minus select waiting_session, null, ' None ', null, null, null, null from lock_holder ) select lpad(' ',3*( level -1)) || waiting_session waiting_session, lock_type, mode_requested, mode_held, lock_id1, lock_id2 from lock_holders connect by prior waiting_session = holding_session start with holding_session is null ; |
总结
以上所述是小编给大家介绍的Oracle锁处理、解锁方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!
原文链接:https://www.cnblogs.com/DeepDarkFantasy/archive/2018/06/26/9229468.html