DB2和Oracle的鎖機制
DB2和Oracle的鎖機制1.DB2的鎖
具體詳見轉貼
http://www-900.ibm.com/cn/support/nav/200402/p45-1.shtml
2.Oracle的鎖
1>行級鎖:tx
??行被排他鎖定;
??在某行的鎖被釋放之前,其他用戶不能修改此行;
??使用commit或者rollback命令釋放;
????? 使用insert,update的時候自動被上鎖;
????? 用select ...for update語句獲得行級鎖:被加鎖的對象是所有
????? 被select 到的行;
????? 防止其他用戶修改此行,但可以查詢;
????? 具體的形式為:
????? ??如果鎖定所有列:select..for update;
????? ??鎖定特定列:select ..for update of ename;
????? ? 不合理的是:當一個用戶鎖定時,別的用戶不知道,只會等;
????? ? 所以用select ..for update wait(second):
????? ??超過secong秒后加鎖的用戶還沒有解鎖的話,
????? ??其他等待也嘗試加鎖的的用戶就會得到一個錯誤信息;
?2>表級鎖:tm?
??可以設置為三種模式:Lock table userID.tablename in [] mode;
??共享:其他用戶只能查詢,不能更新,刪除,插入;
??a.多個用戶可以同時對同一個表設置共享鎖;
???
??b.共享更新:in share update mode;
???鎖定要被更新的行,其他用戶可以同時查詢,
???插入,更新未被鎖定的行,即未被更新的行;
?? 等于select..for update;
???允許多個用戶同時鎖定表中不同的行;
??c.排他:
???僅允許其他用戶查詢,不允許插入,刪除,更新;
???在同時間僅允許一個用戶在表上放置排他鎖;
???如果加上nowait的話,如果發現該表已經被鎖定,
???就不再等待,立即返回一個錯誤信息;