達夢資料庫備份恢復

zjlnbv發表於2020-01-13

1 備份恢復概述

  DM7 資料庫中的資料儲存在資料庫的物理資料檔案中,資料檔案按照頁、簇和段的方式進行管理,資料頁是最小的資料儲存單元。任何一個對 DM7 資料庫的操作,歸根結底都是對某個資料檔案頁的讀寫操作。


關於這些結構可以參考:


DM7 達夢資料庫 邏輯結構 說明

https://www.cndba.cn/dave/article/3568


  DM7 備份的本質就是從資料庫檔案中拷貝有效的資料頁儲存到備份集中,這裡的有效資料頁包括資料檔案的描述頁和被分配使用的資料頁。而在備份的過程中,如果資料庫系統還在繼續執行,這期間的資料庫操作並不是都會立即體現到資料檔案中,而是首先以日誌的形式寫到歸檔日誌中,因此,為了保證使用者可以通過備份集將資料恢復到備份結束時間點的狀態,就需要將備份過程中產生的歸檔日誌也儲存到備份集中。


  還原與恢復是備份的反過程。還原是將備份集中的有效資料頁重新寫入目標資料檔案的過程。恢復則是指通過重做歸檔日誌,將資料庫狀態恢復到備份結束時的狀態;也可以恢復到指定時間點和指定 LSN。恢復結束以後,資料庫中可能存在處於未提交狀態的活動事務,這些活動事務在恢復結束後的第一次資料庫系統啟動時,會由 DM7 資料庫伺服器自動進行回滾。


  DM 資料庫的備份還原包括兩種型別:物理備份還原和邏輯備份還原。

物理備份還原是對資料庫的作業系統物理檔案(如資料檔案、控制檔案和日誌檔案等)的備份還原。例如使用 RMAN 工具進行的備份還原。

邏輯備份還原是對資料庫邏輯元件(如表、檢視和儲存過程等資料庫物件)的備份還原。例如使用 dexp和 dimp 進行的備份還原。


2 表空間與資料檔案


  DM7 資料庫的表空間是一個邏輯概念,其目的主要是為了方便資料庫的管理,資料庫的所有物件在邏輯上都存放在某個表空間中,而物理上都儲存在所屬表空間的資料檔案中。一個表空間由一個或多個資料檔案組成。

  資料檔案是資料庫中最重要的檔案型別,是真實資料儲存的地方。DM7 中資料檔案的副檔名為.dbf,分為系統預設生成的資料檔案和使用者自己建立的資料檔案兩類。

  在建立 DM7 資料庫時,系統會自動建立 5 個表空間:SYSTEM 表空間、ROLL 表空間、MAIN 表空間、TEMP 表空間和 HMAIN 表空間。DM7 自動為這幾個自動建立的表空間分別生成預設的資料檔案:SYSTEM.DBF、ROLL.DBF、MAIN.DBF 和 TEMP.DBF,HMAIN 表空間沒有預設的資料檔案。


關於表空間的說明也可以參考:


DM7 達夢資料庫 邏輯結構 說明

https://www.cndba.cn/dave/article/3568


注意:DM7 的物理備份還原不支援:


TEMP 表空間。

HUGE 表空間,即資料庫備份和還原不包括 HMAIN 和使用者建立的 HUGE表空間;也不支援對 HMAIN 和使用者建立的 HUGE 表空間進行表空間備份和還原。DM7 提供了 HUGE 表備份還原系統函式支援 HUGE 表的聯機備份還原。

關於HUGE 表空間的說明可以參考我的部落格:


DM7 達夢資料庫 列儲存表 HUGE表 管理說明

https://www.cndba.cn/dave/article/3583


3 重做日誌

  重做日誌,又叫 REDO 日誌,記錄了所有物理頁的修改,基本資訊包括操作型別、表空間號、檔案號、頁號、頁內偏移、實際資料等。資料庫中 INSERT、DELETE、UPDATE等 DML 操作以及 CREATE TABLE 等 DDL 操作轉化為對某些資料檔案、某些資料頁的修改。因此,在系統故障重啟時,通過重做 REDO 日誌,可以將資料庫恢復到故障時的狀態。


  DM7 資料庫預設包含兩個副檔名為 log 的日誌檔案,用來儲存 REDO 日誌,稱為聯機重做日誌檔案。這兩個檔案迴圈使用。任何資料頁從記憶體緩衝區寫入磁碟之前,必須保證其對應的 REDO 日誌已經寫入到聯機日誌檔案。


