事務
事務(transaction)是使用者定義的一個資料庫操作序列,這些操作要麼全做要麼全不做,是一個不可分割的工作機關
事務和程式是兩個概念,一個事務可以是一條/一組SQL語句,也可以是整個程式
事務是恢複和并發控制的基本機關、
BEGIN TRANSACTION
SQL 語句1
SQL 語句2
COMMIT/ROLLBACK
事務的ACID特性
原子性(Atomicity):事務中的操作要麼全做要麼全不做(由DBMS的事務管理子系統來實作)
一緻性(Consistence):事務執行的結果必然是從一個一緻性狀态到另一個一緻性狀态(由DBMS的完整性子系統執行測試任務)
一緻性狀态:資料庫中隻包含事務成功送出的結果
不一緻性狀态:資料庫中包含尚未送出被迫中斷的事務,未完成的事務對資料的修改一部分寫入資料庫,導緻資料庫不正确
隔離性(Isolation):一個事務的執行不能被其他事務幹擾,事務的内部操作和使用的資料對其他事務是隔離的(由DBMS的并發控制子系統實作)
持續性(Durability)/永久性(Permanence):一個事務一旦送出,對資料的修改就是永久性的(由DBMS的恢複管理子系統實作的)
資料庫恢複
故障的種類
①事務内部的故障:事務在運作至正常終點前被終止
有的是可以由事務程式發現的,有些是非預期的事務終止
事務可以通過rollback修複預期之中故障
更多的故障是非預期的,如運算溢出、死鎖
②系統故障(軟故障):CPU錯誤、系統斷電等造成的系統運轉停止
系統故障不破壞資料庫,隻會造成事務的非正常終止,記憶體中資料庫緩沖區丢失
系統故障的恢複需要:
撤銷(undo)所有未完成的事務(事務非正常終止)
重做(redo)所有已送出的事務(有些已完成的事務可能有部分留在緩沖區尚未寫入資料庫)
③媒體故障(硬故障):磁盤損壞、強磁場幹擾造成的媒體故障
④計算機病毒
恢複技術
恢複技術包括兩個部分:建立備援資料+ 利用備援資料進行恢複
建立備援資料
1.資料轉儲:轉儲是将資料庫定期複制到磁盤或其他存儲媒體上,備用資料稱為後備副本(backup)
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5iZlFjN2EWY2cjM5E2N2kzNwgTM1EzMkBjZxAzYhVmY28CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
①靜态轉儲:轉儲時不能有事務運作,資料庫必須處于一緻性狀态即事務已經全部送出,沒有正在運作的事務
②動态轉儲:轉儲與事務同時進行,不能保證副本中資料庫的一緻性
需要把動态存儲期間各事務的修改活動記錄為日志,後備檔案+日志即可恢複
③海量存儲:每次轉儲資料庫全部資訊
④增量存儲:每次轉儲上次轉儲後的更新資料
2.日志檔案:以記錄/資料塊為機關的日志檔案,用于事務/系統故障的恢複
動态轉儲一定要有日志,靜态轉儲也可以有日志
以記錄為機關
T1 BEGIN TRANSACNTION
T1 U(update) AA 18(→)20
T1 I(insert) BB 12
TI COMMIT/ROLLBACK
必須先寫日志檔案,後寫資料庫因為有可能在寫日志和修改資料之間出現故障,先寫資料庫修改可能導緻日志沒有記下這次修改,而先寫日志隻不過是多執行一次不必要的undo操作
3.恢複政策
①事務故障恢複:事務在運作至正常終點前被終止
(1)反向掃描日志,查找事務更新操作
(2)對更新操作進行逆操作,插入→删除,删除→插入,修改前的值→修改後
(3)循環至事務開始
②系統故障的恢複:系統終止造成資料庫不一緻狀态
(1)正向掃描日志,有BEGIN TRANSANCTION和COMMIT的加入REDO隊列
隻有BEGIN TRANSANCTION沒有COMMIT的加入UNDO隊列
(2)對UNDO隊列做UNDO(寫入修改前的值),REDO隊列做REDO(寫入修改後的值)
③媒體故障的恢複:(1)裝入最新的資料庫後備副本,對于靜态副本,裝入即一緻性狀态,對于動态副本做同上的REDO+UNDO
(2)裝入轉儲後的日志副本,REDO
小結:
事務故障恢複:UNDO
系統故障恢複:REDO+UNDO
媒體故障恢複:裝入後備副本+REDO
4.檢查點技術+鏡像技術