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

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

本主題說明如何使用 SQL Server 2014 或 SQL Server Management Studio 將資料庫還原到 Transact-SQL中的某個時間點。 

本主題僅與使用完整恢復模式或大容量日誌恢復模式的 SQL Server 資料庫有關。


 重要

在大容量日誌恢復模式下,如果日誌備份包含大容量更改,則不能使用時點恢復方式恢復到該備份內的某個點。 必須將資料庫恢復到事務日誌備份的結尾。


一、使用 SQL Server Management Studio

將資料庫還原到時間點

1.在“物件資源管理器”中,連線到相應的 SQL Server 資料庫引擎例項,然後展開伺服器樹。

2.展開 “資料庫” 。 根據具體的資料庫,選擇一個使用者資料庫,或展開“系統資料庫”並選擇一個系統資料庫。

3.右鍵單擊資料庫,指向“任務” ,再指向“還原” ,然後單擊“資料庫” 。

4.在 “常規” 頁上,使用 “源” 部分指定要還原的備份集的源和位置。 選擇以下選項之一:

    .“資料庫”

    從下拉選單中選擇要還原的資料庫。 此列表僅包含已根據 msdb 備份歷史記錄進行備份的資料庫。

    .“裝置”

    單擊“瀏覽”按鈕 ( ... ) 以開啟“選擇備份裝置” 對話方塊。 在 “備份介質型別” 框中,從列出的裝置型別中選擇一種。 若要為 “備份介質” 框選擇一個或多個裝置,請單擊 “新增” 。

    將所需裝置新增到 “備份介質” 列表框後,單擊 “確定” 返回到 “常規” 頁。

    在“源:裝置:資料庫”列表框中,選擇應還原的資料庫名稱**。

    注意 :此列表僅在選擇了 “裝置” 時才可用。 只有在所選裝置上具有備份的資料庫才可用。

5.在 “目標” 部分中, “資料庫” 框自動填充要還原的資料庫的名稱。 若要更改資料庫名稱,請在 “資料庫” 框中輸入新名稱。

6.單擊 “時間線” 以訪問 “備份時間線” 對話方塊。

7.在 “還原到” 部分中,單擊 “具體日期和時間” 。

8.使用 “日期” 和 “時間” 框或滑動條來指定應停止還原的具體日期和時間。 單擊 “確定” 中建立非聚集索引。

9.指定具體時點後,資料庫恢復顧問確保只有需要還原到該時點的那些備份在 “要還原的備份集” 網格的 “還原” 列中處於選中狀態。 這些選定的備份構成了為您的時點還原建議的還原計劃。 應當僅使用選定的備份進行時點還原操作。

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

Before you begin

始終從日誌備份還原到指定時間。 在還原序列的每個 RESTORE LOG 語句中,必須在相同的 STOPAT 子句中指定目標時間或事務。 作為時點還原的先決條件,必須首先還原其端點早於目標還原時間的完整資料庫備份。 只要您之後還原每個隨後日誌備份(到達和包括包含目標時間點的日誌備份),該完整資料庫備份就可以早於最近的完整資料庫備份。

如果資料備份太臨近指定的目標時間,而需幫助識別要還原哪個資料庫備份,則可以在 RESTORE DATABASE 語句中可選地指定 WITH STOPAT 子句以引發錯誤。 始終會還原完整資料備份,即使該資料備份包含目標時間也同樣如此。


基本 Transact-SQL 語法

RESTORE LOG database_name FROM < 備份裝置 > WITH STOPAT = time , 恢復...

恢復點是最新或之前發生的事務提交datetime由指定的值時間。

若要只還原在特定時間點之前所做的修改,請為還原的每個備份指定 WITH STOPAT = time 。 這樣確保了不會超出目標時間。


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 < 備份裝置 > WITH STOPAT = time , 恢復)。

 備註

  RECOVERY 和 STOPAT 選項。 如果事務日誌備份不包含要求的時間(例如,如果指定的時間超出了事務日誌所包含的時間範圍),則會生成警告,並且不會恢復資料庫。


示例 (Transact-SQL)

下面的示例將資料庫還原到它在 12:00 AM 的 April 15, 2020 的狀態,並顯示涉及多個日誌備份的還原操作。 在備份裝置上,要還原的完整資料庫備份 AdventureWorksBackups是裝置上的第三個備份集 (FILE = 3),第一個日誌備份是第四個備份集 (FILE = 4),第二個日誌備份是第五個備份集 (FILE = 5)。


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





更多內容請關注微信公眾號:DBA每日記


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

相關文章