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