oracle的事務隔離級別和讀一致性

2022-08-02 01:12:13 字數 721 閱讀 7066

oracle提供了三個隔離級別:

1.讀提交 ,簡而言之只能讀取語句開始執行前提交的資料

2.序列,這個好理解,就是事務序列執行,避免經典的三個場景-髒讀、不可重複讀、幻讀。

3.唯讀,oracle已經實現的唯讀模式。

這些都很容易理解,問題的關鍵是解決一些實際的問題,例如典型的汽車票銷售。

1.對於查票事務而言,使用簡單的讀提交隔離級別即可,讀取那些可售票(狀態不是已經售出或者正在銷售的)

2.對於售票事務而言,只需要簡單使用竄行隔離級別即可,在開始購買時候,先設定標記為正在銷售,完成之後設定銷售完畢,並提交事務。

具體簡單的做法就是 

set transaction isolation level serializable;

update tickets  a set a.status='sailing' where a.seat_no=?;

如果其它事務也企圖這麼做,但當前事務還沒有提交,那麼就會引發ora-08177: cannot serialize access for this transaction

應用遇到這條資訊的時候,就知道這個座位已經被臨時占用了,可以換乙個座位。

如果為了避免可能的高概率異常,選票可以放在乙個過程中處理,避免比必要的網路傳輸。

如果在乙個高併發的應用中,例如像12306那樣的應用,如何避免負載過大? 理論上使用oracle的exdata即可解決這種,當然在應用設計上也需要有一些好的想法

Oracle 事務隔離級別

先看一張concepts中關於事務隔離級別的一張 從上圖可以看到 通常事務的隔離級別定義為以下4種 基於3種在併發事務中需要避免的現象來劃分的 1.read uncommitted 從字面意義可以看出,讀取那些未提交的資料。事務1在事務進行過程中,會讀到事務2修改了但是沒有提交的資料,所以產生了 髒...

Oracle事務隔離級別

髒讀 dirty read 當乙個事務讀取另乙個事務尚未提交的修改時,產生髒讀。不可重複讀 nonrepeatable read 同一查詢在同一事務中多次進行,在此期間,由於其他事務提交了對資料的修改或刪除,每次返回不同的結果。幻讀 phantom read 同一查詢在同一事務中多次進行,由於其他提...

Oracle事務隔離級別

一 事務四個性質 acid 1 原子性 atomaicity 乙個事務是乙個不可分割的單元。2 一致性 consistency 事務的原子性保證的事務的一致性。3 隔離性 isolation 三種現象 1 髒讀 即讀出其它事務未提交的資料。2 不可重複讀 乙個事務,兩個不同時間,讀取的資料不同,被他...