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

Kei*_*ein 3 windows-server-2008-r2 sql-server sql-server-2014

我们有很多自己设计的程序可以与我们的 SQL Server (SQL Server 2014 Express) 通信。它们时不时地开始到处爆炸;我们跑来跑去试图找出问题所在,结果打开 SQL Server Management Studio 并发现我们的数据库没有运行。

更具体地说:我们打开 SSMS,展开“数据库”节点并显示:
[DATABASE NAME] (Recovery Pending)

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

在遇到此问题几次后,我注意到它仅在我们重新启动服务器后才会发生 - 尽管不是每次都如此。这意味着有时当服务器启动时,SQL 无法执行相同的操作。一个有趣的事实是,我们在 SQL 服务器上运行了多个数据库,并且它们不会一起出现故障;其中一个数据库可能会显示“(Recovery Pending)”,而另一个则可以正常工作。

我一直无法找到解决这个问题的方法——甚至找不到原因。有任何想法吗?

编辑:

在浏览服务器的事件日志后,我发现了这一点:

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

什么会导致文件锁定,尤其是在重新启动后?

Bac*_*its 5

您是否正在运行按访问的防病毒扫描程序?确保您已正确设置排除项。Microsoft 在KB309422 中对此进行了记录。另请注意,McAfee 和 Sophos 的某些产品存在已知问题。

  • @KeithStein Windows Defender 既有按需扫描程序(历史记录显示的内容),也有访问扫描程序(又名“实时保护”)。当程序试图打开任何数据文件时,访问时扫描器将自动锁定并扫描它。由于 SQL Server 数据和日志文件如此之大,扫描程序花费的时间超过 SQL Server 的超时时间的情况并不少见。这就是排除项很重要的原因。 (2认同)