4 歸檔日誌

  DM7資料庫可以在歸檔和非歸檔兩種模式下執行。

  DM7 支援多種歸檔方式,本文中若無特殊說明,均指本地歸檔。當資料庫處於歸檔模式下且配置了本地歸檔時,REDO 日誌先寫入聯機日誌檔案,然後再非同步寫入歸檔日誌檔案。歸檔日誌檔案以配置的歸檔名稱和檔案建立時間命名,副檔名也是 log。


  系統在歸檔模式下執行會更安全,當出現介質故障,如磁碟損壞導致資料檔案丟失、異常時,利用歸檔日誌,系統可以恢復至故障發生的前一刻。因此,建議將歸檔目錄與資料檔案配置、儲存到不同的物理磁碟上。


  除了表備份還原,其他的聯機備份與還原必須執行在歸檔模式下。


關於重做日誌和歸檔的更多內容可以參考:


DM7 達夢資料庫 物理結構 說明

https://www.cndba.cn/dave/article/3571

DM7 達夢資料庫 重做日誌管理 及 歸檔模式切換

https://www.cndba.cn/dave/article/3575


5 檢查點

  DM7 資料庫執行過程中,使用者的所有操作都在記憶體中進行。每修改一條記錄都必須先把記錄所在的資料頁載入到 BUFFER 緩衝區中,然後進行修改。事務執行時,會把生成的REDO 日誌保留在日誌緩衝區 RLOG_BUF 中,每條日誌記錄對應一個 LSN,當事務提交或日誌緩衝區滿或執行檢查點時會進行日誌刷盤。


  檢查點(checkpoint)是一個資料庫事件,它的功能是按照資料頁的修改順序,依次將 BUFFER 緩衝區中的髒頁寫入磁碟,並在這個過程中動態調整 CKPT_LSN 值,釋放日誌空間。


DM7 的檢查點分為兩種:完全檢查點和部分檢查點:


1)完全檢查點:會將記憶體緩衝區中的所有髒頁寫入磁碟,並調整 CKPT_LSN,在資料庫正常關閉時會產生一個完全檢查點。

2)部分檢查點 :根據 dm.ini 配置檔案中的引數 CKPT_FLUSH_RATE 和CKPT_FLUSH_PAGES,確定每次檢查點刷髒頁的數量。執行部分檢查點的過程中,DDL/DML操作都可以正常執行,DM7 系統中絕大多數情況下觸發的都是部分檢查點。


DM7 中幾個重要的 LSN 值如下:


1.LSN :LSN(Log Sequence Number)是由系統自動維護的 Bigint 型別數值,具有自動遞增、全域性唯一特性,每一個 LSN 值代表著 DM 系統內部產生的一個物理事務。物理事務(Physical Transaction,簡稱 ptx)是資料庫內部一系列修改物理資料頁操作的集合,與資料庫管理系統中事務(Transaction)概念相對應,具有原子性、有序性、無法撤銷等特性。

2.CUR_LSN:系統當前 LSN,代表已經分配的最大 LSN 值。物理事務提交時,系統會為其分配一個唯一的 LSN 值(CUR_LSN + 1),同時修改 CUR_LSN 值為 CUR_LSN + 1。 

3.FILE_LSN :檔案 LSN,已經寫入聯機重做日誌檔案的最大 LSN 值。每次將 RLOG_BUF 寫入聯機重做日誌檔案後,都會修改 FILE_LSN 值。

4.FLUSH_LSN:FLUSH_LSN 是已經發起日誌刷盤請求,但還沒有真正寫入聯機,Redo 日誌檔案的最大 LSN 值。

5.CKPT_LSN :檢查點 LSN,所有 LSN <= CKPT_LSN 的物理事務修改的資料頁,都已經從 BUFFER緩衝區寫入磁碟。因此,資料庫故障重啟時,CKPT_LSN 之前的 REDO 日誌不需要重做,只需要從 CKPT_LSN+1 開始重做 REDO 日誌,就可以將系統恢復到故障前狀態。並且,在聯機重做日誌檔案中,LSN 值<=CKPT_LSN 的 REDO 日誌都可以被覆蓋。


