數據庫 - 數據庫恢復技術

事務定義

Jim(James) Gray 詹姆斯·格雷
1998年圖靈獎得到者
數據庫技術和事務處理專家
2、事務的特性web

定義
一個數據庫操做序列
一個不可分割的工做單位
恢復和併發控制的基本單位sql

事務和程序比較
在關係數據庫中,一個事務能夠是一條或多條SQL語句,也能夠包含一個或多個程序。
一個程序一般包含多個事務數據庫

顯式定義方式
   BEGIN TRANSACTION BEGIN TRANSACTION SQL 語句1 SQL 語句1 SQL 語句2 SQL 語句2 。。。。。 。。。。。 COMMIT ROLLBACK 隱式方式 當用戶沒有顯式地定義事務時, DBMS按缺省規定自動劃分事務 

事務的特性(ACID特性)

事務的ACID特性:
原子性(Atomicity)
一致性(Consistency)
隔離性(Isolation)
持久性(Durability )併發

故障是不可避免的
系統故障:計算機軟、硬件故障
人爲故障:操做員的失誤、惡意的破壞等。
數據庫的恢復
把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱爲一致狀態),此時數據庫只包含成功事務提交的數據。svg

故障的種類

事務內部的故障
系統故障
介質故障
計算機病毒ui

事務內部的故障

有的是能夠經過事務程序自己發現的(見下面轉帳事
務的例子)
有的是非預期的,如:死鎖而選中該事務撤銷spa

例如,銀行轉帳事務,這個事務把一筆金額從一個帳戶甲轉給另外一個帳戶乙。
     BEGIN TRANSACTION 讀帳戶甲的餘額BALANCE; BALANCE=BALANCE-AMOUNT;(AMOUNT 爲轉帳金額) 寫回BALANCE; IF(BALANCE < 0 ) THEN { 打印'金額不足,不能轉帳'ROLLBACK;(撤銷剛纔的修改,恢復事務) } ELSE { 讀帳戶乙的餘額BALANCE1; BALANCE1=BALANCE1+AMOUNT; 寫回BALANCE1; COMMIT; } 

這個例子所包括的兩個更新操做要麼所有完成要麼所有不作。不然就會使數據庫處於不一致狀態,例如只把帳戶甲的餘額減小了而沒有把帳戶乙的餘額增長。
在這段程序中若產生帳戶甲餘額不足的狀況,應用程序能夠發現並讓事務滾回,撤銷已做的修改,恢復數據庫到正確或一致的狀態。操作系統

事務內部更多的故障是非預期的,是不能由應用程序處理的。
運算溢出
併發事務發生死鎖而被選中撤銷該事務
違反了某些完整性限制等
之後,事務故障僅指這類非預期的故障
事務故障的恢復:撤消事務(UNDO)日誌

系統故障

稱爲軟故障,是指形成系統中止運轉的任何事件,使得
系統要從新啓動。
整個系統的正常運行忽然被破壞
全部正在運行的事務都非正常終止
不破壞數據庫
內存中數據庫緩衝區的信息所有丟失code

特定類型的硬件錯誤(如CPU故障)
操做系統故障
DBMS代碼錯誤
系統斷電

系統故障的恢復

發生系統故障時,事務未提交
恢復策略:強行撤消(UNDO)全部未完成事務
發生系統故障時,事務已提交,但緩衝區中的信息還沒有徹底寫回到磁盤上。
恢復策略:重作(REDO)全部已提交的事務

介質故障

稱爲硬故障,指外存故障
磁盤損壞
磁頭碰撞
操做系統的某種潛在錯誤
瞬時強磁場干擾

裝入數據庫發生介質故障前某個時刻的數據副本
重作自此時始的全部成功事務,將這些事務已提交的結果從新記入數據庫

計算機病毒

一種人爲的故障或破壞,是一些惡做劇者研製的一種計算機程序
能夠繁殖和傳播
危害
破壞、盜竊系統中的數據
破壞系統文件

