天天看點

達夢資料庫故障恢複_yxy1 概述2 REDO日志3 REDO日志歸檔4 檢查點5 復原段與復原記錄6 系統故障恢複7 媒體故障恢複

達夢資料庫故障恢複

  • 1 概述
  • 2 REDO日志
  • 3 REDO日志歸檔
    • 3.1 本地歸檔
    • 3.2 實時歸檔
    • 3.3 即時歸檔
    • 3.4 異步歸檔
    • 3.5 遠端歸檔
  • 4 檢查點
  • 5 復原段與復原記錄
  • 6 系統故障恢複
  • 7 媒體故障恢複

1 概述

①故障恢複是資料庫系統必須保證即使發生故障,也可以保障資料的完整性和一緻性。

②故障恢複的技術主要是日志,日志以一種安全的方式記錄資料庫系統變更的曆史資訊,一旦系統出現故障,資料庫系統可以根據日志将系統恢複至故障發生前的某個時刻。日志分為redo日志(記錄資料修改後的新值)和undo日志(資料修改前的舊值)。

③當伺服器處于歸檔模式時,如果資料庫發生故障,通過備份檔案和歸檔日志可以恢複到指定時間點。

2 REDO日志

①REDO 日志存放在日志表空間檔案中,這些檔案存儲資料庫所做的所有實體更改資訊。redo日志可以保證資料庫的完整性和一緻性。

②DM的 REDO 日志用于存儲被修改資料的新值,包括事務對資料檔案和復原段的修改。REDO 日志每次被修改以後,都會自動生成一個新的日志序列值 LSN(Log Sequence Number)。LSN 取值範圍 0~正無窮大,建立的庫 LSN 為 0,以後日志每被寫入一次,LSN值增加 1。

③REDO 日志裡包含有一種特殊的記錄,叫 PWR(Page Written Record)日志。PWR包括(ts_id, fil_id, page_no, page_lsn)資訊。每個資料頁刷盤時,都會生成一條對應的PWR 日志。PWR 日志的 lsn 與上一個日志的 lsn 相同。在以下情況下可以利用 PWR日志:

  1. DSC 故障恢複時:利用 PWR 日志減少加載磁盤資料頁的次數;
  2. 故障恢複時:利用 PWR 日志提升 redo 速度;
  3. 增量備份時:利用 PWR 日志提升備份速度。

    ④DM采用聯機日志檔案來存儲redo日志,DM 至少有兩個日志檔案,日志檔案是循環利用的。日志檔案由日志表空間管理。DM 支援增加日志檔案和擴充日志檔案大小。如下:

    例1增加大小為 80M 的日志檔案 dameng_003.log

    ALTER DATABASE ADD LOGFILE ‘dameng_003.log’ size 80;

    例 2 将日志檔案 dameng_003.log 大小更改為 100M

    ALTER DATABASE RESIZE LOGFILE ‘dameng_003.log’ to 100;

    在 MOUNT 狀态下,支援對日志檔案的重命名操作。

    例 3 将日志檔案 dameng_003.log 重命名為 dameng_004.log

    ALTER DATABASE RENAME LOGFILE ‘dameng_003.log’ to ‘dameng_004.log’;

3 REDO日志歸檔

DM 有歸檔模式和非歸檔模式,這兩種模式可以由使用者進行設定,系統在歸檔模式下運作時,會産生歸檔日志檔案。

3.1 本地歸檔

寫入 REDO 日志到本地歸檔檔案,在 REDO 日志寫入日志檔案後觸發,由歸檔線程完成本地歸檔動作,最多可以設定 8 個本地歸檔。若磁盤空間不足,所有本地歸檔一旦失效,系統會被強制挂起,直到磁盤空間釋放,本地歸檔成功後,再繼續執行。

3.2 實時歸檔

在寫入 REDO 日志到日志檔案之前,通過 MAL 系統發送REDO 日志到遠端伺服器,遠端伺服器收到 REDO 日志後,傳回确認消息。收到确認消息後,執行後續操作,發送 REDO 日

志失敗,或從備庫傳回的資料庫模式不是 STANDBY,将資料庫切換為 SUSPEND 狀态,阻塞所有 REDO 日志的寫入操作。隻能配置 1 個實時歸檔。

3.3 即時歸檔

即時歸檔在主庫将 Redo 日志寫入聯機 Redo 日志檔案後,再通過 MAL 系統将 Redo 日志發送到備庫。即時歸檔是讀寫分離叢集的實作基礎,與實時歸檔的主要差別是發送 Redo日志的時機不同。一個主庫可以配置 1~8 個即時備庫。

3.4 異步歸檔

在設定的時間點或者每隔設定時間,啟動歸檔 REDO 日志發送。設定定時歸檔,必須確定至少有一個本地歸檔。系統排程線程根據設定,觸發歸檔 REDO 日志發送事件。通過 MAL系統,擷取遠端伺服器的目前 LSN,生成發送歸檔 REDO 日志任務,加入任務隊列。歸檔任務線程擷取任務,通過 MAL 系統,發送到遠端伺服器。最多可以設定 8 個異步歸檔。

3.5 遠端歸檔

