案例:SQL Server 数据库卡在“正在恢复”状态

 

我备份了一个数据库:

BACKUP DATABASE MyDatabase
TO DISK='MyDatabase.bak'
WITH INIT --overwrite existing

然后尝试恢复它:

RESTORE DATABASE MyDatabase
FROM DISK='MyDatabase.bak'
WITH REPLACE --force over specified database

现在数据库停留在恢复状态。

您是否也发现SQL数据库卡在恢复中的问题,这个烦人的“正在恢复”标志,您的数据库就无法再操作它了,有时还会收到“无法获得独占访问权,因为数据库正在使用中“ 警报。

恢复正在使用的失败数据库

在这里,我将列出可能导致SQL Server数据库恢复状态的原因,并为您提供5个行之有效的方法来解决此问题。

SQL数据库卡在恢复的原因

在排除故障之前,一些用户可能会有疑问“恢复数据库通常需要多长时间”?

这个问题并不确定,因为它涉及许多因素,例如数据库的大小、计算机的硬件、是否从本地磁盘、外部设备或网络位置恢复。 

不管怎样,当你发现SQL数据库卡在恢复状态而无法访问时,你可以考虑一些常见的原因:

“例如”

修复SQL Server数据库卡在恢复中的5个解决方案

在这里,我总结了5种方法来修复SQL Server2014、2016、2019 等数据库卡在恢复中的问题。可以一一尝试。.

*在尝试以下方法之前,请检查卡住的数据库是否有您忘记关闭的“查询窗口”,如果有,请先将其关闭。这可能会直接解决问题。

解决方案1. 将WITH RECOVERY 添加到Restore 语句

通常SQL Server数据库恢复默认使用“With Recovery” ,当你想同时恢复更多数据库或日志时使用“No Recovery”选项 - 它告诉SQL Server等待更多操作。因此,您需要使用“With Recovery”来完成还原:

1. 启动SSMS并连接到您的实例,单击上方栏中的“新建查询”。然后在空白处输入以下语句:

RESTORE DATABASE“数据库名称”WITH RECOVERY

“注意:”如果你想在恢复时覆盖这个数据库而不先备份事务日志的尾部,你可以在RECOVERY之前添加REPLACE。但要小心,它可能会导致数据丢失。您可以在拥有完整备份时执行此操作。

2. 然后单击“执行”。当您收到成功结果时,“刷新”数据库列表,您可以看到数据库已停止恢复。

使用 Recovery 恢复数据库

解决方案 2. 在选项中选择 RESTORE WITH RECOVERY

1. 启动 SSMS 并连接到您的实例,右键单击处于还原状态的SQL Server数据库,选择“任务”>“还原”>数据库...

恢复数据库

2. 转到右侧选项卡中的“选项”页面,在“恢复状态”部分中选择”“使用恢复进行还原”

3. 然后单击“确定”。恢复成功后,右击"数据库"刷新列表,可以看到数据库已经脱离恢复状态

恢复恢复

解决方案 3. 取消选中 SSMS 还原中的事务日志

1. 启动SSMS并连接到您的实例,右键单击卡在还原中的数据库,选择“任务”>“还原”>“事务日志…”

交易记录

2. 在提示窗口的“通用”页面中,取消选中"事务日志"部分中的 all log backups,然后单击“确定”

3. “刷新”你的数据库列表,你可以看到你的数据库恢复正常了。

解决方案 4. 关闭与目标数据库的现有连接

1. 启动SSMS并连接到您的实例,右键单击卡在还原中的数据库,选择“任务”>“还原”>数据库...

恢复数据库

2. 转到“选项页面,勾选”“关闭目标数据库的现有连接”选项。您将在下面看到一条通知,告诉您这可能会使目标数据库处于单用户模式。

关闭现有连接

3. 然后点击“确定”,database-in-use错误就不会再发生了。

解决方案 5. 将SQL Server切换到单用户模式以关闭连接

1. 启动SSMS并连接到您的实例,单击上方栏上的“新建查询,然后输入以下语句:”

USE master;
GO
ALTER DATABASE“数据库名”
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
ALTER DATABASE“数据库名”
SET MULTI_USER;
GO

单用户模式

2. 然后单击“执行”,您将在恢复之前关闭现有连接。

“注意:”如果你有完整备份,你也可以删除数据库,然后直接从 bak 文件恢复数据库

备份和还原SQL Server数据库的一种更安全的方法

我发现很多时候,SQL数据库卡在恢复中是因为用户在脚本中错误地使用了No Recovery。除了这个问题,不正确地使用脚本还可能导致许多其他错误,甚至数据丢失。

因此,如果你对T-SQL不熟悉,或者你想备份和恢复SQL数据库错误率较低,推荐你一款专业的企业端点备份软件傲梅企业备份网络版.

✤优点:
它具有易于使用的 GUI,使您无需任何脚本即可操作。
它允许一名专家为 LAN 内的所有 Windows PC 和服务器创建和管理备份,这可以减少手动错误,同时提高效率。
您可以简单地一次备份或恢复多个数据库甚至实例。
在 Logs 页面可以查看这些操作的详细信息,在监控页面还可以查看它们的网络、CPU、内存、磁盘运行状况。
除了 SQL数据库,它还支持文件、分区、磁盘和操作系统备份。

“要正确使用傲梅企业备份网络版,请按照以下步骤操作:”

☛ 启动 傲梅企业备份网络版,然后通过单击“计算机”> "安装客户端"远程或手动安装客户端 。

安装客户端程序

☛ 对于手动安装了客户端程序的计算机,您仍然需要对其“进行请求控制才能进行进一步的操作”。

单击“计算机”> “不受控制的计算机”以找到正确的 IP,然后单击上方栏中的“请求控制” 。他们的计算机上会显示一个提示窗口,一旦获得所有权限,您就可以随时开始。

请求控制

如何备份和恢复 SQL数据库

点击上方栏的"任务",点击"新任务",选择"SQL Server备份",新建一个备份任务。按照提示窗口中的 3 个步骤进行操作。

SQL 服务器备份

“第一步”,点击“添加计算机,”在所有被控制的有SQL数据库的计算机中找到正确的IP,点击“确定”

添加计算机

“第二步”,点击“添加”,您可以选择要备份的多个实例和数据库。

选择数据库

“第三步”,选择一个位置作为目标路径,可以在提示窗口中点击“添加存储”,添加一个网络共享或NAS作为存储端。然后单击“开始备份”以开始任务。

选择路径

创建后,任务将单独显示在“任务”页面上。

开始备份

如何安全地恢复 SQL数据库

“第一步”,点击SQL Server备份任务右上角的“高级”,选择“恢复”

恢复数据库

“第二步”,在提示窗口中选择要恢复的计算机和数据库。

选择数据库

您还可以在右上角选择一个特定的备份(完整/差异)。单击“下一步”

选择特定备份

第3步,选择“恢复到原始位置”“恢复到新位置”

恢复到原始位置

如果你选择后者,你可以将备份还原到同一台或另一台服务器上的另一个实例。然后点击 "开始还原"

恢复到新位置

概括

在本文中,我介绍了5种行之有效的方法来解决SQL数据库卡在恢复的问题。

但是,如果您想要更简单、更安全的方式来无误地备份和恢复数据库,我建议您使用傲梅企业备份网络版。

它具有简单直观的界面,供您集中操作和管理局域网内多台Windows PC、工作站和服务器的备份和恢复。您还可以检查日志以查看这些操作的详细信息。

此外,它还集中了文件备份、系统备份和磁盘备份、分区备份、基本同步、实时同步和镜像同步等功能,可以为您节省大量时间,从而提高效率。