程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> 數據庫-數據庫恢復技術

數據庫-數據庫恢復技術

編輯:DB2教程

數據庫-數據庫恢復技術


事務定義

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

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

事務和程序比較
在關系數據庫中,一個事務可以是一條或多條SQL語句,也可以包含一個或多個程序。
一個程序通常包含多個事務

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

事務的特性(ACID特性)

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

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

故障的種類

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

事務內部的故障

有的是可以通過事務程序本身發現的(見下面轉賬事
務的例子)
有的是非預期的,如:死鎖而選中該事務撤銷

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

這個例子所包括的兩個更新操作要麼全部完成要麼全部不做。否則就會使數據庫處於不一致狀態,例如只把賬戶甲的余額減少了而沒有把賬戶乙的余額增加。
在這段程序中若產生賬戶甲余額不足的情況,應用程序可以發現並讓事務滾回,撤銷已作的修改,恢復數據庫到正確或一致的狀態。

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

系統故障

稱為軟故障,是指造成系統停止運轉的任何事件,使得
系統要重新啟動。
整個系統的正常運行突然被破壞
所有正在運行的事務都非正常終止
不破壞數據庫
內存中數據庫緩沖區的信息全部丟失

特定類型的硬件錯誤(如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)

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

日志文件的格式和內容

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

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

日志文件的作用

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved