1. 程式人生 > 實用技巧 >達夢資料庫備份與恢復

達夢資料庫備份與恢復

達夢(DM)備份還原介紹
資料庫備份是 DBA 日常最重要的工作內容。備份的主要目的是資料容災,保證資料的安全性,在資料庫發生故障時,通過還原備份集,將資料恢復到可用狀態。
DM 資料庫中的資料儲存在資料庫的物理資料檔案中,資料檔案按照頁、簇和段的方式進行管理,資料頁是最小的資料儲存單元。任何一個對 DM 資料庫的操作,歸根結底都是對某個資料檔案頁的讀寫操作。
因此,DM 備份的本質就是從資料庫檔案中拷貝有效的資料頁儲存到備份集中,這裡的有效資料頁包括資料檔案的描述頁和被分配使用的資料頁。而在備份的過程中,如果資料庫系統還在繼續執行,這期間的資料庫操作並不是都會立即體現到資料檔案中,而是首先以日誌的形式寫到歸檔日誌中,因此,為了保證使用者可以通過備份集將資料恢復到備份結束時間點的狀態,就需要將備份過程中產生的歸檔日誌也儲存到備份集中。

還原與恢復是備份的逆過程。還原是將備份集中的有效資料頁重新寫入目標資料檔案的過程。恢復則是指通過重做歸檔日誌,將資料庫狀態恢復到備份結束時的狀態;也可以恢復到指定時間點和指定 LSN。恢復結束以後,資料庫中可能存在處於未提交狀態的活動事務,這些活動事務在恢復結束後的第一次資料庫系統啟動時,會由 DM 資料庫自動進行回滾。
此為備 份 、 還 原 與 恢 復 的 關 系
達夢資料庫備份檔案型別分為2種,一種是備份集(DM8向上版本建議都使用備份集),另一種是備份片(在DM7以下版本都是備份片)
備份集用來存放備份過程中產生的備份資料及備份資訊。一個備份集對應了一次完整的備份。
一般情況下,一個備份集就是一個目錄,備份集包含一個或多個備份片檔案,以及一個備份元資料檔案。

備份片用來儲存備份資料的檔案。備份時,目標資料檔案內容或歸檔日誌內容經過處理
後,都會存放到各自的備份片檔案中。備份片檔案字尾為.bak,用來存放備份資料,備份集中存放資料頁的備份片稱為資料備份片

備份集與備份片的關係
備份片的大小可以在備份時通過 MAXPIECESIZE 指定,一個備份集中可能生成多個備份片

達夢資料庫支援物理備份和邏輯備份
這裡主要介紹物理備份
物理備份可以以聯機備份和離線備份來區分

聯機備份:
資料庫處於執行狀態、並正常提供資料庫服務情況下進行的備份操作,我們稱為聯機備份。
聯機備份則使用客戶端工具連線到資料庫例項後,通過執行 SQL 語句進行;也可以通過配置作業,定時完成自動備份。聯機備份不影響資料庫正常提供服務,是最常用的備份手段之一;

聯機備份時,可能存在一些處於活動狀態的事務正在執行,為確保備份資料的一致性,需要將備份期間產生的 REDO 日誌一起備份。因此,只能在配置本地歸檔、並開啟本地歸檔
的資料庫上執行聯機備份。

離線備份:
資料庫處於關閉狀態時進行的備份操作,被稱為離線備份。
使用 DMRMAN 工具進行離線備份,並且支援對異常關閉的資料庫進行離線庫備份。備份異常關閉的資料庫,要求配置了本地歸檔,如果本地歸檔不完整,則需要先修復本地歸檔,再進行備份。

達夢資料庫又可以以一致性備份和非一致性備份來區分
按照備份集中的資料是否滿足一致性,可以將備份劃分為一致性備份和非一致性備份。
一致性備份的備份集包含了完整的資料檔案內容和歸檔日誌資訊;利用一個單獨的備份集可以將資料庫恢復到備份時狀態。不指定 WITHOUT LOG 選項的聯機備份生成的備份集
就是一致性備份。離線資料庫備份會強制將檢查點之後的有效 REDO 日誌拷貝到備份集中,因此,離線備份一定是一致性備份。資料庫正常關閉時,會生成完全檢查點,離線備份生成的備份集中,不包含任何 REDO 日誌。

非一致性備份的備份集只包含資料檔案相關內容,沒有歸檔日誌資訊,利用非一致性備
份還原的資料庫,無法直接啟動,必須藉助歸檔日誌來恢復。表空間備份、指定 WITHOUT LOG選項的聯機備份生成的備份集都是非一致性備份集。

完全備份和增量備份
按照備份資料完整性,可將備份分為完全備份和增量備份。庫備份和表空間備份支援增量備份,表備份不支援增量備份。
完全備份生成的備份集包含了指定庫(或者表空間)的全部有效資料頁。當資料規模比較大的情況下,生成的完全備份集通常會比較大,而且備份時間也會比較長
因為只做全備太消耗資料庫的資源,合理的備份策略制定是每個DBA應該做的

