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

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.