Oracle讀一致性導致的問題 |
發(fā)布時間: 2012/8/11 17:08:24 |
為了提高事務處理的速度,Oracle采用了讀一致性機制。就是當一個會話更新數(shù)據(jù)后未提交時,其它會話讀取到更新前的結果。這大大提高數(shù)據(jù)并發(fā)的效率,但某些特定條件下會產(chǎn)生錯誤的結果。 下面的例子進行說明。 先像表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提交后再執(zhí)行會話2時,得到得結果是102 當會話1執(zhí)行后未提交,會話2就已經(jīng)執(zhí)行,得到得結果是101,并不是102。這是因為Oracle為了提供數(shù)據(jù)的并發(fā)訪問速度,在一個會話更新數(shù)據(jù)后未提交時,另一個會話select 到的將是第一個會話更新前的數(shù)據(jù) 單多個會話并發(fā)時,會產(chǎn)生不確定得結果,這不是我們想看到的。在并發(fā)系統(tǒng)開發(fā)時應多注意此類問題,并多測試。 上面的兩個會話可以改成以下做法,保證數(shù)據(jù)的準確更新 session1: update test set A=A+1 session2: update test set A=A+1 其它的例子就不多說,當所要的處理結果與數(shù)據(jù)庫本身的機制有沖突時,需嘗試其它的實現(xiàn)方法 本文出自:億恩科技【mszdt.com】 |