【问题标题】:Cannot restore SQL Server snapshot无法还原 SQL Server 快照
【发布时间】:2020-02-19 17:24:50
【问题描述】:

由于某种原因,我无法恢复我的 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

我收到此错误消息:

消息 3137,第 16 级,状态 1,第 5 行
无法还原数据库。主名称或快照名称指定不正确,所有其他快照未删除,或者缺少文件。
消息 3013,第 16 级,状态 1,第 5 行
RESTORE DATABASE 异常终止。

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

消息 911,第 16 级,状态 4,第 5 行
数据库 DB_SS_2017.SS 不存在。确保输入的名称正确。
消息 3013,第 16 级,状态 1,第 5 行
RESTORE DATABASE 异常终止。

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

【问题讨论】:

  • 仅从您的帖子来看,没有真正的恢复经验:您是否尝试过FROM DATABASE_SNAPSHOT = 'DB01_SS.SS',因为这个名字奇怪的文件有这样的结尾......
  • 是的,我试过了。导致msg 911错误,SS不存在。

标签: sql-server


【解决方案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

【讨论】:

  • 您只能拥有 1 个快照。不知何故,如果您创建第二个快照,它将无法工作。您必须删除第一个快照,然后创建新快照。
  • @jsgoupil,您可以拥有多个快照(用于从中读取数据),但如果您拥有多个快照,则无法恢复。
【解决方案2】:

根据您的信息,这应该工作(因为您的数据库称为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

【讨论】:

  • 不工作。我收到了Msg 911, Level 16, State 4, Line 8 Database 'DB_SS_2017.SS' does not exist. Make sure that the name is entered correctly. 消息。
  • @doenoe:在这种情况下,您的快照很可能不是来自您的 DB01 数据库 - 但来自另一个数据库,错误消息提到 ....跨度>
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多