『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术
數據庫從入門到精通:戳我
文章目錄
- 一、 事務的基本概念
- 1.事務
- 1.1what's the 事務:
- 1.2事務的定義
- 1.2.1 事務的顯示定義
- 1.2.2 事務的隱式定義方式
- 2.事務的ACID特性
- 2.1原子性(Atomicity)
- 2.2一致性(Consistency)
- 2.3一致性與原子性
- 2.4 隔離性(Isolation)
- 2.5 持續性(Durability )
- 2.6 事務特性的保證與破壞
- 二、 數據庫恢復概述
- 1.故障是不可避免的
- 2.故障的影響
- 3.數據庫的恢復
- 4.恢復子系統是數據庫管理系統的一個重要組成部分
- 5.恢復技術是衡量系統優劣的重要指標
- 三、 故障的種類
- 1.事務內部的故障
- 1.1 可預期
- 1.2 不可預期
- 2.系統故障
- 2.1系統故障的常見原因
- 2.2系統故障的恢復
- 3.介質故障
- 4.計算機病毒
- 4.1計算機病毒種類
- 4.2計算機病毒的危害
- 5. 小結
- 四、 恢復的實現技術
- 1. 如何建立冗余數據和如何利用這些冗余數據實施數據庫恢復
- 1.1數據轉儲(backup)
- 1.1.1 什么是數據轉儲
- 1.1.2 轉儲方法
- 1.2登記日志文件(logging)
- 1.2.1.日志文件的格式和內容
- 1.2.2.日志文件的作用
- 1.2.3.登記日志文件
- 五、 恢復策略
- 1. 事務故障的恢復
- 1.1事務故障的恢復步驟
- 2 系統故障的恢復
- 2.1系統故障的恢復步驟
- 3 介質故障的恢復
- 3.1介質故障的恢復步驟
- 3.2 介質故障的恢復需要數據庫管理員介入
- 六、 具有檢查點的恢復技術
- 1.問題的提出
- 2.檢查點技術
- 2.1 檢查點記錄的內容
- 2.2重新開始文件的內容
- 2.3動態維護日志文件的方法
- 2.4 建立檢查點
- 3.利用檢查點的恢復策略
- 3.1使用檢查點方法可以改善恢復效率
- 3.2 利用檢查點的恢復步驟
- 七、 數據庫鏡像
- 八、 小結
一、 事務的基本概念
1.事務
1.1what’s the 事務:
事務(Transaction)是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。
事務和程序是兩個概念
- 在關系數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序
- 一個程序通常包含多個事務
事務是恢復和并發控制的基本單位
1.2事務的定義
1.2.1 事務的顯示定義
COMMIT
BEGIN TRANSACTION SQL 語句1 SQL 語句2 ...... COMMIT 事務正常結束 "提交" 事務的所有操作 ->(讀+更新)事務中所有對數據庫的更新寫回到磁盤上的物理數據庫中ROLLBACK
BEGIN TRANSACTIONSQL 語句1SQL 語句2......ROLLBACK 事務異常終止事務運行的過程中發生了故障,不能繼續執行系統將事務中對數據庫的所有已完成的操作全部撤銷 事務滾回到"開始"時的狀態1.2.2 事務的隱式定義方式
- 當用戶沒有顯式地定義事務時,
- 數據庫管理系統按缺省規定自動劃分事務
2.事務的ACID特性
2.1原子性(Atomicity)
事務是數據庫的邏輯工作單位,即事務中包括的諸操作要么都做,要么都不做2.2一致性(Consistency)
事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態
-
一致性狀態
數據庫中只包含成功事務提交的結果 -
不一致狀態
數據庫系統運行中發生故障,有些事務尚未完成就被迫中斷;這些未完成事務對數據庫所做的修改有一部分已寫入物理數據庫,這時數據庫就處于一種不正確的狀態
2.3一致性與原子性
支付寶轉帳:小明掃碼支付1000元到小李的賬戶
定義一個事務,該事務包括兩個操作
| 小明-1000 | |
| 小李+1000 |
這兩個操作要么全做,要么全不做
全做或者全不做,數據庫都處于一致性狀態。
如果只做一個操作,用戶邏輯上就會發生錯誤,總量上少了1千,數據庫就處于不一致性狀態。
只可能是少不可能是多,因為A操作不發生,B操作也不會發生。
2.4 隔離性(Isolation)
一個事務的執行不能被其他事務干擾
- 一個事務內部的操作及使用的數據對其他并發事務是隔離的
- 并發執行的各個事務之間不能互相干擾
2.5 持續性(Durability )
- 一個事務一旦提交,它對數據庫中數據的改變就應該是永久性的。
- 接下來的其他操作或故障不應該對其執行結果有任何影響。
2.6 事務特性的保證與破壞
保證事務ACID特性是事務處理的任務
破壞事務ACID特性的因素:
- 多個事務并行運行時,不同事務的操作交叉執行
數據庫管理系統必須保證多個事務的交叉運行不影響這些事務的隔離性 - 事務在運行過程中被強行停止
數據庫管理系統必須保證被強行終止的事務對數據庫和其他事務沒有任何影響
二、 數據庫恢復概述
1.故障是不可避免的
- 計算機硬件故障
- 軟件的錯誤
- 操作員的失誤
- 惡意的破壞 (刪庫跑路) 嘟嘟嘟嘟嘟!
2.故障的影響
- 運行事務非正常中斷,影響數據庫中數據的正確性
- 破壞數據庫,全部或部分丟失數據
3.數據庫的恢復
數據庫管理系統必須具有把數據庫從錯誤狀態恢復到某一已知的正確狀態(亦稱為一致狀態或完整狀態)的功能,這就是數據庫的恢復管理系統對故障的對策
4.恢復子系統是數據庫管理系統的一個重要組成部分
5.恢復技術是衡量系統優劣的重要指標
三、 故障的種類
1.事務內部的故障
1.1 可預期
有的是可以通過事務程序本身發現的
支付寶轉帳:小明轉賬一定金額到小李的賬戶
BEGIN TRANSACTION讀小明賬戶的余額BALANCE;BALANCE=BALANCE-AMOUNT; /*AMOUNT 為轉賬金額*/IF(BALANCE < 0 ) THEN{打印‘金額不足,不能轉賬’; /*事務內部可能造成事務被回滾的情況*/ROLLBACK; /*撤銷剛才的修改,恢復事務*/ }ELSE{讀小李賬戶的余額BALANCE1;BALANCE1=BALANCE1+AMOUNT;寫回BALANCE1;COMMIT;}- 這個例子所包括的兩個更新操作要么全部完成要么全部不做。否則就會使數據庫處于不一致狀態,例如只把賬戶甲的余額減少了而沒有把賬戶乙的余額增加。
- 在這段程序中若產生賬戶甲余額不足的情況,應用程序可以發現并讓事務滾回,撤銷已作的修改,恢復數據庫到正確狀態。
1.2 不可預期
非預期的,不能由事務程序處理的。
事務內部更多的故障是非預期的,是不能由應用程序處理的。
- 運算溢出
- 并發事務發生死鎖而被選中撤銷該事務
- 違反了某些完整性限制而被終止等
下文中,事務故障僅指這類非預期的故障
事務故障意味著
- 事務沒有達到預期的終點(COMMIT或者顯式的ROLLBACK)
- 數據庫可能處于不正確狀態。
事務故障的恢復:事務撤消(UNDO)
- 強行回滾(ROLLBACK)該事務
- 撤銷該事務已經作出的任何對數據庫的修改,使得該事務象根本沒有啟動一樣
2.系統故障
稱為軟故障,是指造成系統停止運轉的任何事件,使得系統要重新啟動。
- 整個系統的正常運行突然被破壞
- 所有正在運行的事務都非正常終止
- 不破壞數據庫
- 內存中數據庫緩沖區的信息全部丟失
2.1系統故障的常見原因
- 特定類型的硬件錯誤(如CPU故障)
- 操作系統故障
- 數據庫管理系統代碼錯誤
- 系統斷電
2.2系統故障的恢復
發生系統故障時,一些尚未完成的事務的結果可能已送入物理數據庫,造成數據庫可能處于不正確狀態。
恢復策略: 系統重新啟動時,恢復程序讓所有非正常終止的事務回滾,強行撤消(UNDO)所有未完成事務
發生系統故障時,有些已完成的事務可能有一部分甚至全部留在緩沖區,尚未寫回到磁盤上的物理數據庫中,系統故障使得這些事務對數據庫的修改部分或全部丟失
恢復策略: 系統重新啟動時,恢復程序需要重做(REDO)所有已提交的事務
3.介質故障
稱為硬故障,指外存故障
- 磁盤損壞
- 磁頭碰撞
- 瞬時強磁場干擾
介質故障破壞數據庫或部分數據庫,并影響正在存取這部分數據的所有事務
介質故障比前兩類故障的可能性小得多,但破壞性大得多
4.計算機病毒
- 一種人為的故障或破壞,是一些惡作劇者研制的一種計算機程序
- 可以繁殖和傳播,造成對計算機系統包括數據庫的危害
4.1計算機病毒種類
- 小的病毒只有20條指令,不到50B
- 大的病毒像一個操作系統,由上萬條指令組成
4.2計算機病毒的危害
- 有的病毒傳播很快,一旦侵入系統就馬上摧毀系統
- 有的病毒有較長的潛伏期,計算機在感染后數天或數月才開始發病
- 有的病毒感染系統所有的程序和數據
- 有的只對某些特定的程序和數據感興趣
計算機病毒已成為計算機系統的主要威脅,自然也是數據庫系統的主要威脅
數據庫一旦被破壞仍要用恢復技術把數據庫加以恢復
5. 小結
各類故障,對數據庫的影響有兩種可能性
- 數據庫本身被破壞
- 數據庫沒有被破壞,但數據可能不正確,這是由于事務的運行被非正常終止造成的。
恢復操作的基本原理: 冗余
利用存儲在系統別處的冗余數據來重建數據庫中已被破壞或不正確的那部分數據
恢復的實現技術: 復雜
一個大型數據庫產品,恢復子系統的代碼要占全部代碼的10%以上
四、 恢復的實現技術
恢復機制涉及的關鍵問題
1. 如何建立冗余數據和如何利用這些冗余數據實施數據庫恢復
1.1數據轉儲(backup)
1.1.1 什么是數據轉儲
-
轉儲是指數據庫管理員定期地將整個數據庫復制到磁帶、磁盤或其他存儲介質上保存起來的過程
-
備用的數據文本稱為后備副本(backup)或后援副本
-
數據庫遭到破壞后可以將后備副本重新裝入
-
重裝后備副本只能將數據庫恢復到轉儲時的狀態
-
要想恢復到故障發生時的狀態,必須重新運行自轉儲以后的所有更新事務
上圖中:
- 系統在Ta時刻停止運行事務,進行數據庫轉儲
- 在Tb時刻轉儲完畢,得到Tb時刻的數據庫一致性副本
- 系統運行到Tf時刻發生故障
- 為恢復數據庫,首先由數據庫管理員重裝數據庫后備副本,將數據庫恢復至Tb時刻的狀態
- 重新運行自Tb~Tf時刻的所有更新事務,把數據庫恢復到故障發生前的一致狀態
1.1.2 轉儲方法
靜態轉儲與動態轉儲:
靜態:
- 在系統中無運行事務時進行的轉儲操作
- 轉儲開始時數據庫處于一致性狀態
- 轉儲期間不允許對數據庫的任何存取、修改活動
- 得到的一定是一個數據一致性的副本
- 優點:實現簡單
- 缺點:降低了數據庫的可用性
- 轉儲必須等待正運行的用戶事務結束
- 新的事務必須等轉儲結束
動態:
- 轉儲操作與用戶事務并發進行
- 轉儲期間允許對數據庫進行存取或修改
- 優點
- 不用等待正在運行的用戶事務結束
- 不會影響新事務的運行
- 動態轉儲的缺點
- 不能保證副本中的數據正確有效
例在轉儲期間的某時刻Tc,系統把數據A=100轉儲到磁帶上,而在下一時刻Td,某一事務將A改為200。
后備副本上的A過時了
- 不能保證副本中的數據正確有效
小結:
利用動態轉儲得到的副本進行故障恢復
需要把動態轉儲期間各事務對數據庫的修改活動登記下來,建立日志文件
后備副本加上日志文件就能把數據庫恢復到某一時刻的正確狀態
海量轉儲與增量轉儲:
- 海量轉儲: 每次轉儲全部數據庫
- 增量轉儲: 只轉儲上次轉儲后更新過的數據
- 海量轉儲與增量轉儲比較
- 從恢復角度看,使用海量轉儲得到的后備副本進行恢復往往更方便
- 如果數據庫很大,事務處理又十分頻繁,則增量轉儲方式更實用更有效
轉儲方法小結:
1.2登記日志文件(logging)
1.2.1.日志文件的格式和內容
什么是日志文件
- 日志文件(log file)是用來記錄事務對數據庫的更新操作的文件
日志文件的格式
- 以記錄為單位的日志文件
- 以數據塊為單位的日志文件
以記錄為單位的日志文件內容
- 各個事務的開始標記(BEGIN TRANSACTION)
- 各個事務的結束標記(COMMIT或ROLLBACK)
- 各個事務的所有更新操作
以上均作為日志文件中的一個日志記錄 (log record)
以記錄為單位的日志文件,每條日志記錄的內容
- 事務標識(標明是哪個事務)
- 操作類型(插入、刪除或修改)
- 操作對象(記錄ID、Block NO.)
- 更新前數據的舊值(對插入操作而言,此項為空值)
- 更新后數據的新值(對刪除操作而言, 此項為空值)
以數據塊為單位的日志文件,每條日志記錄的內容
- 事務標識
- 被更新的數據塊
1.2.2.日志文件的作用
- 進行事務故障恢復
- 進行系統故障恢復
- 協助后備副本進行介質故障恢復
具體作用:
- 事務故障恢復和系統故障恢復必須用日志文件。
- 在動態轉儲方式中必須建立日志文件,后備副本和日志文件結合起來才能有效地恢復數據庫。
- 在靜態轉儲方式中,也可以建立日志文件。
- 當數據庫毀壞后可重新裝入后援副本把數據庫恢復到轉儲結束時刻的正確狀態
- 利用日志文件,把已完成的事務進行重做處理
- 對故障發生時尚未完成的事務進行撤銷處理
- 不必重新運行那些已完成的事務程序就可把數據庫恢復到故障前某一時刻的正確狀態
1.2.3.登記日志文件
為保證數據庫是可恢復的,登記日志文件時必須遵循兩條原則
- 登記的次序嚴格按并發事務執行的時間次序
- 必須先寫日志文件,后寫數據庫
- 寫日志文件操作:把表示這個修改的日志記錄寫到日志文件中
- 寫數據庫操作:把對數據的修改寫到數據庫中
為什么要先寫日志文件
- 寫數據庫和寫日志文件是兩個不同的操作
- 在這兩個操作之間可能發生故障
- 如果先寫了數據庫修改,而在日志文件中沒有登記下這個修改,則以后就無法恢復這個修改了
- 如果先寫日志,但沒有修改數據庫,按日志文件恢復時只不過是多執行一次不必要的UNDO操作,并不會影響數據庫的正確性
五、 恢復策略
1. 事務故障的恢復
事務故障:事務在運行至正常終止點前被終止
恢復方法:
由恢復子系統利用日志文件撤消(UNDO)此事務已對數據庫進行的修改
事務故障的恢復由系統自動完成,對用戶是透明的,不需要用戶干預
1.1事務故障的恢復步驟
- 插入操作, “更新前的值”為空,則相當于做刪除操作
- 刪除操作,“更新后的值”為空,則相當于做插入操作
- 若是修改操作,則相當于用修改前值代替修改后值
2 系統故障的恢復
系統故障造成數據庫不一致狀態的原因
- 未完成事務對數據庫的更新可能已寫入數據庫
- 已提交事務對數據庫的更新可能還留在緩沖區沒來得及寫入數據庫
恢復方法
系統故障的恢復由系統在重新啟動時自動完成,不需要用戶干預
2.1系統故障的恢復步驟
- 重做(REDO) 隊列: 在故障發生前已經提交的事務
這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄 - 撤銷 (UNDO)隊列:故障發生時尚未完成的事務
這些事務只有BEGIN TRANSACTION記錄,無相應的COMMIT記錄
- 反向掃描日志文件,對每個撤銷事務的更新操作執行逆操作
- 即將日志記錄中“更新前的值”寫入數據庫
- 正向掃描日志文件,對每個重做事務重新執行登記的操作
- 即將日志記錄中“更新后的值”寫入數據庫
3 介質故障的恢復
2 .重做已完成的事務
3.1介質故障的恢復步驟
- 對于靜態轉儲的數據庫副本,裝入后數據庫即處于一致性狀態
- 對于動態轉儲的數據庫副本,還須同時裝入轉儲時刻的日志文件副本,利用恢復系統故障的方法(即REDO+UNDO),才能將數據庫恢復到一致性狀態
- 首先掃描日志文件,找出故障發生時已提交的事務的標識,將其記入重做隊列。
- 然后正向掃描日志文件,對重做隊列中的所有事務進行重做處理。即將日志記錄中“更新后的值”寫入數據庫
3.2 介質故障的恢復需要數據庫管理員介入
- 數據庫管理員的工作
- 重裝最近轉儲的數據庫副本和有關的各日志文件副本
- 執行系統提供的恢復命令
- 具體的恢復操作仍由數據庫管理系統完成
六、 具有檢查點的恢復技術
1.問題的提出
兩個問題:
- 搜索整個日志將耗費大量的時間
- 重做處理:重新執行,浪費了大量時間
解決方案:
具有檢查點(checkpoint)的恢復技術
- 在日志文件中增加檢查點記錄(checkpoint)
- 增加重新開始文件
- 恢復子系統在登錄日志文件期間動態地維護日志
2.檢查點技術
2.1 檢查點記錄的內容
- 建立檢查點時刻所有正在執行的事務清單
- 這些事務最近一個日志記錄的地址
2.2重新開始文件的內容
- 記錄各個檢查點記錄在日志文件中的地址
2.3動態維護日志文件的方法
周期性地執行如下操作:建立檢查點,保存數據庫狀態。
具體步驟是:
2.4 建立檢查點
恢復子系統可以定期或不定期地建立檢查點,保存數據庫狀態
- 定期
按照預定的一個時間間隔,如每隔一小時建立一個檢查點 - 不定期
按照某種規則,如日志文件已寫滿一半建立一個檢查點
3.利用檢查點的恢復策略
3.1使用檢查點方法可以改善恢復效率
- 當事務T在一個檢查點之前提交,T對數據庫所做的修改已寫入數據庫
- 寫入時間是在這個檢查點建立之前或在這個檢查點建立之時
- 在進行恢復處理時,沒有必要對事務T執行重做操作
系統出現故障時,恢復子系統將根據事務的不同狀態采取不同的恢復策略
T1:在檢查點之前提交
T2:在檢查點之前開始執行,在檢查點之后故障點之前提交
T3:在檢查點之前開始執行,在故障點時還未完成
T4:在檢查點之后開始執行,在故障點之前提交
T5:在檢查點之后開始執行,在故障點時還未完成
恢復策略
- T3和T5在故障發生時還未完成,所以予以撤銷
- T2和T4在檢查點之后才提交,它們對數據庫所做的修改在故障發生時可能還在緩沖區中,尚未寫入數據庫,所以要重做
- T1在檢查點之前已提交,所以不必執行重做操作
3.2 利用檢查點的恢復步驟
- 建立兩個事務隊列
UNDO-LIST
REDO-LIST - 把ACTIVE-LIST暫時放入UNDO-LIST隊列,REDO隊列暫為空。
- 如有新開始的事務Ti,把Ti暫時放入UNDO-LIST隊列
- 如有提交的事務Tj,把Tj從UNDO-LIST隊列移到REDO-LIST隊列;直到日志文件結束
對REDO-LIST中的每個事務執行REDO操作
七、 數據庫鏡像
介質故障是對系統影響最為嚴重的一種故障,嚴重影響數據庫的可用性
- 介質故障恢復比較費時
- 為預防介質故障,數據庫管理員必須周期性地轉儲數據庫
提高數據庫可用性的解決方案
- 數據庫鏡像(Mirror)
數據庫鏡像
- 數據庫管理系統自動把整個數據庫或其中的關鍵數據復制到另一個磁盤上
- 數據庫管理系統自動保證鏡像數據與主數據的一致性
每當主數據庫更新時,數據庫管理系統自動把更新后的數據復制過去
出現介質故障時 - 可由鏡像磁盤繼續提供使用
- 同時數據庫管理系統自動利用鏡像磁盤數據進行數據庫的恢復
- 不需要關閉系統和重裝數據庫副本
沒有出現故障時 - 可用于并發操作
- 一個用戶對數據加排他鎖修改數據,其他用戶可以讀鏡像數據庫上的數據,而不必等待該用戶釋放鎖
頻繁地復制數據自然會降低系統運行效率
- 在實際應用中用戶往往只選擇對關鍵數據和日志文件鏡像
- 不是對整個數據庫進行鏡像
八、 小結
事務的概念和性質
- 事務是數據庫的邏輯工作單位
- 數據庫管理系統保證系統中一切事務的原子性、一致性、隔離性和持續性,就保證了事務處于一致狀態
故障的種類
- 事務故障
- 系統故障
- 介質故障
恢復中最經常使用的技術
- 數據庫轉儲
- 登記日志文件
恢復的基本原理
- 利用存儲在后備副本、日志文件和數據庫鏡像中的冗余數據來重建數據庫
事務
- 不僅是恢復的基本單位
- 也是并發控制的基本單位
本文出自大學教材,《數據庫系統概論》高等教育出版社,作者為王珊和薩師煊老師,本文不同于前文是自己寫的,這篇是筆記傾向,特此注明,如果看到本文的概況后,想要詳細了解,請購買該書籍。
王珊,女,1944年生,工學碩士,中國人民大學信息學院教授、博士生導師,研究方向是高性能數據庫新技術、內存數據庫技術、Video數據庫技術、數據庫信息檢索新技術研究、數據倉庫與商務智能技術等??蒲泻徒虒W成果曾獲得國家科技進步二等獎、電子部科技進步特等獎、北京市科技進步一等獎、北京市科技進步二等獎、教育部科技進步二等獎、北京市科技進步一等獎、國家級優秀教材獎等多項獎勵;曾獲得國家人事部授予的有突出貢獻的中青年專家、北京市優秀教師、全國優秀教師、首都勞動獎章、全國五一勞動獎章、國家級教學名師等榮譽稱號。
薩師煊(1922年12月27日—2010年7月11日),中國人民大學經濟信息管理系的創建人之一,曾擔任中國人民大學經濟信息管理系采主任、名譽系主任。是中國數據庫學科的奠基人之一,曾擔任中國計算機學會常務理事、軟件專業委員會常務委員數據庫學組組長。
名家的書肯定是要比我寫的好,而且本來就是總結的人家的書,倒不是我的文章沒有作用,只是帶你看個大概。
總結
以上是生活随笔為你收集整理的『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 传音Tecno折叠新品亮相MWC 202
- 下一篇: 又又又融资1.35亿美元!贾跃亭喊话:F