當userA發(fā)出 select * from 表名 for update of 字段 時
這是紀錄被鎖住等待更新
當userB此時也發(fā)出select * from 表名 for update of 字段 時
并且for update of 的紀錄已經(jīng)被userA鎖定
這是userB只能等待userA提交后才能獲取到userA被占用的紀錄
如果userA不提交userB就會無限期的等待
解決方法
userB執(zhí)行select * from 表名 for update of 字段 no wait 10;
這時雖然紀錄被userA鎖定但是userB會等待10秒如果10秒內(nèi)userA釋放
了紀錄,則userB獲取該鎖,如果10秒后userA未釋放鎖,則userB返回
錯誤消息
ora-30006:資源已被占用;執(zhí)行此操作時出現(xiàn)wait超時
--------------------------------------------------------------------
userA鎖住一條紀錄
userB鎖住一條紀錄
userA請求鎖住userB正在鎖住的紀錄
而同時userB請求鎖住userA正在鎖住的紀錄
這時候就會產(chǎn)生死鎖
--------------------------------------------------------------------
如果在事務(wù)中執(zhí)行了一條不滿足條件的update語句,則執(zhí)行全表掃描,把行級鎖上升為表級鎖,多個這樣的事務(wù)執(zhí)行后,就很容易產(chǎn)生死鎖。
版權(quán)歸原作者和各發(fā)布網(wǎng)站所有,此文章僅供學習參考之用
天天學習,好好向上——