常见的ORACLE锁模式汇总
ORACLE是目前數據庫領域里應用最廣泛的數據庫,現在讓我們快速解析一下這些強大的ORACLE鎖有哪些模式??。
ORACLE鎖有以下幾種模式
0:none?1:n ul l 空?
2:Row-S 行共享(RS):共享表鎖?
3:Row-X 行專用(RX):用于行的 修改 ?
4:Share 共享鎖(S):阻止其他 DML 操作 ?
5:S/Row-X 共享行專用(SRX):阻止其他 事務 操作?
6:exclusive 專用(X): 獨立 訪問使用
數字越大ORACLE鎖級別越高, 影響的操作越多??。
一般的查詢語句如select?... from ... ;是小于2的鎖, 有時會在v$locked_object出現??。
select ... from ... for update; 是2的鎖??。
當對話使用for update子串打開一個游標時,?
所有返回集中的數據行都將處于行級(Row-X)獨占式鎖定,?
其他對象只能查詢這些數據行,不能進行update、delete或select...for update操作??。
insert?/ update / delete ... ; 是3的鎖??。
沒有commit之前插入同樣的一條記錄會沒有反應,?
因為后一個3的鎖會一直等待上一個3的鎖, 我們必須釋放掉上一個才能繼續工作??。
創建索引的時候也會產生3,4級別的鎖??。
locked_mode為2,3,4不影響DML(insert,delete,update,select)操作,?
但DDL(alter,drop等)操作會提示ora-00054錯誤??。
有主外鍵約束時 update / delete ... ; 可能會產生4,5的鎖??。
DDL語句時是6的鎖??。
以DBA角色, 查看當前數據庫里鎖的情況可以用如下SQL語句:
如果有長期出現的一列,可能是沒有釋放的鎖??。
我們可以用下面SQL語句殺掉長期沒有釋放非正常的鎖:
如果出現了鎖的問題, 某個DML操作可能等待很久沒有反應??。
當你采用的是直接連接數據庫的方式,?
也不要用OS系統命令?$kill process_num 或者 $kill -9 process_num來終止用戶連接,?
因為一個用戶進程可能產生一個以上的鎖, 殺OS進程并不能徹底清除鎖的問題??。
在數據庫級別可用alter system kill session sid,serial#;殺掉不正常的鎖??。? 鎖類型經常獲取的一些鎖類型如下
– TM 表鎖提供幾個表上的并發訪問
– TX 事務處理鎖或行鎖提供并發訪問行
– MR 介質恢復鎖表明數據庫文件是聯機的
– ST?空間事務處理鎖表明由于優化不良的數據庫中的區正在增長或收
縮SMON?正在合并相鄰的空閑區
總結
以上是生活随笔為你收集整理的常见的ORACLE锁模式汇总的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 塔式服务器、机架式服务器、刀片服务器区别
- 下一篇: ORA-39095: Dump file