根據以上介紹的幾個 LSN 值,我們為確定備份範圍特別定義了兩個 LSN: 


1)START_LSN :為了保證備份的完整性和有效性,必須包含的歸檔日誌起始 LSN 值。START_LSN = 備份開始時 CKPT_LSN + 1。

2)END_LSN:為了保證備份的完整性和有效性,必須包含歸檔日誌結束 LSN 值。END_LSN = 備份結束時 FILE_LSN。如果 START_LSN 等於 END_LSN + 1,則表明備份過程中,沒有任何資料被修改。


  在做增量備份時,要求其 START_LSN 必須大於等於基準備份的 END_LSN 值,這個要求可以簡化還原過程,避免還原基準備份後必須先進行恢復再還原增量備份。


  在聯機日誌檔案中,可以覆蓋寫入 REDO 日誌的檔案長度為可用日誌空間;不能被覆蓋的 REDO 日誌,系統故障重啟需要重做的 REDO 日誌為有效日誌,有效日誌的 LSN 取值範圍是(CKPT_LSN,FILE_LSN]。

資料庫執行過程中產生的待寫入日誌首先寫入日誌緩衝區 RLOG_BUF,當日志刷盤時一起寫入聯機日誌檔案中。


6 備份集

  備份集用來存放備份過程中產生的備份資料及備份資訊。一個備份集對應了一次完整的備份。一般情況下,一個備份集就是一個目錄,備份集包含一個或多個備份片檔案,以及一 個備份後設資料檔案。


6.1 備份片


  備份片用來儲存備份資料的檔案。備份時,目標資料檔案內容或歸檔日誌內容經過處理後,都會存放到各自的備份片檔案中。備份片檔案字尾為.bak,用來存放備份資料,備份集中存放資料頁的檔案稱為資料備份片,存放 REDO 日誌的備份片稱為日誌備份片。 備份片的大小可以在備份時通過 MAXPIECESIZE 指定,一個備份集中可能生成多個備份片。


6.2 後設資料


後設資料檔案用來存放備份資訊,後設資料檔案的字尾為.meta。通過後設資料檔案,可以瞭解整個備份集資訊。後設資料檔案中包含的備份資訊包括:


1) 備份集本身相關的資訊,如是否聯機備份,備份的範圍,備份的加密資訊,以及備份的壓縮資訊等;

2) 備份源庫的建庫引數資訊,如 RAC 的節點數,是否大小寫敏感,PAGE_CHECK 屬性等;

3) 資料檔案資訊,如備份了哪些資料檔案,檔案大小,以及檔案相關的表空間資訊等;

4) 備份片的資訊,如包含哪些備份片檔案、備份片大小等資訊;

5) 備份庫的 dm.ini 引數資訊 和 密 鑰 檔案( dm_service.private 或 者dm_external.config,若指定 usbkey 加密,則不備份)。


6.3 備份集搜尋目錄


備份集搜尋目錄,用於蒐集目標備份集的檔案路徑。備份集搜尋目錄包括 4 類:


1)資料庫的預設備份目錄;

2)WITH BACKUPDIR 子句指定的目錄;

3)還原時備份集所在的上級目錄;

4)增量備份時基備份集所在的上級目錄。


  如果使用第三方備份(介質為 TAPE 型別),則只搜尋 WITH BACKUPDIR 子句指定的備份集目錄,具體蒐集方式由第三方備份程式決定。


7 備份

  備份就是從源庫(備份庫)中讀取有效資料頁、歸檔日誌等相關資訊,經過加密、壓縮等處理後寫入備份片,並將相關備份資訊寫入備份後設資料檔案的過程。


 


7.1 邏輯備份和物理備份


  邏輯備份是指利用 dexp 匯出工具,將指定物件(庫級、模式級、表級)的資料匯出到檔案的備份方式。邏輯備份針對的是資料內容,並不關心這些資料物理儲存在什麼位置。

  物理備份則直接掃描資料庫檔案,找出那些已經分配、使用的資料頁,拷貝並儲存到備份集中。物理備份過程中,不關心資料頁的具體內容是什麼,也不關心資料頁屬於哪一張表,只是簡單的根據資料庫檔案系統的描述,來挑選有效的資料頁。


