由于某种原因,我无法恢复我的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快照?
答案 0 :(得分:3)
您可能遇到以下情况之一:
您定义了多个快照,尝试刷新ssms中的快照文件夹或运行
select * from sys.databases where source_database_id IS NOT NULL
查看是否有更多快照。由于快照是在写入时复制的,因此如果您有单个数据库的多个快照,则无法还原。
您没有正确指定快照的逻辑名称。跑
select * from sys.databases where source_database_id IS NOT NULL
检查快照的逻辑名称。然后使用该名称重新运行还原。
您的快照文件不再与快照链接(快照以某种方式损坏)。下面的语句查询快照文件中的页面。运行它,看看你是否有任何错误。
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