各種故障,對數據庫的影響有兩種可能性
一是數據庫自己被破壞
二是數據庫沒有被破壞,但數據可能不正確,這是因爲事務的運行被非正常終止形成的。

恢復的實現技術

恢復操做的基本原理:冗餘
    利用存儲在系統其它地方的冗餘數據來重建數據庫中已被破壞或不正確的那部分數據
恢復機制涉及的關鍵問題
如何創建冗餘數據
數據轉儲(backup)
登陸日誌文件(logging)
 如何利用這些冗餘數據實施數據庫恢復
  

數據轉儲(Dump)

是指DBA將整個數據庫複製到磁帶或另外一個磁盤上保存起來的過程,備用的數據稱爲後備副本或後援副本,簡稱備份(Backup)
如何使用
數據庫遭到破壞後能夠將後備副本從新裝入
重裝後備副本只能將數據庫恢復到轉儲時的狀態
1.靜態轉儲與動態轉儲

在系統中無運行事務時進行的轉儲操做
轉儲開始時數據庫處於一致性狀態
轉儲期間不容許對數據庫的任何存取、修改活動
獲得的必定是一個數據一致性的副本 
優勢:實現簡單
缺點:下降了數據庫的可用性,一般數據庫是關閉的
轉儲必須等待正運行的用戶事務結束 
新的事務必須等轉儲結束
轉儲操做與用戶事務併發進行
轉儲期間容許對數據庫進行存取或修改
優勢
不用等待正在運行的用戶事務結束
不會影響新事務的運行
動態轉儲的缺點
不能保證副本中的數據正確有效
[例]在轉儲期間的某個時刻Tc,系統把數據A=100轉儲到磁帶上,而在下一時刻Td,某一事務將A改成200。轉儲結束後,後備副本上的A已經是過期的數據了
利用動態轉儲獲得的副本進行故障恢復
須要把動態轉儲期間各事務對數據庫的修改活動登記下來,創建日誌文件
後備副本加上日誌文件才能把數據庫恢復到某一時刻的正確狀態

2.海量轉儲與增量轉儲

海量轉儲: 每次轉儲所有數據庫

增量轉儲: 只轉儲上次轉儲後更新過的數據

海量轉儲與增量轉儲比較
從恢復角度看,使用海量轉儲獲得的後備副本進行恢復每每更方便
但若是數據庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效

日誌文件

日誌文件(log)是用來記錄事務對數據庫的更新操做的文

日誌文件的格式
以記錄爲單位的日誌文件
以數據塊爲單位的日誌文件

以記錄爲單位的日誌文件內容
各個事務的開始標記(BEGIN TRANSACTION)
各個事務的結束標記(COMMIT或ROLLBACK)
各個事務的全部更新操做
以上均做爲日誌文件中的一個日誌記錄 (log record)

以記錄爲單位的日誌文件,每條日誌記錄的內容
事務標識(標明是哪一個事務)
操做類型(插入、刪除或修改)
操做對象(記錄內部標識)
更新前數據的舊值(對插入操做而言,此項爲空值)
更新後數據的新值(對刪除操做而言, 此項爲空值)

日誌文件的格式和內容

<T1 start>
<T1, A, 0, 10>
<T1 commit>
<T2 start>
<T2, B, 0, 10>
<T3 start>                   
<T3, C, 0, 10>
<T3, C, 10, 20>
<checkpoint>
<T4 start>
<T2 commit>
<T4, A, 10, 20>
<T5 start>
<T4, D, 0, 10>
<T4 commit>
Multiplexing redo log groups to protect against media failure and loss of data.
At least two members (files) per group
Each member on a separate disk drive
Each member on a separate disk controller
Redo logs heavily influence performance

以數據塊爲單位的日誌文件,每條日誌記錄的內容
事務標識(標明是那個事務)
被更新的數據塊

日誌文件的做用

進行事務故障恢復 進行系統故障恢復 協助後備副本進行介質故障恢復