oracle 有 sx锁 解锁,Oracle锁处理、解锁方法

本文介绍了在Oracle数据库中如何查询锁情况、定位并解除会话阻塞的方法。通过SQL查询,可以查看当前系统的锁状态,找出被阻塞的会话,并使用ALTER SYSTEM命令结束这些会话,从而解决锁导致的问题。此外,还提供了一个详细的查询脚本,用于展示会话之间的锁依赖关系。
摘要由CSDN通过智能技术生成

1、查询锁情况

select sid,serial#,event,BLOCKING_SESSION from v$session where event like '%TX%';

2、根据SID查询具体信息(可忽略)

select sid,serial#,username,machine,blocking_session from v$session where sid=;

3、杀掉会话

#根据1和2中查到的SID和SERIAL# 定位会话,并杀掉

ALTER SYSTEM DISCONNECT SESSION ',' IMMEDIATE;

ALTER SYSTEM KILL SESSION ',';

附件:

#查询阻塞脚本

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锁处理、解锁方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值