Oracle讀一致性導致的問題

來源:互聯網
上載者:User

  為了提高交易處理的速度,Oracle採用了讀一致性機制。就是當一個會話更新資料後未提交時,其它會話讀取到更新前的結果。這大大提高資料並發的效率,但某些特定條件下會產生錯誤的結果。

  下面的例子進行說明。

  先像表test(A number(10,2))插入1行記錄100

  session1:

  update test set A=(select A+1 from test)

  session2:

  update test set A=(select A+1 from test)

  當會話1提交後再執行會話2時,得到得結果是102

  當會話1執行後未提交,會話2就已經執行,得到得結果是101,並不是102。這是因為oracle為了提供資料的並發訪問速度,在一個會話更新資料後未提交時,另一個會話select 到的將是第一個會話更新前的資料

  單多個會話並發時,會產生不確定得結果,這不是我們想看到的。在並發系統開發時應多注意此類問題,並多測試。

  上面的兩個會話可以改成以下做法,保證資料的準確更新

  session1:

  update test set A=A+1

  session2:

  update test set A=A+1

  其它的例子就不多說,當所要的處理結果與資料庫本身的機制有衝突時,需嘗試其它的實現方法

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.