7.2 聯機備份和離線備份


  資料庫處於執行狀態、並正常提供資料庫服務情況下進行的備份操作,我們稱為聯機備份。資料庫處於關閉狀態時進行的備份操作,被稱為離線備份。

  從 V2.0 版本開始,使用 DMRMAN 工具進行離線備份,並且支援對異常關閉的資料庫進行離線庫備份。備份異常關閉的資料庫,要求配置了本地歸檔,如果本地歸檔不完整,則需要先修復本地歸檔,再進行備份。


  聯機備份則使用客戶端工具連線到伺服器例項後,通過執行 SQL 語句進行;也可以通過配置作業,定時完成自動備份。聯機備份不影響資料庫正常提供服務,是最常用的備份手段之一。


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

  只有已經關閉的資料庫才允許執行離線備份。正在執行的資料庫,無法執行離線備份,系統會報錯。


7.3 資料備份和歸檔日誌備份


  按照備份內容不同,可以分為資料備份和歸檔日誌備份。資料備份主要針對資料檔案內容,包括庫備份、表空間備份和表備份。


  庫備份,又稱為庫級備份。庫備份會拷貝資料庫中所有資料檔案的有效資料頁,如果是聯機備份,則還會拷貝備份過程中產生的歸檔日誌,寫入到備份集中。


  表空間備份是針對特定表空間執行的備份,又稱為表空間級備份。表空間備份只能在聯機狀態下執行。


  表備份則拷貝指定表的所有資料頁到備份集中,並會記錄各個資料頁之間的邏輯關係用以恢復。表備份只能在聯機狀態下執行,一次表備份操作只能備份一張使用者表,並且不支援增量表備份。


  歸檔日誌備份,是專門針對歸檔日誌檔案進行操作,不涉及任何資料檔案內容。歸檔日誌備份掃描歸檔目錄收集檔檔案,並將歸檔日誌寫入到備份集中。既可以在資料庫執行狀態下,執行聯機歸檔日誌備份;也可以在資料庫關閉狀態下執行離線歸檔日誌備份。


7.4 一致性備份和非一致性備份


  按照備份集中的資料是否滿足一致性,可以將備份劃分為一致性備份和非一致性備份。

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


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


 


7.5 完全備份和增量備份


  按照備份資料完整性,可將備份分為完全備份和增量備份。庫備份和表空間備份支援增量備份,表備份不支援增量備份。

完全備份生成的備份集包含了指定庫(或者表空間)的全部有效資料頁。當資料規模比較大的情況下,生成的完全備份集通常會比較大,而且備份時間也會比較長。


  增量備份是在某個特定備份集基礎上,收集資料庫新修改的資料頁進行備份,可以有效減少備份集的空間佔用、提高備份速度。這個特定的、已經存在的備份集稱為增量備份的基備份,根據對基備份的要求不同,DM 的增量備份分為以下兩種:


1. 差異增量備份


  差異增量備份的基備份既可以是一個完全備份集,也可以是一個增量備份集。

  利用增量備份進行還原操作時,要求其基備份必須是完整的;如果差異增量備份的基備份本身也是一個增量備份,那麼同樣要求其基備份是完整的;任何一個增量備份,最終都是以一個完全備份作為其基備份。因此,完全備份是增量備份的基礎。


2. 累積增量備份


  累積增量備份的基備份只能是完全備份集,而不能是增量備份集。

  增量備份時,並不關心其基備份集是離線備份生成的,還是聯機備份生成的,離線增量備份的基備份集可以是聯機備份生成的,聯機增量備份的基備份集也可以是離線備份生成的。


 


8 還原與恢復

  還原是備份的逆過程,就是從備份集中讀取資料頁,並將資料頁寫入到目標資料庫對應資料檔案相應位置的過程。

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


8.1 邏輯還原和物理還原


  邏輯還原是邏輯備份的逆過程,邏輯還原就是使用 dimp 工具,把 dexp 匯出的備份資料重新匯入到目標資料庫。

  物理還原是物理備份的逆過程,物理還原一般通過 DMRMAN 工具(或者 SQL 語句),把備份集中的資料內容(資料檔案、資料頁、歸檔檔案)重新拷貝、寫入目標檔案。