還原與恢復
還原是備份的逆過程,就是從備份集中讀取資料頁,並將資料頁寫入到目標資料庫對應資料檔案相應位置的過程。
由於聯機備份時,系統中可能存在一些處於活動狀態的事務正在執行,並不能保證備份集中的所有資料頁是處於一致性狀態;而離線備份時,資料頁不一定是正常關閉的,也不能保證備份集中所有資料頁是處於一致性狀態。因此,還原結束後目標庫有可能處於非一致性狀態,不能馬上提供資料庫服務;必須要進行資料庫恢復操作後,才能正常啟動。

備份還原原理:

歸檔說明
備份與恢復過程都依賴歸檔日誌,歸檔日誌是保證資料一致性和完整性的重要保障。配有歸檔日誌的資料庫系統在出現故障時丟失資料的可能性更小,這是因為一旦出現介質故障如磁碟損壞時,利用歸檔日誌,系統可被恢復至故障發生的前一刻,也可以還原到指定的時間點
就是將 Redo 日誌寫入到本地歸檔日誌檔案的過程。配置本地歸檔情況下,Redo 日誌刷盤執行緒將 Redo 日誌寫入聯機 Redo 日誌檔案後,對應的 RLOG_PKG 由專門的歸檔執行緒負責寫入本地歸檔日誌檔案中。

與聯機 Redo 日誌檔案可以被覆蓋重用不同,本地歸檔日誌檔案不能被覆蓋,寫入其中的 Redo 日誌資訊會一直保留,直到使用者主動刪除;如果配置了歸檔日誌空間上限,系統會自動刪除最早生成的歸檔 Redo 日誌檔案,騰出空間。如果磁碟空間不足,且沒有配置歸檔日誌空間上限(或者配置的上限超過實際空間),系統將自動掛起,直到使用者主動釋放出足夠的空間後繼續執行。

DM 提供了按指定的時間或指定的 LSN 刪除歸檔日誌的系統函式(SF_ARCHIVELOG_DELETE_BEFORE_TIME 和
SF_ARCHIVELOG_DELETE_BEFORE_LSN),但需謹慎使用。避免歸檔日誌缺失,導致資料無法恢復。

歸檔日誌備份
與聯機備份收集備份過程中產生的 REDO 日誌寫入備份集不同,歸檔日誌備份專門用來備份本地歸檔日誌檔案,將符合條件的本地歸檔日誌檔案拷貝到備份集中儲存起來。
歸檔日誌備份僅備份指定資料庫生成的本地歸檔日誌檔案,要求歸檔日誌檔案的DB_MAGIC 與資料庫的 DB_MAGIC 保持一致。如果本地歸檔目錄中包含多個不同資料庫的歸檔日誌檔案,也只會備份一個特定資料庫的歸檔日誌。由於經過還原後資料庫的DB_MAGIC 會產生變化,因此即便 PERMANENT_MAGIC 相同DB_MAGIC 不同的資料庫產生的歸檔日誌也不會備份。
與普通的資料庫備份一樣,歸檔日誌備份也支援加密與壓縮功能,可以聯機執行歸檔日誌備份,也可以在資料庫關閉情況下使用 DMRMAN 工具進行離線備份。歸檔日誌備份時,可以指定是否刪除已經備份的歸檔日誌檔案,在生成歸檔日誌備份集的同時,刪除本地歸檔日誌檔案,釋放磁碟空間。
由於本地歸檔的非同步實現機制,為了確保歸檔日誌備份的完整性,一般會在歸檔日誌備份之前執行一個歸檔切換動作。

備份還原舉例說明:

實驗1:驗證從歸檔恢復資料庫的實驗
先做一個數據庫的全備,然後插入資料,並生成歸檔 最後用歸檔追加資料,找到我們建立的這張表 因為建立表是在做備份之後,所以必須用歸檔才能找到資料。

1.做資料庫的全備 SQL> backup database backupset ‘/dm/backup/db_bak_20200509/’;
在這裡插入圖片描述
2.用SQL命令往資料庫裡面寫資料
在這裡插入圖片描述
3.模擬資料庫宕機或者丟失資料檔案,破壞資料庫的redo檔案,一定不要在生產環境這麼玩!!!
在這裡插入圖片描述
4.用備份恢復資料庫 RMAN> restore database ‘/dm/data/DAMENG/dm.ini’ from backupset ‘/dm/backup/db_bak_20200509’;
在這裡插入圖片描述
5.用歸檔再做recover
RMAN> recover database ‘/dm/data/DAMENG/dm.ini’ with archivedir ‘/dm/data/DAMENG/arch’;
在這裡插入圖片描述
6.更新資料庫魔數
在這裡插入圖片描述
7.啟動資料庫並且查詢表結構,發現表在,就說明表恢復成功了
在這裡插入圖片描述
實驗2:驗證從備份集恢復資料庫的實驗

1.破壞資料庫的redo檔案,並驗證redo檔案的損壞會不會造成資料庫損壞

在這裡插入圖片描述
發現數據庫已經進不去了
在這裡插入圖片描述
2.關庫,並用RMAN做restore,因為還原全庫只能在離線模式下還原
在這裡插入圖片描述

3.recovery資料庫
在這裡插入圖片描述
4.更新資料庫魔數
在這裡插入圖片描述
5.在OS層啟動資料庫
在這裡插入圖片描述
6.發現可以登陸到資料庫,恢復成功
在這裡插入圖片描述