oracle表被锁了怎么处理
生活随笔
收集整理的這篇文章主要介紹了
oracle表被锁了怎么处理
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
首先你要知道表鎖住了是不是正常鎖?因為任何DML語句都會對表加鎖。你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。 建議先查原因再做決定。(1)鎖表查詢的代碼有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; (2)查看哪個表被鎖 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; (3)查看是哪個session引起的 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; (4)查看是哪個sql引起的 select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time; (5)殺掉對應進程 執行命令:alter system kill session'1025,41'; 其中1025為sid,41為serial#.你要先查一下是那個會話那個sql鎖住了表,有可能這是正常業務需求,不建議隨便KILL session,如果這個鎖表是正常業務你把session kill掉了會影響業務的。 建議先查原因再做決定。(1)鎖表查詢的代碼有以下的形式: select count(*) from v$locked_object; select * from v$locked_object; (2)查看哪個表被鎖 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; (3)查看是哪個session引起的 select b.username,b.sid,b.serial#,logon_time from v$locked_object a,v$session b where a.session_id = b.sid order by b.logon_time; (4)查看是哪個sql引起的 select b.username,b.sid,b.serial#,c.* from v$locked_object a,v$session b,v$sql c where a.session_id = b.sid and b.SQL_ID = c.sql_id and c.sql_id = '' order by b.logon_time; (5)殺掉對應進程 執行命令:alter system kill session'1025,41'; 其中1025為sid,41為serial#.?
?
?
?
(6) 顯示用戶會話ID不存在 : ?
我遇到的情況是,其實已經執行了kill進程命令,即已經執行了第(5)條,
但是要等個把小時才生效,在短時間內還是鎖表狀態,并且報的提示信息是?會話ID不存在,
可過一段時間再試,表已經解鎖了。
總結
以上是生活随笔為你收集整理的oracle表被锁了怎么处理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《Effective Java》 第二讲
- 下一篇: ArcGIS Server9.3+Arc