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