您好,登錄后才能下訂單哦!
oracle的一致讀和當前讀,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
一致讀(Consistent read): “發現”要修改的行時,所完成的獲取就是一致讀。
當前讀(Current read): 得到塊來實際更新所要修改的行時,所完成的獲取就是當前讀。
dml語句實際上都包含一個where字句,在做dml時,首先會根據where字句的條件做一致讀,即去查找符合where條件的行,在進行一致讀的時候,如果發現被查找行處于鎖定狀態時,oracle會去讀取undo段,進而構造出一個事務開始時對應的一致塊,最終得出要修改的行。
然后oracle再做當前讀,即查看要修改行的當前值,并比較當前值是否和一致讀取的值相等,如果不相等的話,oracle就會重啟動更新。
在重啟動更新時,oracle會先使用select for update來鎖定這行記錄,然后再進行dml操作,這樣可以防止再次重啟動。
select for update可以防止重啟動的關鍵原因在于: select for update只會進行當前讀,而沒有一致讀。這樣就不存在由于當前讀和一致讀中間的時間差導致的兩次讀取值不一樣問題。
看完上述內容,你們掌握oracle的一致讀和當前讀的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。