【Oracle】第八單元 事務控制

數據一致性的重要意義舉例

銀行轉帳: A 轉500元給B,實際上發生了3句DML語句
1、10:10:10.001: UPDATE A賬戶 SET 餘額=餘額-500
3、 10:10:10.003: UPDATE B帳戶 SET 餘額=餘額+500
2、 10:10:10.002: INSERT 轉帳交易歷史記錄
這三個操作必須同時完成,如果有一條部門完成,那麼其他也必須回滾,否則數據就不一致。

隱式的事務提交或回滾動作:

Commit, rollback 是顯式的提交和回滾語句,還有一些隱式的提交和回滾是大家需要知道並引起注意的:
當如下事件發生是,會隱式的執行Commit動作:
1、數據定義語句被執行的時候,比如新建一張表:Create Table …
2、數據控制語句被執行的時候,比如賦權 GRANT …( 或者 DENY)
3、正常退出 iSQLPlus 或者PLSQL DEVELOPER, 而沒有顯式的執行 COMMIT 或者 ROLLBACK 語句 。
當如下事件發生時,會隱式執行Rollback 動作:
1、非正常退出 iSQL
Plus , PLSQL DEVELOPER, 或者發生系統錯誤。

在Commit 或者 Rollback前後數據的狀態:

1、在數據已經被更改,但沒有Commit前 ,被更改記錄處於被鎖定狀態,其他用戶無法進行更改;
2、在數據已經被更改,但沒有Commit前 ,只有當前Session的用戶可以看到這種變更 ,其他Session的用戶
看不到數據的變化。
3、在數據已經被更改,並且被Commit後,被更改記錄自動解鎖,其他用戶可以進行更改;
4、在數據已經被更改,並且被Commit後,其他Session的用戶再次訪問這些數據時,看到的是變化後的數據。
那麼同理可知Rollback前後數據的狀態及鎖的變化。

讀一致性:

用戶對數據庫的訪問無非是兩種情況
1、讀數據 : Select 語句
2、寫數據 : Insert 、Delete、Update
如果A用戶要讀的數據,B用戶正在改,那麼是否要等B改完再讀出來呢? 如何保證在及其相近的時間內,讓
多個用戶讀到一致的數據呢?(假設有用戶正在改這一批數據的過程中,尚未提交。。。)

Oracle的“讀一致性”概念是指:

1、在任何時候,確保提供數據的一致性視圖。
2、一個用戶對數據的更改不會影響另一個用戶對數據的更改。
3、“讀一致性” 確保在同一時刻:
3.1 讀數據的人不需要等待寫數據的人
3.2 寫數據的人不需要等待讀數據的人
而“讀一致性”的通俗理解就是: 對於有人正在修改過程中的一批數據,在其位提交前,其他用戶讀到的是
一致的內容。

讀一致性實現原理:

當有用戶修改數據時,Oracle先把那部分原始數據備份到回滾段,在Commit之前,其他Session用戶讀到的這
部分數據是回滾段上的; 在提交之後,回滾段被釋放

發佈了102 篇原創文章 · 獲贊 18 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章