將 SQL Server 資料庫還原至某個時間點 (完整復原模式)

適用於:SQL Server

本主題描述如何使用 SQL Server Management Studio 或 Transact-SQL,將資料庫還原至 SQL Server 中的某個時間點。 本主題僅與使用完整或大量記錄復原模式的 SQL Server 資料庫相關。

重要

在大量記錄復原模式下,如果記錄備份包含大量記錄的變更,那麼無法還原到該備份中的任一時間點。 資料庫必須復原至交易記錄備份的結尾。

建議

  • 您可以使用 STANDBY 尋找未知時間點。

  • 指定還原順序中較早的時間點

權限

若被還原的資料庫不存在,使用者必須擁有CREATE DATABASERESTORE執行權限。 如果資料庫存在, RESTORE 權限會預設給 系統管理員 和 dbcreator 固定伺服器角色的成員,以及資料庫擁有者(dbo)(對於 FROM DATABASE_SNAPSHOT 選項,資料庫始終存在)。

RESTORE 權限會授與成員資格資訊始終可由伺服器隨時取得的角色。 由於只有在資料庫可存取且未損壞時,才能檢查固定資料庫角色的成員資格,而在執行 RESTORE 時,情況並非總是如此,因此 db_owner 固定資料庫角色的成員不具備 RESTORE 權限。

使用 SQL Server Management Studio

將資料庫還原至某個時間點

  1. 在 [物件總管] 中,連接至相關的 SQL Server 資料庫引擎執行個體,並展開伺服器樹。

  2. 展開 [資料庫] 。 視資料庫而定,選取使用者資料庫,或者展開 [系統資料庫] ,再選取系統資料庫。

  3. 以滑鼠右鍵按一下資料庫,指向 [Tasks],再指向 [Restore],然後按一下 [Database]。

  4. 在 [一般] 頁面上,使用 [來源] 區段指定要還原之備份組的來源和位置。 選取下列其中一個選項:

    • Database

      從下拉式清單中選取要還原的資料庫。 此清單僅包含已根據 msdb 備份記錄而備份的資料庫。

    注意

    如果備份是根據不同的伺服器建立的,目的地伺服器就沒有指定之資料庫的備份記錄資訊。 在此情況下,請選取 [裝置] ,以便手動指定要還原的檔案或裝置。

    • 裝置

      按一下瀏覽 ( ... ) 按鈕,開啟 [選取備份裝置] 對話方塊。 在 [備份媒體類型] 方塊中,選取列出的其中一種裝置類型。 若要選取 [備份媒體] 方塊中的一個或多個裝置,請按一下 [加入] 。

      將您要的裝置加入 [備份媒體] 清單方塊後,按一下 [確定] 即可回到 [一般] 頁面。

      在 [來源:裝置:資料庫] 清單方塊中,選取應該還原的資料庫名稱。

      注意 :這份清單只能在選取 [裝置] 時使用。 只有在所選取裝置上有備份的資料庫才可供使用。

  5. 在 [目的地] 區段中,會將要還原之資料庫的名稱自動填入 [資料庫] 方塊。 若要變更資料庫的名稱,請在 [資料庫] 方塊中輸入新名稱。

  6. 按一下 [時間表] ,存取 [備份時間表] 對話方塊。

  7. 在 [還原至] 區段中,按一下 [特定的日期與時間]。

  8. 使用 [日期] 及 [時間] 方塊或滑動軸,指定應該停止還原的特定日期與時間。 選取 [確定]。

    注意

    您可以使用 [時間表間隔] 方塊變更時間表上顯示的時間量。

  9. 當您指定了特定的時間點之後,Database Recovery Advisor 便會在 [要還原的備份組] 方格的 [還原] 資料行中確定只選取要還原到該時間點所需的備份。 這些選取的備份構成了您時間點還原的建議還原計畫。 您應該只使用選取的備份來進行時間點還原作業。

    如需 [要還原的備份組] 方格中各資料行的相關資訊,請參閱還原資料庫 (一般頁面)。 如需資料庫復原建議程式的相關資訊,請參閱還原和復原概觀 (SQL Server)。

  10. 在 [選項] 頁面的 [還原選項] 面板中,您可以選取下列任何選項 (如果情況適用):

    • 覆寫現有的資料庫 (WITH REPLACE)

    • 保留複寫設定 (WITH KEEP_REPLICATION)

    • 限制對還原資料庫的存取 (WITH RESTRICTED_USER)

    如需這些選項的詳細資訊,請參閱還原資料庫 (選項頁面)。

  11. 針對 [還原狀態] 方塊,選取選項。 此方塊決定資料庫在還原作業之後的狀態。

    • RESTORE WITH RECOVERY 是預設行為,透過回滾未提交的交易,讓資料庫隨時可用。 無法還原其他交易記錄。 若您要立即還原所有必要的備份,請選取這個選項。

    • RESTORE WITH NORECOVERY,這會使資料庫處於無法運作的狀態,且不會回復未提交的交易。 可以還原其他交易記錄。 資料庫在復原之前都無法使用。

    • RESTORE WITH STANDBY ,這會讓資料庫保持唯讀模式。 它會復原未認可的交易,但會將復原動作儲存在待命資料庫檔案中,以還原復原影響。

    如需這些選項的描述,請參閱還原資料庫 (選項頁面)。

  12. 如果選取的時間點需要 [還原前先進行結尾記錄備份],則會予以選取。 您不需要修改這個設定,但是即使不需要,還是可以選擇備份記錄結尾。

  13. 若資料庫有連接處於活動狀態,還原作業可能會失敗。 核取 [關閉現有的連接選項],確保 Management Studio 和資料庫之間的所有使用中連接已關閉。 這個核取方塊會在執行還原作業之前將資料庫設定為單一使用者模式,並在完成後將資料庫設定為多使用者模式。

  14. 如果想要系統在每個還原作業之間提示您,請選取 [還原每個備份之前先提示] 。 除非資料庫夠大,而且您想要監視還原作業的狀態,否則這通常不需要。

