无法还原SQL Server快照

时间:2017-09-05 11:13:46

标签: 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
  数据库无法还原。主服务器或快照名称未正确指定,所有其他快照未被删除,或者文件丢失。
  Msg 3013,Level 16,State 1,Line 5
  RESTORE DATABASE异常终止。

我已经检查过,名称已正确指定。服务器上没有其他可用的快照。我遇到的唯一奇怪的事情是当我登录SQL Server查找快照文件时。它在SSMS gui中有一个不同的名字。它被命名为DB_SS_2017.SS。尝试使用该名称进行恢复时,出现以下错误:

  

Msg 911,Level 16,State 4,Line 5
  数据库DB_SS_2017.SS不存在。确保正确输入名称   Msg 3013,Level 16,State 1,Line 5
  RESTORE DATABASE异常终止。

最后但并非最不重要的是,在尝试检查快照的属性时,再次在SSMS中。属性按钮显示为灰色!如何还原SQL Server快照?

3 个答案:

答案 0 :(得分:3)

您可能遇到以下情况之一:

  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

答案 1 :(得分: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

答案 2 :(得分:0)

需要更“硬”的连接:):):)

USE master
GO
ALTER DATABASE DB01 SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO
ALTER DATABASE DB01 SET OFFLINE
GO
ALTER DATABASE DB01 SET ONLINE
GO
RESTORE DATABASE DB01 FROM DATABASE_SNAPSHOT = 'DB01_SS';
GO
ALTER DATABASE DB01 SET MULTI_USER
GO