本主題說明如何使用 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)。
1 RESTORE DATABASE AdventureWorks 2 FROM AdventureWorksBackups 3 WITH FILE=3, NORECOVERY; 4 5 RESTORE LOG AdventureWorks 6 FROM AdventureWorksBackups 7 WITH FILE=4, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM'; 8 9 RESTORE LOG AdventureWorks 10 FROM AdventureWorksBackups 11 WITH FILE=5, NORECOVERY, STOPAT = 'Apr 15, 2020 12:00 AM'; 12 RESTORE DATABASE AdventureWorks WITH RECOVERY; 13 GO