重启后 SQL Server 处于“恢复挂起”状态

重启后 SQL Server 处于“恢复挂起”状态

我们有不少自己设计的程序与 SQL Server(SQL Server 2014 Express)通信。它们时不时地会开始到处崩溃;我们四处奔波试图找出问题所在,结果打开 SQL Server Management Studio 却发现我们的数据库没有运行。

更具体地说:我们打开 SSMS,展开“数据库”节点,它显示:
[数据库名称](恢复待定)

打开 SQL Server 配置管理器并重新启动已关闭数据库的服务可以解决问题,并且一切都会重新开始工作......一段时间。

遇到这个问题几次后,我注意到它只会在我们重启服务器后发生 - 虽然不是每次都这样。这意味着有时当服务器启动时,SQL 也会失败。一个有趣的事实是,我们在 SQL 服务器上运行多个数据库,但它们不会同时关闭;其中一个数据库可能会显示“(恢复待处理)”,而另一个则运行正常。

我无法找到该问题的解决方案,甚至找不到原因。有什么想法吗?

编辑:

查看服务器的事件日志后我发现了这一点:

日志名称:应用程序 来源:MSSQL$SQLEXPRESS 事件 ID:17204 任务类别:服务器 级别:错误 关键字:经典 描述:FCB::打开失败:无法打开文件 C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\DATA\DuraDB.mdf 中的文件编号 1。操作系统错误:32(该进程无法访问该文件,因为它正在被另一个进程使用。)。

什么原因会导致文件锁定,特别是在重启后?

答案1

您是否正在运行实时防病毒扫描程序?请确保您已正确设置排除项。Microsoft 已在KB309422。另请注意,某些产品存在已知问题McAfee 和 Sophos

答案2

当数据库未完全关闭时(例如,由于 SQL Server 崩溃,或者服务器断电),SQL Server 通常会在启动时执行恢复;如果不是这种情况,则可能是文件系统问题、磁盘问题或存储控制器的驱动程序问题导致的。您应该检查系统日志以查找意外关机或磁盘故障。

另外,请确保您的 Windows 系统已更新至最新版,并且 SQL Server 已更新至最新服务包(SQL Server 2014 的 SP1)。

答案3

转到 Sql 配置管理器 > Sql Server 服务 > 选择服务类型(Sql Server),右键单击转到属性,选择以检查此帐户身份登录,并确保您的帐户名称是“NT SERVICE\MSSQL$SQLEXPRESS”,然后按开始。

答案4

内部来说,SQL Server 正在恢复数据库中待处理的操作或事务。我们应该等待几分钟,然后 SQL Server 将自动恢复数据库。

发生这种情况是因为开发人员在 SQL Server 执行大型事务操作时重新启动了服务。也可能是其他原因,例如事务日志文件非常大。

我已经准备好了一篇关于这个问题的完整文章,您可以在此处访问这篇文章。

相关内容