搜尋本站文章

2008-12-09

SQL Server 資料庫的狀態:正在還原...,RESTORING...



會發生這樣的情境有很多,例如:解除「資料庫鏡像(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