Oracle中表死鎖的處理


轉自 http://www.linuxidc.com/Linux/2012-07/64257p2.htm

在進行Oracle數據庫管理的過程中,經常會出現數據表被用戶的一些不合理操作而導致表被鎖定的情況,以下主要介紹如何查找哪些表被哪個用戶所鎖定,以及如何解除鎖定:

1.查找被鎖定的表:

select object_name,session_id,os_user_name,oracle_username,process,locked_mode,status

from v$locked_object l, all_objects a where l.object_id=a.object_id;

Oracle中表死鎖的處理

如果想知道具體是哪個進程阻塞了哪個進程,可用以下語句查看:

select

username,

v$lock.sid,trunc(id1/power(2,16)) rbs,

bitand(id1,to_number('ffff','xxxx'))+0 slot,

id2 seq,

lmode,

request

from v$lock, v$session where v$lock.type = 'TX' and v$lock.sid = v$session.sid and v$session.username = 'CENTER' ;

select

(select username||':'||sid||':'||serial# from v$session where sid=a.sid) ||

' 阻塞了 ' ||

(select username ||':'||sid||':'||serial# from v$session where sid=b.sid)

from v$lock a, v$lock b

where a.block = 1

and b.request > 0

and a.id1 = b.id1

and a.id2 = b.id2;

2.確定鎖定表用戶的sid與serial編號(可通過Oracle用戶確定也可通過系統用戶確定)

a.通過oracle用戶確定

select sid,serial# from v$session where username='center';

Oracle中表死鎖的處理

b.通過系統用戶確定

select sid,serial# from v$session where osuser='administrator';

Oracle中表死鎖的處理

3.殺掉造成死鎖的進程(已知是123阻塞了124號進程,殺掉即可解鎖)

alter system kill session ‘123,3935’;

Oracle中表死鎖的處理

Oracle中表死鎖的處理

至此表死鎖解除,現在存在的是數據表正常的鎖定,等事務提交后自然消失.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM