檔案還原 (完整復原模式)

適用於:SQL Server

這個主題僅與在完整或大量載入復原模式下,包含多個檔案或檔案群組的資料庫有關。

檔案還原的目的是還原一個或多個損毀的檔案,而不還原整個資料庫。 檔案還原實例包含複製、向前復原及復原適當資料的單一還原順序。

如果正在還原的檔案群組為可讀寫,則必須在還原最後一個資料或差異備份之後,套用無間斷的記錄備份鏈結。 這會將檔案群組向前復原到位於記錄檔內目前使用中記錄檔記錄上的記錄檔記錄。 復原點通常接近記錄的結尾,但不一定如此。

如果正在還原的檔案群組為唯讀,通常沒有必要套用記錄備份,所以會略過。 如果是在檔案變成唯讀之後進行的備份,此備份就是要還原的最後一個備份。 向前復原會在目標點停止。

這些檔案還原實例如下:

  • 離線檔案還原

    「離線檔案還原」 (Offline File Restore) 中,還原損毀的檔案或檔案群組時,資料庫處於離線狀態。 在還原順序結束後,資料庫會恢復上線。

    SQL Server 的所有版本都支援離線檔案還原。

  • 線上檔案還原

    「線上檔案還原」 (Online File Restore) 中,如果資料庫在還原期間處於線上,則在檔案還原期間也會處於線上。 不過,在還原作業期間,包含正在還原之檔案的每個檔案群組都會離線。 離線檔案群組中的所有檔案都復原後,檔案群組就會自動回到線上。

    如需線上頁面和檔案還原支援的資訊,請參閱 SQL Server 2022 版本和支援的功能。 如需線上還原的詳細資訊,請參閱線上還原 (SQL Server)

    提示

    如果您想要讓資料庫離線以進行檔案還原,請在啟動還原順序之前,先執行下列 ALTER DATABASE 陳述式來使資料庫離線:ALTER DATABASE database_name SET OFFLINE。

從檔案備份還原損壞的檔案

  1. 在還原一個或多個損壞的檔案之前,請嘗試建立 結尾記錄備份

    如果記錄已經損壞,就無法建立結尾記錄備份,而且您必須還原整個資料庫。

    如需如何備份交易記錄的相關資訊,請參閱交易記錄備份 (SQL Server)

    重要

    如果是離線檔案還原,一定要在檔案還原之前進行結尾記錄備份。 如果是線上檔案還原,一定要在檔案還原之後進行記錄備份。 為了讓檔案可以復原到與資料庫其餘部分一致的狀態,進行這個記錄備份有其必要。

  2. 從每個損毀檔案的最近一次檔案備份還原該檔案。

  3. 還原每個已還原檔案的最新差異檔案備份 (如果有的話)。

  4. 依序還原交易記錄備份,從包含最舊還原檔案的備份開始,到步驟 1 所建立的結尾記錄備份結束。

    您必須還原在檔案備份之後建立的交易記錄備份,才能讓資料庫恢復一致的狀態。 交易記錄備份可以快速地向前復原,因為只需套用適用於還原檔案的變更。 還原個別檔案比還原整個資料庫更為理想,因為不需複製未受損的檔案,便可接著向前復原。 不過,仍然需要讀取記錄備份的整個鏈結。

  5. 復原資料庫。

注意

檔案備份可以用來將資料庫還原至較早的時間點。 若要這樣做,您必須還原整個檔案備份組,然後依序還原交易記錄備份,以回到上一次還原的檔案備份結尾之後的目標時間點。 如需時間點還原的詳細資訊,請參閱將 SQL Server 資料庫還原至某個時間點 (完整復原模式)

離線檔案還原的 Transact-SQL 還原順序 (完整復原模式)

檔案還原實例包含複製、向前復原及復原適當資料的單一還原順序。

本節說明檔案還原順序的基本 RESTORE 選項。 會省略與這個檔案還原無關的語法和詳細資料。

下列範例還原順序顯示如何使用 WITH NORECOVERY 來離線還原兩個次要檔案 ( AB)。 接下來,此範例會以 NORECOVERY 套用這兩個記錄備份,然後再使用 WITH RECOVERY 套用結尾記錄備份以進行還原。

注意

下列範例還原順序是透過讓檔案離線來啟動,然後建立結尾記錄備份。

--Take the file offline.  
ALTER DATABASE database_name MODIFY FILE SET OFFLINE;  
-- Back up the currently active transaction log.  
BACKUP LOG database_name  
   TO <tail_log_backup>  
   WITH NORECOVERY;  
GO   
-- Restore the files.  
RESTORE DATABASE database_name FILE=name   
   FROM <file_backup_of_file_A>   
   WITH NORECOVERY;  
RESTORE DATABASE database_name FILE=<name> ......  
   FROM <file_backup_of_file_B>   
   WITH NORECOVERY;  
-- Restore the log backups.  
RESTORE LOG database_name FROM <log_backup>   
   WITH NORECOVERY;  
RESTORE LOG database_name FROM <log_backup>   
   WITH NORECOVERY;  
RESTORE LOG database_name FROM <tail_log_backup>   
   WITH RECOVERY;  

範例

相關工作

還原檔案和檔案群組

另請參閱

備份與還原:互通性與共存性 (SQL Server)
差異備份 (SQL Server)
完整檔案備份 (SQL Server)
Backup Overview (SQL Server)
還原和復原概觀 (SQL Server)
RESTORE (Transact-SQL)
完整資料庫還原 (簡單復原模式)
分次還原 (SQL Server)