共用方式為


針對處於還原、復原暫止或離線狀態的檔案規劃分次還原順序

 這個主題僅與當您規劃資料庫的分次復原時,包含多個檔案群組 (在簡單模式下,則只有唯讀檔案群組) 的 SQL Server 資料庫有關。

如果還原順序涉及處於還原、復原暫止或離線狀態的檔案,您可能可以在不還原其資料的情況下復原檔案。若要判斷是否必須還原檔案的完整備份,或是只要復原檔案,您可以使用 sys.database_filessys.master_files 目錄檢視內儲存的中繼資料。

重做 LSN

第一個步驟是檢閱包含「重做 LSN」的目錄檢視資料行:redo_start_lsnredo_start_fork_guidredo_target_lsnredo_target_fork_guid。下表描述重做 LSN,並說明如何解讀。

資料行

描述

redo_start_lsnredo_start_fork_guid

這些資料行合起來描述代表檔案時間點的 (lsn,guid) 配對。向前復原檔案時,這些資料行的值會跟著變更。向前復原會從這一點繼續前進。

重要注意事項重要事項
如果 redo_start_lsn= NULL,則檔案的磁碟內存狀態不明,必須從完整備份還原檔案。

redo_target_lsnredo_target_fork_guid

這些資料行合起來描述定義復原點的 (lsn,guid) 配對,檔案必須還原至此方能與線上資料庫一致 (「目標復原點」)。

決定要使用 sys.database_files,或使用 sys.master_files

sys.database_filessys.master_files 目錄檢視都會包含重做 LSN 資料行,但是這些檢視不一定一致。如果資料庫在線上,sys.database_filessys.master_files 中的值就會一致。不過,這些值在下列情況中將會不一致:

  • 如果資料庫為唯讀,sys.database_files 就不會隨備份產生的任何變更進行更新,而只有 sys.master_files 包含最新的資訊。

    [!附註]

    若要得知檔案是否為唯讀,請檢查 is_read_onlyread_only_lsn 資料行。is_read_only 會指出檔案是否為唯讀。如果是的話,則 read_only_lsn 就是檔案變成唯讀的那一點。

  • 如果資料庫離線 (例如,正在進行還原時),便無法存取資料庫目錄。若是離線資料庫,您必須使用 sys.master_files 來取得資訊。

  • 如果還原作業目前對檔案有所影響,檔案的重做 LSN 便會更新,因而不一致。您只應該在還原之間檢查重做 LSN 資料行。

解讀這些資料行

[!附註]

此章節假設您已熟悉復原路徑和復原分岔的概念。如需詳細資訊,請參閱<復原路徑>。

此章節只適用於您執行時間點復原之後,仍然還有任何來自無用復原路徑之備份的情況。當您正在還原處於還原、復原暫止或離線狀態的檔案時,就會涉及復原分岔。藉由分析復原分岔,您可以識別可能的復原路徑。一般而言,復原資料庫時只有一個復原路徑,顯然是最好的。

若要識別最佳的復原路徑,您必須判斷檔案是在目標的復原分岔上,或是在不同的復原分岔上:

  • 檔案位在不同的復原分岔。

    如果 redo_start_fork_guid != redo_target_fork_guid 且不是 redo_target_fork_guid 的上階,則檔案位在與目標分岔不同的復原分岔。

    [!附註]

    若要找出上階分岔,請沿著記錄鏈結往回查看。如需詳細資訊,請參閱<復原路徑>。

    在此情況下,必須從完整備份還原檔案。這個還原會將檔案放在某一點,此點為資料庫目前復原點的有效上階。

    [!附註]

    若要還原任何檔案,檔案備份必須是資料庫復原點的上階。一定要尋找檔案的最新完整備份。資料必須向前復原到目標點。唯一的例外狀況是,如果在備份之前檔案已是唯讀,就不需要向前復原該唯讀檔案的檔案備份。必要時,在還原檔案備份之後,還原差異檔案備份 (如果有的話) 和記錄備份,以將檔案帶到目標復原點。

  • 檔案位在目前的 (目標) 復原分岔,或是目標分岔的上階。

    [!附註]

    如果您是在復原資料庫之後建立檔案備份,則檔案已位在目標復原分岔。

    在這些情況下,是否必須還原檔案取決於 redo_start_lsnredo_target_lsn 的關係,如下表所述。

    假設狀況

    結果

    redo_start_lsn =redo_target_lsn

    不需要還原該檔案。

    檔案與資料庫一致,檔案不需使用 RESTORE DATABASE <database_name> WITH RECOVERY 即可上線。

    redo_start_lsn<redo_target_lsn

    向前復原必須到達 redo_target_lsn,檔案才可以上線。

    redo_start_lsn>redo_target_lsn

    資料庫的時間比檔案早。您必須從完整備份還原檔案 (否則,資料庫就可能利用另一個部分還原順序,重新還原到更晚的時間點)。

    附註附註
    只有離線還原才可能發生這種情況,因為一旦復原主要檔案群組,就會產生新的復原分岔。未復原的次要檔案群組將不再與主要檔案群組位於相同的復原路徑。

[!附註]

在還原這其中一個復原路徑的備份之後,其他的復原路徑就不再有效。屬於無效復原路徑的備份會變成無用。最佳作法是刪除無用的備份,或將其明確標示為無用,而不予理會。