SQLSERVER完整資料庫還原(完整恢復模式)

DBA_每日記發表於2020-01-07

資料庫完整還原的目的是還原整個資料庫。 整個資料庫在還原期間處於離線狀態。 

在資料庫的任何部分變為聯機之前,必須將所有資料恢復到同一點,即資料庫的所有部分都處於同一時間點並且不存在未提交的事務。

在完整恢復模式下,還原資料備份之後,必須還原所有後續的事務日誌備份,然後再恢復資料庫。 

您可以將資料庫還原到這些日誌備份之一的特定 恢復點 。 恢復點可以是特定的日期和時間、標記的事務或日誌序列號 (LSN)。

還原資料庫時,特別是在完整恢復模式或大容量日誌恢復模式下,您應使用一個還原順序。 還原順序 由通過一個或多個還原階段來移動資料的一個或多個還原操作組成。

 

一、將資料庫還原到故障點

通常,將資料庫恢復到故障點分為下列基本步驟:

1.備份活動事務日誌(稱為日誌尾部)。 此操作將建立結尾日誌備份。 如果活動事務日誌不可用,則該日誌部分的所有事務都將丟失。


 重要

在大容量日誌恢復模式下,備份任何包含大容量日誌操作的日誌都需要訪問資料庫中的所有資料檔案。 如果無法訪問該資料檔案,則不能備份事務日誌。 

在這種情況下,您必須手動重做自最近備份日誌以來所做的所有更改。


2.還原最新完整資料庫備份而不恢復資料庫 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。

3.如果存在差異備份,則還原最新的差異備份而不恢復資料庫 (RESTORE DATABASE database_name FROM differential_backup_device WITH NORECOVERY)。

還原最新差異備份可減少必須還原的日誌備份數。

4.從還原備份後建立的第一個事務日誌備份開始,使用 NORECOVERY 依次還原日誌。

5.恢復資料庫 (RESTORE DATABASE database_name WITH RECOVERY)。 此步驟也可以與還原上一次日誌備份結合使用。


下圖說明此還原順序。 故障發生後 (1),將建立結尾日誌備份 (2)。 接著,將資料庫還原到該故障點。 

這涉及到還原資料庫備份、後續差異備份以及在差異備份後執行的每個日誌備份,包括結尾日誌備份。



基本 TRANSACT-SQL RESTORE 語法

上圖中還原順序的基本 RESTORETransact-SQL 語法如下:

RESTORE DATABASE database FROM full database backup WITH NORECOVERY;

RESTORE DATABASE database FROM full_differential_backup WITH NORECOVERY;

RESTORE LOG database FROM log_backup WITH NORECOVERY;

對於其他每個日誌備份,重複此還原日誌步驟。

RESTORE DATABASE database WITH RECOVERY;

示例:恢復到故障點 (Transact-SQL)

以下 Transact-SQL 示例顯示了將資料庫還原到故障點的還原順序中的基本選項。 此示例將建立資料庫的結尾日誌備份。 

接下來,此示例將還原完整資料庫備份和日誌備份,然後還原結尾日誌備份。 此示例將在最後的單獨步驟中恢復資料庫。

 

USE master;  

--Create tail-log backup.  

BACKUP LOG AdventureWorks2012   

TO DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'    

   WITH NORECOVERY;   

GO  

--Restore the full database backup (from backup set 1).  

RESTORE DATABASE AdventureWorks2012   

  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   

  WITH FILE=1,   

    NORECOVERY;  

  

--Restore the regular log backup (from backup set 2).  

RESTORE LOG AdventureWorks2012   

  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'   

  WITH FILE=2,   

    NORECOVERY;  

  

--Restore the tail-log backup (from backup set 3).  

RESTORE LOG AdventureWorks2012   

  FROM DISK = 'Z:\SQLServerBackups\AdventureWorksFullRM.bak'  

  WITH FILE=3,   

    NORECOVERY;  

GO  

--recover the database:  

RESTORE DATABASE AdventureWorks2012 WITH RECOVERY;  

GO 


 

二、將資料庫還原到日誌備份中的某個時間點

在完整恢復模式下,完整的資料庫還原通常可恢復到日誌備份中的某個時間點、標記的事務或 LSN。 

但是,在大容量日誌恢復模式下,如果日誌備份包含大容量更改,則不能進行時點恢復。

時點還原方案示例

下例假定針對一個關鍵任務型資料庫系統,每天午夜建立一個完整資料庫備份;

從星期一到星期六,每小時建立一個差異資料庫備份;全天每 10 分鐘建立一個事務日誌備份。 

若要將資料庫還原到星期三凌晨 5:19 的狀態, 請執行以下操作:


1.還原星期二午夜建立的完整資料庫備份。

2.還原星期四凌晨 5:00 建立的差異資料庫 備份。

3.應用星期四凌晨 5:10建立的事務日誌 備份。

4.應用星期三凌晨 5:20 建立的事務日誌 備份,指定恢復程式僅應用到凌晨 5:19 之前發生的事務。


或者,如果需要將資料庫還原到它在星期四凌晨 3:04 的狀態, 而在星期四凌晨 3:00 建立的差異資料庫備份已不可用, 

則執行下列操作:


1.還原在星期三午夜建立的資料庫備份。

2.還原星期四凌晨 2:00 建立的差異資料庫 備份。

3.應用從星期四凌晨 2:10 到 3:00 建立的所有事務 日誌 備份。

4.應用星期四凌晨 3:10 建立的事務日誌 備份,停止凌晨 3:04 的恢復程式。


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

相關文章