比如有兩個用戶一個userA,一個userB
當userA發出 select * from 表名 for update of 字段 時
這是紀錄被鎖住等待更新
當userB此時也發出select * from 表名 for update of 字段 時
并且for update of 的紀錄已經被userA鎖定
這是userB只能等待userA提交后才能獲取到userA被占用的紀錄
如果userA不提交userB就會無限期的等待
解決方法
userB執行select * from 表名 for update of 字段 no wait 10;
這時雖然紀錄被userA鎖定但是userB會等待10秒如果10秒內userA釋放
了紀錄,則userB獲取該鎖,如果10秒后userA未釋放鎖,則userB返回
錯誤消息
ora-30006:資源已被占用;執行此操作時出現wait超時
--------------------------------------------------------------------
userA鎖住一條紀錄
userB鎖住一條紀錄
userA請求鎖住userB正在鎖住的紀錄
而同時userB請求鎖住userA正在鎖住的紀錄
這時候就會產生死鎖
--------------------------------------------------------------------
如果在事務中執行了一條不滿足條件的update語句,則執行全表掃描,把行級鎖上升為表級鎖,多個這樣的事務執行后,就很容易產生死鎖。
版權歸原作者和各發布網站所有,此文章僅供學習參考之用
天天學習,好好向上——
posted on 2008-11-07 11:34
東頭bing阿頭 閱讀(1493)
評論(0) 編輯 收藏 所屬分類:
DataBase