8.2 聯機還原和離線還原


  聯機還原指資料庫處於執行狀態時,通過 SQL 語句執行還原操作。表空間還原和表還原可以在聯機狀態下執行,並且表空間還原要求目標表空間不是 ONLINE 狀態。

  離線還原指資料庫處於關閉狀態時執行的還原操作,離線還原通過 DMRMAN 工具進行。

  庫備份、表空間備份和歸檔備份,可以執行離線還原。離線還原操作的目標庫必須處於關閉狀態。


 


8.3 資料還原和歸檔日誌還原


  根據備份集型別,資料還原可以分為庫還原、表空間還原和表還原。庫還原的目標庫必須處於關閉狀態;表空間還原既可以離線執行也可以聯機執行;表還原操作只能聯機執行。

  表空間還原的資料來源既可以是表空間備份集,也可以是庫備份集。還原的目標表空間不能是 TEMP 表空間,只能是 MAIN、SYSTEM、ROLL 表空間,或者使用者定義的表空間。

  表還原從表備份集讀取資料,重新恢復目標表資料,還會在目標表上重建索引、約束。

  歸檔日誌還原則將歸檔日誌備份集中的歸檔日誌內容,重新生成到指定目錄中。


8.4 完全還原和增量還原


  完全還原是指直接利用完全備份集進行資料還原操作。增量還原指通過增量備份集進行資料還原操作。但是考慮到增量備份集的基礎一定是一個完全備份集,因此增量還原過程中隱含了一個完全還原操作。如果增量備份集的基備份集被刪除了,那麼單獨使用這個增量備份集是無法進行還原操作的。


 


物理備份還原練習

案例1:對dmserver 資料庫進行冷備(完整備份)

第一步: 通過DM服務檢視器,先關閉要備份的例項,但是dmap 服務要開啟


第二步.  在dm7/bin目錄下輸入 ./dmrman 


第三步:使用命令備份  backup database ‘/dm7/data/DAMENG/dm.ini’; 




看到backup successfull 就是備份成功


案例2:對dmserver 資料庫進行熱備(完整/增量備份)

前提:


1.先把資料庫例項啟動

2.建立一個備份目錄,/dm7/backup

第一步. 開啟歸檔日誌,可以用管理工具進行開歸檔






 




第二步:進行全備/增量備份


方法1.使用sql命令


SQL> backup database full backupset ‘dm7/backup/full_bak’;


SQL> backup database increment backupset '/dm7/backup/incr_bak';


注意:如果基備沒有變化,是不能增量備的


方法2.使用DM管理工具


左側節點,找到備份--》庫備份--》新建備份,選擇全備或增量備份




備份成功後可以到/dm7/data/DAMENG/bak/DB_DAMENG_FULL_2019xxxx目錄下檢視備份檔案


 


備份表空間和表

1. 備份dmhr這個表空間,備份到dm7/backup目錄下


SQL> backup  tablespace dmhr backupset ‘/dm7/backup/dmhr_bak’;


2. 備份dmhr的employee表,備份到dm7/backup目錄下


SQL> backup table dmhr.employee backupset ‘/dm7/backup/dmhr_bak’;


 

還原表空間

案例:模擬表空間tbs2損壞,從熱備全備中恢復tbs2表空間


1.刪除tbs2 的兩個表空間檔案


mv  tbs2_01.dbf  tbs2_01_bak.dbf


2. 重啟資料庫例項


3. 手動將資料庫例項從mount到open


SQL> alter database open;


4. 檢視錶空間


SQL> select tablespace_name,status from dba_dablespace;


這時候tbs2是offline


如果alter tablespace tbs2 online;就會提示tbs2_01.dbf不存在


5. 開始恢復表空間


SQL> restore tablespace dmhr.tbs2 from backupset '/dm7/backup/full_bak/';


需要注意事項

備份的資料庫和表空間,如果做還原,是還原到當前時刻、如果備份的表做還原,還原到表的備份時刻。


System表空間和roll表空間損壞,要重新初始化資料庫例項,在用備份去還原。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69959669/viewspace-2673099/,如需轉載,請註明出處,否則將追究法律責任。

相關文章