會發生這樣的情境有很多,例如:解除「資料庫鏡像(Database Mirroring)」後的鏡像資料庫、「記錄傳送(Log Shopping)」、使用 Backup Log ... WITH NORECOVERY、執行 Restore Database ... WITH NoReocvery 等等。
請參考下圖所示:
若是資料庫的狀態呈現:「正在還原...(RESTORING)」,這是無法讓使用者存取資料庫。
所以若是你希望切換狀態,讓使用者可以存取此資料庫時,可以利用 RESTORE DATABASE ... WITH RECOVERY 的方式來達成。
有關於 RECOVERY 參數的說明:
指示還原作業回復任何未認可的交易。在復原程序之後,資料庫便已備妥,可供使用。
如果 NORECOVERY、RECOVERY 和 STANDBY 三者都沒有指定,預設值就是 RECOVERY。
如果規劃了後續的 RESTORE 作業 (RESTORE LOG,或差異備份的 RESTORE DATABASE),就應該指定 NORECOVERY 或 STANDBY。
當從舊版 SQL Server 還原備份組時,可能需要升級資料庫。當指定 WITH RECOVERY 時,會自動執行這項升級。
請參考以下的範例碼:
USE master GO -- ALTER DATABASE [pubs] SET RECOVERY FULL WITH ROLLBACK IMMEDIATE GO -- Full Backup BACKUP DATABASE pubs TO DISK='C:\myAdmin\Device\pubs.bak' GO -- Log Backup,加入:WITH NORECOVERY,資料庫狀態:RESTORING , 正在還原... BACKUP LOG pubs TO DISK='C:\myAdmin\Device\pubs_log.bak' WITH NORECOVERY GO -- 檢視資料庫的狀態 SELECT name N'資料庫的名稱',state_desc N'資料庫狀態' FROM sys.databases ORDER BY 2 DESC -- 切換資料庫的狀態為:ONLINE。 RESTORE DATABASE pubs WITH RECOVERY GO
參考資料:
RESTORE 引數 (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms178615.aspx
RESTORE (Transact-SQL)
http://msdn.microsoft.com/zh-tw/library/ms186858.aspx
沒有留言:
張貼留言