遠端歸檔就是将寫入本地歸檔的 REDO 日志資訊,發送到遠端節點,并寫入遠端節點的指定歸檔目錄中。遠端歸檔與本地歸檔的主要差別是 REDO 日志寫入的位置不同,本地歸檔将 REDO 日志寫入資料庫執行個體所在節點的磁盤,而遠端歸檔則将 REDO 日志寫入到其他資料庫執行個體所在節點的指定歸檔目錄。遠端歸檔日志檔案的命名規範和本地歸檔日志檔案保持一緻,都是以歸檔名+歸檔檔案的建立時間進行組合命名。最多可以配置 8 個遠端歸檔。

4 檢查點

①建立資料庫時,聯機日志檔案通常被擴充至一定長度,其内容則被初始化為空,當系統運作時,該檔案逐漸被産生的日志所填充。為了達到循環利用日志系統空間的目的,必須在所有日志檔案空間将被占滿時,系統能夠自動清空一部分日志,以便重用日志檔案的空間,為了保證被清空的日志所“保護”的資料在磁盤上是安全的,需要引入一個關鍵的資料庫概念——檢查點。當系統産生檢查點時,将系統緩沖區中被修改過的資料頁寫入磁盤,以保證目前日志所“保護”的資料頁都已安全寫入磁盤,這樣日志檔案即可被安全重用。

②當伺服器啟動和關閉時,系統都會産生檢查點。伺服器運作過程中,系統會自動判斷是否需要執行檢查點;當空閑日志空間不足時,系統自動産生一個檢查點;系統排程線程也會定時産生檢查點;還可以通過調用系統函數 CHECKPOINT 主動生成檢查點。

③系統排程線程根據 dm.ini 的參數配置,産生檢查點,下面給出具體的例子和說明。

CKPT_INTERVAL = 1800 #每間隔 1800 秒,産生檢查點間隔

CKPT_FLUSH_RATE = 5 #檢查點的刷盤比例為 5%,将系統中所有髒頁的 5%寫入磁盤

CKPT_FLUSH_PAGES = 1000 #一個檢查點最少寫入 1000 個髒頁

④檢查點系統函數 CHECKPOINT(FLUSH_RATE),其參數FLUSH_RATE 為 INTEGER 類 型或 DOUBLE 類型,訓示刷盤比例,替代 dm.ini 中的 CKPT_FLUSH_RATE,同時CKPT_FLUSH_PAGES 參數同時生效。例如,執行 SELECT CHECKPOINT(10);會将系統中10%髒頁寫入磁盤。

5 復原段與復原記錄

①DM采用復原段機制來處理 UNDO 日志。復原段由一定數量的復原頁組成,復原頁存放的是一批復原記錄。復原記錄存放被修改資料的舊值,并有專屬的格式,與實體記錄格式不同。復原段的管理同一般資料檔案一樣,其復原資料頁的配置設定、淘汰和釋放也交由資料緩沖區完成。復原檔案屬于復原表空間。復原段的資料并不會永久保留, 事務結束後,由系統的 PURGE 子產品釋放復原頁。

②REDO 日志記錄了所有對資料庫資料進行修改的資料,當然也包括復原段的修改資料。是以,REDO 日志同樣也會保護復原資料。當使用重做日志恢複資料庫時,系統将重做復原段中修改了的資料,并将這些修改寫回到復原段中,進而形成復原記錄。復原記錄與重做記錄類似,隻不過復原記錄記錄被修改資料的舊值,以達到資料復原到原來狀态的目的。

③另外,復原表空間不允許修改和删除操作。

6 系統故障恢複

①系統崩潰的原因有硬體故障,或者是資料庫軟體或作業系統的漏洞等。它導緻整個系統停止運作,記憶體中的資料全部丢失,但磁盤上存儲的資料仍然有效。

②當系統故障發生時,系統管理者可以通過檢視系統日志檔案以了解系統故障發生的原因或故障發生之前系統的運作狀況。多數情況下,系統在故障發生之前會自動記錄産生故障的原因,但也不全是這樣,如系統掉電時,發生故障的原因可能來不及記錄。總之,在處理系統故障之前,系統管理者需要完全了解系統故障發生的原因,并采取相應的措施,如更換硬體,更新作業系統或資料庫軟體等。

③系統故障恢複的最後一步則是重新啟動 DM 伺服器。此時,系統将從最近一個檢查點處開始掃描聯機日志,并重做日志記錄的内容,這樣系統即恢複到了故障發生前的某個很近的時刻,然後将系統中仍然活動的事務再依次利用復原段進行復原。由此可以看出,系統故障恢複可以保證事務的原子性和持久性,即系統故障發生時,仍然活動的事務可以被安全復原,而已經送出的事務則保證其所修改資料的持久性。

7 媒體故障恢複

①媒體故障指的是由于各種原因導緻資料庫系統存儲在磁盤上的資料被損壞,如磁盤損壞等。媒體故障是資料庫系統最為嚴重的故障,此時系統已經無法重新啟動,磁盤上的資料也無法複原。

②出現媒體故障後,系統管理者首先需要分析媒體故障發生的原因,并采取措施,如磁盤損壞則更換磁盤等。由于系統的資料已經全部或部分丢失,此時隻能依賴以前建立的備份和系統産生的歸檔日志檔案進行恢複。

③需要說明的是,為了避免系統在出現故障時丢失資料,應關閉磁盤緩存(若存在的話)。