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

適用於:SQL Server

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

重要

在大量記錄復原模式下,如果記錄備份包含大量記錄的變更,則時間點復原不可能復原至該備份內的時間點。 資料庫必須復原至交易記錄備份的結尾。

開始之前

建議

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

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

安全性

權限

如果還原的資料庫不存在,使用者必須有 CREATE DATABASE 權限,才能執行 RESTORE。 如果資料庫存在,RESTORE 權限預設為 系統管理員 (sysadmin)資料庫建立者 (dbcreator) 固定伺服器角色的成員以及資料庫的擁有者 (dbo) (對 FROM DATABASE_SNAPSHOT 選項而言,資料庫一律存在)。

RESTORE 權限提供給伺服器隨時可以取得其成員資格資訊的角色。 由於資料庫必須是可存取且未損毀,才能夠檢查固定資料庫角色成員資格,但執行 RESTORE 時未必如此;因此, db_owner 固定資料庫角色的成員並沒有 RESTORE 權限。

使用 SQL Server Management Studio

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

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

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

  3. 以滑鼠右鍵按一下資料庫,依序指向 [工作] 及 [還原] ,然後按一下 [資料庫] 。

  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 子句中指定目標時間或交易。 您必須先還原其端點早於目標還原時間的完整資料庫備份,當做時間點還原的必要條件。 該完整資料庫備份可以晚於最近的完整資料庫備份,只要您之後還原每個後續的記錄備份即可,最多並包括含有目標時間點的記錄備份。

若要協助您識別要還原哪個資料庫備份,可以選擇性地在 RESTORE DATABASE 陳述式中指定 WITH STOPAT 子句,以便在資料庫備份太接近指定的目標時間時引發錯誤。 此時,系統一定會還原完整的資料備份,即使它包含目標時間也一樣。

基本 Transact-SQL 語法

RESTORE LOG database_name FROM <backup_device> WITH STOPAT =time, RECOVERY...

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

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

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

注意

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

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

  2. 使用 NORECOVERY 選項執行 RESTORE DATABASE 陳述式。

    注意

    如果部分還原順序排除任何 FILESTREAM 檔案群組,則不支援時間點還原。 您可以強制還原順序,以繼續進行。 但是,絕對無法還原 RESTORE 陳述式中省略的 FILESTREAM 檔案群組。 若要強制時間點還原,請指定 CONTINUE_AFTER_ERROR 選項,連同 STOPAT、STOPATMARK 或 STOPBEFOREMARK 選項,而且您也必須在後續的 RESTORE LOG 陳述式中指定這些項目。 如果您指定 CONTINUE_AFTER_ERROR,則部分還原順序會成功,而 FILESTREAM 檔案群組則會變成無法復原。

  3. 還原上一次的差異資料庫備份 (如有),但不復原資料庫 (RESTORE DATABASE database_name FROM backup_device WITH NORECOVERY)。

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

    注意

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

範例 (Transact-SQL)

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

重要

AdventureWorks2022 資料庫使用簡單復原模式。 若要允許記錄備份,在執行完整資料庫備份之前,已使用 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  
  

相關工作

另請參閱

backupset (Transact-SQL)
RESTORE (Transact-SQL)
RESTORE HEADERONLY (Transact-SQL)