我们有不less与我们的SQL Server(SQL Server 2014 Express)沟通的devise程序。 他们时不时就开始吹起来。 我们试图弄清楚什么是错的,只是打开SQL Server Management Studio,发现我们的数据库没有运行。
更具体地说:我们打开SSMS,展开“数据库”节点,它说:
[数据库名称](恢复等待)
打开SQL Serverconfigurationpipe理器并重新启动服务的closures数据库修复了问题,一切都开始工作了一段时间。
在经过这个问题几次后,我注意到它只发生在我们重新启动服务器之后 – 虽然不是每一次。 这意味着有时候服务器启动时,SQL不能做同样的事情。 一个有趣的事实是,我们有SQL服务器上运行的多个数据库,他们不会一起下去; 其中一个数据库可能会说“(恢复等待)”,而另一个可以正常工作。
我一直无法find解决这个问题,甚至是一个原因。 有任何想法吗?
编辑:
通过服务器的事件日志后,我发现这一点:
日志名称:应用程序源:MSSQL $ SQLEXPRESS事件ID:17204任务类别:服务器级别:错误关键字:经典说明:FCB ::打开失败:无法打开文件C:\ ProgramFiles \ MicrosoftSQLServer \ MSSQL12.SQLEXPRESS \ MSSQL \ DATA \ DuraDB.mdf文件编号为1.操作系统错误:32(进程无法访问该文件,因为它正在被另一个进程使用)。
什么会导致文件locking,特别是在重新启动后?
恢复通常由SQL Server在启动时执行,当数据库尚未完全closures时,由于SQL服务器崩溃或服务器遇到停电; 如果情况并非如此,那么这可能是由文件系统问题,磁盘问题或存储控制器的驱动程序问题造成的。 您应该检查系统日志是否意外closures或磁盘故障。
此外,请确保您的Windows系统与最新的更新保持同步,并将SQL Server更新到最新的Service Pack(SP1 for SQL Server 2014)。
你有一个访问防病毒扫描仪运行? 确保你已经正确设置了排除项目。 Microsoft已经在KB309422中logging了这一点 。 另请注意, McAfee和Sophos在某些产品上存在已知问题。
转到Sqlconfigurationpipe理器> Sql服务器服务>select服务types(Sql Server)右键单击去属性selectlogin为检查此帐户,并确保您的帐户名称是“NT SERVICE \ MSSQL $ SQLEXPRESS”,然后按开始。
The Express versions automatically shutdown after a period of inactivity. There is a special sp_configure value you can set to increase the timeout. Express Editions only have the 'user instance timeout' config item available. The default is 60 minutes. exec sp_configure 'show advanced options', 1 reconfigure go exec sp_configure 'user instance timeout' -- show current value go /* exec sp_configure 'user instance timeout', 65535 -- set to max timeout reconfigure go */
或者,您的应用程序可以每10分钟运行一次简单的“心跳”查询以保持SQL Server Express的正常运行。 SQL Server Express不允许使用SQL代理,因此计划的作业将不起作用。 您还可以使用Windows任务计划程序计划sqlcmd.exe作业。
内部SQL Server正在恢复数据库挂起的操作或事务。 我们应该等待几分钟,并自动SQL Server将恢复数据库。
发生这种情况是因为开发人员在SQL Server执行大事务操作时重新启动服务。 还有另一个原因,如事务日志文件是非常大的。
我已经准备了关于这个问题的完整文章,你可以在这里访问这篇文章。