事務
事務(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)
①靜態轉儲:轉儲時不能有事務運行,數據庫必須處於一致性狀態即事務已經全部提交,沒有正在運行的事務
②動態轉儲:轉儲與事務同時進行,不能保證副本中數據庫的一致性
需要把動態存儲期間各事務的修改活動記錄為日志,后備文件+日志即可恢復
③海量存儲:每次轉儲數據庫全部信息
④增量存儲:每次轉儲上次轉儲后的更新數據
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.檢查點技術+鏡像技術