DB2和Oracle的鎖機(jī)制
DB2和Oracle的鎖機(jī)制1.DB2的鎖
具體詳見(jiàn)轉(zhuǎn)貼
http://www-900.ibm.com/cn/support/nav/200402/p45-1.shtml
2.Oracle的鎖
1>行級(jí)鎖:tx
??行被排他鎖定;
??在某行的鎖被釋放之前,其他用戶(hù)不能修改此行;
??使用commit或者rollback命令釋放;
????? 使用insert,update的時(shí)候自動(dòng)被上鎖;
????? 用select ...for update語(yǔ)句獲得行級(jí)鎖:被加鎖的對(duì)象是所有
????? 被select 到的行;
????? 防止其他用戶(hù)修改此行,但可以查詢(xún);
????? 具體的形式為:
????? ??如果鎖定所有列:select..for update;
????? ??鎖定特定列:select ..for update of ename;
????? ? 不合理的是:當(dāng)一個(gè)用戶(hù)鎖定時(shí),別的用戶(hù)不知道,只會(huì)等;
????? ? 所以用select ..for update wait(second):
????? ??超過(guò)secong秒后加鎖的用戶(hù)還沒(méi)有解鎖的話(huà),
????? ??其他等待也嘗試加鎖的的用戶(hù)就會(huì)得到一個(gè)錯(cuò)誤信息;
?2>表級(jí)鎖:tm?
??可以設(shè)置為三種模式:Lock table userID.tablename in [] mode;
??共享:其他用戶(hù)只能查詢(xún),不能更新,刪除,插入;
??a.多個(gè)用戶(hù)可以同時(shí)對(duì)同一個(gè)表設(shè)置共享鎖;
???
??b.共享更新:in share update mode;
???鎖定要被更新的行,其他用戶(hù)可以同時(shí)查詢(xún),
???插入,更新未被鎖定的行,即未被更新的行;
?? 等于select..for update;
???允許多個(gè)用戶(hù)同時(shí)鎖定表中不同的行;
??c.排他:
???僅允許其他用戶(hù)查詢(xún),不允許插入,刪除,更新;
???在同時(shí)間僅允許一個(gè)用戶(hù)在表上放置排他鎖;
???如果加上nowait的話(huà),如果發(fā)現(xiàn)該表已經(jīng)被鎖定,
???就不再等待,立即返回一個(gè)錯(cuò)誤信息;
posted on 2006-06-29 17:50 jame 閱讀(382) 評(píng)論(0) 編輯 收藏