oracle不同的事務transaction隔離級別isolation level進一步理解

wisdomone1發表於2019-11-14

前言

    o racle資料庫事務由於併發執行的原因,會產生各種各樣的問題。oracle為了處理這些不同的問題,設計了不同的事務隔離級別:read committed(預設)及serializable


相關文章  
oracle資料庫事務不同事務隔離級別與v$transaction flag列思考


測試目標

  • 2種不同事務隔離級別的在併發事務訪問的差異性


測試明細


小結

  • 可見serializable事務隔離級別,雖然可以實現絕對的資料一致性,但是事務併發訪問能力要差於read committed。原因見上,直接就報ora-08177:can't serializable acess for this transaction.要知道併發訪問期間,難免會產生相同的sql語句同時更新同一條表記錄或同一個表的相關記錄資源


  • read committed雖然併發訪問好於serializable,但是容易產生資料不一致性,特別是在併發事務同時更新表的相同記錄資源時,引起丟失更新。如果為了在事務期間不會導致丟失更新,update之前,一定先要select for update,如果select for update無法加鎖,如果無法加鎖,表明其它事務已經對於鎖定的表記錄資源正在更新。業務處理邏輯可以設定鎖超時或者定製程式然後異常進行特定的處理。



事務隔離級別全是針對併發事務訪問,起碼2個事務以上。


serializable事務隔離級別適用的業務場景

  • 資料庫update語句更新的表記錄數很少(注:因為更新的表記錄越多,產生鎖衝突的可能越大,則事務併發就會減少)

  • 併發事務同時更新表的相同記錄的可能性很小(注:如果更新相關表記錄的併發事務越多,產生鎖衝突可能越大,又會報ora-08177:can't serializable acess for this transaction,這樣就會影響事務的併發訪問)

  • 長時間執行的事務,其中包含的SQL語句主要是隻讀select語句(注:select語句引起鎖衝突的可能性很小,這樣併發訪問就可以保障)


所以說serializable事務隔離級別並不適用於高併發的事務訪問環境


serializable事務隔離級別ora-08177處理方法

  • commit提交當前事務已經操作的部分操作的結果

  • rollback 回滾當前事務到一個儲存點savepoint(不至於完全白作了)

  • rollback回滾整個當前事務


     當然採用上述哪種處理方法,取決於你的於業務場景。每種業務場景對於資料的一致性要求不一樣,有的是強一致性,有的是弱一致性,有的是最終一致性。大家可以根據不同的一致性需求選用合適的處理方法


培訓課件

(收費20元)

oracle不同的事務transaction隔離級別isolation level進一步理解

oracle不同的事務transaction隔離級別isolation level進一步理解

聯絡方式

oracle不同的事務transaction隔離級別isolation level進一步理解

oracle不同的事務transaction隔離級別isolation level進一步理解


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-2664080/,如需轉載,請註明出處,否則將追究法律責任。

相關文章