2017-09-05 70 views
1

由於某些原因,我無法還原我的SQL Server快照。無法還原SQL Server快照

我有一個數據庫DB01的快照DB01_SS

當試圖恢復與下面的查詢快照:我得到這個錯誤信息

USE master 
GO 

ALTER DATABASE DB01 SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

RESTORE DATABASE DB01 FROM DATABASE_SNAPSHOT = 'DB01_SS'; 
GO 

ALTER DATABASE DB01 SET MULTI_USER 
GO 

Msg 3137, Level 16, State 1, Line 5
Database cannot be reverted. Either the primary or the snapshot names are improperly specified, all other snapshots have not been dropped, or there are missing files.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.

我已經檢查,該名指定正確。服務器上沒有其他快照可用。我遇到的唯一奇怪的事情是當我登錄SQL Server查找快照文件時。並且在SSMS gui中有一個不同的名字。它被命名爲DB_SS_2017.SS。當試圖用這個名字來恢復,我得到以下錯誤:

Msg 911, Level 16, State 4, Line 5
Database DB_SS_2017.SS does not exist. Make sure that the name is entered correctly.
Msg 3013, Level 16, State 1, Line 5
RESTORE DATABASE is terminating abnormally.

最後但並非最不重要的,試圖在SSMS再次檢查快照的屬性,當。屬性按鈕變灰了!我怎樣才能恢復SQL Server快照?

+0

剛剛從您的文章,以恢復沒有真正的體驗:你有沒有試過'FROM DATABASE_SNAPSHOT =「DB01_SS.SS'',因爲古怪命名的文件有這樣的結局...... – RealCheeseLord

+0

是的,我都試過了。導致msg 911錯誤,SS不存在。 – MrPowerUser

回答

0

根據您的信息,這應該工作(因爲你的數據庫稱爲DB01,但快照被稱爲DB_SS_2017.SS):

USE master 
GO 

ALTER DATABASE DB01 SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO 

-- restore database "DB01" from the snapshot called "DB_SS_2017.SS" 
RESTORE DATABASE DB01 FROM DATABASE_SNAPSHOT = 'DB_SS_2017.SS'; 
GO 

ALTER DATABASE DB01 SET MULTI_USER 
GO 
+0

不工作。我得到'消息911,級別16,狀態4,行8 數據庫'DB_SS_2017.SS'不存在。確保名稱輸入正確.'消息。 – MrPowerUser

+0

@doenoe:在這種情況下,您的快照很可能*不是*從您的'DB01'數據庫 - 但從其他數據庫錯誤消息提到.... –

1

你是可在下列情況之一:

  1. 您定義了多個快照,請嘗試刷新ssms中的快照文件夾或運行 select * from sys.databases where source_database_id IS NOT NULL以查看是否有更多快照。因爲快照是「寫入時複製」,所以如果您有單個數據庫的多個快照,則無法恢復。

  2. 您沒有正確指定快照的邏輯名稱。運行 select * from sys.databases where source_database_id IS NOT NULL檢查快照的邏輯名稱。然後使用該名稱重新運行恢復。

  3. 您的快照文件不再與快照鏈接(快照已損壞)。以下語句查詢快照文件中的頁面。運行它並查看是否有任何錯誤。 select db_name(database_id) [<database name>], database_id, count(*) from sys.dm_os_buffer_descriptors where database_id= (select top 1 database_id from sys.databases where source_database_id IS NOT NULL) group by database_id