解決ORACLE鎖表問題

http://blog.csdn.net/chagaostu/article/details/21548381

轉載備用

在ORACLE操作中經常會發生,尚未提交(或回滾)數據Session異常關閉的情況

會導致表中的某些數據被鎖死。


解決辦法是用sys登錄後,先找出lock的Session。

select object_id,locked_mode,session_id,os_user_name from v$locked_object;

其中object_id可以結合dba_objects找出對應的對象名,可能是表名,索引名等。

os_user_name 是用戶的電腦名。

locked_mode 表示鎖的級別

ORACLE裏鎖有以下幾種模式:
  
  0:none
  1:null 空
  2:Row-S 行共享(RS):共享表鎖
  3:Row-X 行專用(RX):用於行的修改
  4:Share 共享鎖(S):阻止其他DML操作
  5:S/Row-X 共享行專用(SRX):阻止其他事務操作
  6:exclusive 專用(X):獨立訪問使用
  
  數字越大鎖級別越高, 影響的操作越多。
  一般的查詢語句如select ... from ... ;是小於2的鎖, 有時會在v$locked_object出現

一般事務未提交照成的鎖級別是3,即行鎖。

session_id是後面用來殺對話用的。

用下面這個語句可以殺對話

alter system kill session 'sid,serial#';

sid就是上面的session_id,serial#需要查詢v$session

select sid,serial# from v$session


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章