2017-09-05 78 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