使用 TRANSACT-SQL

開始之前

指定的時間總是從日誌備份中還原。 在還原序列的每個 RESTORE LOG 語句中,你必須在相同的 STOPAT 子句中指定你的目標時間或交易。 若要執行時間點還原,您必須先還原一個完整的資料庫備份,且其結束時間早於您的目標還原時間點。 該完整資料庫備份可以比最近的完整資料庫備份更早,只要您之後還原每個後續的記錄備份,直到並包括含有目標時間點的記錄備份即可。

為了協助你判斷應還原哪一個資料庫備份,你可以選擇在 RESTOREDATABASE 陳述式中指定 WITH STOPAT 子句,如此一來,若資料備份相對於指定的目標時間而言過新,便會引發錯誤。 系統總是會還原完整的資料備份,即使它包含目標時間。

基本 Transact-SQL 語法

RESTORE從backup_device記錄<>,包含停止=時間、恢復......

復原點是在由 時間 指定的 datetime值當時或之前所發生的最新交易認可。

若只需還原在特定時間點之前進行的修改,請為每個您要還原的備份指定 WITH STOPAT =time。 這樣可確保您不會超過目標時間。

將資料庫還原至某個時間點

注意

如需這個程序的範例,請參閱本節稍後的 範例 (Transact-SQL)。

  1. 連接至想要在其上還原資料庫的伺服器執行個體。

  2. 請使用 NORECOVERY 選項執行該 RESTOREDATABASE 語句。

    注意

    如果部分還原順序排除任何 FILESTREAM 檔案群組,則不支援時間點還原。 您可以強制讓還原順序繼續。 然而,在您的 RESTORE 陳述式中被省略的 FILESTREAM 檔案群組將永遠無法還原。 若要強制還原時間點,請指定 CONTINUE_AFTER_ERROR 選項以及 STOPAT、STOPATMARK 或 STOPBEFOREMARK 選項,這些選項也必須在後續 RESTORE 的 LOG 語句中指定。 如果您指定 CONTINUE_AFTER_ERROR,則部分還原順序會成功,而 FILESTREAM 檔案群組則會變成無法復原。

  3. 如果有差異資料庫備份,請在不復原資料庫的情況下還原最近一次的差異資料庫備份(RESTOREDATABASEdatabase_name FROM backup_device WITH NORECOVERY)。

  4. 依其建立時的相同順序套用每個交易記錄備份,並指定您打算停止還原記錄的時間 (RESTOREDATABASEdatabase_name FROM <backup_device> WITH STOPAT =time, RECOVERY)。

    注意

    RECOVERY 及 STOPAT 選項。 如果交易記錄備份中不含所要求的時間 (例如指定的時間超出交易記錄的結束時間),則會產生警告訊息,且此資料庫會維持未復原狀態。

範例 (Transact-SQL)

下列範例會將資料庫還原至 12:00 AMApril 15, 2020 時的狀態,並顯示含有多個記錄備份的還原作業。 在備份裝置 AdventureWorksBackups上,要還原的完整資料庫備份是裝置上的第三個備份組 (FILE = 3),第一個記錄備份是第四個備份組 (FILE = 4),而第二個記錄備份是第五個備份組 (FILE = 5)。

重要

AdventureWorks2025 資料庫使用簡單復原模式。 若要允許記錄備份,在執行完整資料庫備份之前,已使用 ALTER DATABASE AdventureWorks SET RECOVERY FULL將資料庫設定為使用完整復原模式。

RESTORE DATABASE AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=3, NORECOVERY;  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
  
RESTORE LOG AdventureWorks  
   FROM AdventureWorksBackups  
   WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM';  
RESTORE DATABASE AdventureWorks WITH RECOVERY;   
GO  
  

相關工作