为什么SQL Server会说"启动数据库"在事件日志中,每秒两次?

时间:2012-08-22 10:13:41

标签: sql-server sql-server-2012

我有一个SQL Server [2012 Express with Advanced Services]数据库,其中没有太多内容。我正在使用EF Code First开发一个应用程序,由于我的模型仍然处于不稳定状态,因此数据库每天都会被丢弃并重新创建几次。

今天早上,我第一次运行时,我的应用程序无法连接到数据库。经过调查,似乎数据库处于“恢复待定”模式。

查看事件日志,我可以看到SQL Server已记录:

  

启动数据库(我的数据库)

......整晚大约每秒两次。 (事件日志填满了,所以昨天晚上我看不到。)

这些“信息”日志条目在今天早上6点左右停止,紧接着是“错误”日志条目,说:

  

资源池'internal'中没有足够的内存来运行此查询

我的数据库发生了什么事?

请注意:这只是可能,我留在“调试”模式运行一夜之间我的web应用程序 - 尽管没有任何人“驾驶”这我无法想象会有多少数据库流量,如果任何

值得一提的是,我在数据库中有一个全文目录(尽管如我所说,目前数据库中几乎没有任何实际内容。)

我不得不说,这令人担忧 - 如果发生在我的生产数据库中,我会感到高兴!

3 个答案:

答案 0 :(得分:24)

使用AUTO_CLOSE ON,数据库将在没有连接时立即关闭,并在每次建立连接时重新打开(运行恢复,尽管是快节奏的数据库)。所以你看到了这条消息,因为你的应用程序每隔2秒就会连接到数据库。你可能总是有这种行为,从未注意过。现在您的数据库崩溃了,您调查了日志并发现了这个问题。虽然很好,现在您知道并且可能会修复它,但这并不能解决您真正的问题,即数据库的可用性。

所以现在你有一个不会恢复的数据库,你做了什么?您从上次备份恢复并应用disaster recovery plan。真的,这就是它的全部。没有其他选择。

如果您想了解发生崩溃的原因(可能是大约1个原因中的任何一个......)那么您需要联系CSS(产品支持)。他们有办法指导您进行调查。

答案 1 :(得分:20)

如果要在事件日志中关闭此消息。 只需转到SQL Server Management Studio,

  1. 右键单击数据库
  2. 选择选项(左侧面板)
  3. 查看"自动"部分,并更改"自动关闭"到"错误"
  4. 点击“确定”
  5. 全部:)

答案 2 :(得分:2)

我有一个类似的问题,sql express数据库卡在恢复中。在调查日志之后,发现数据库每隔几分钟启动一次。运行脚本

select name, state_desc, is_auto_close_on from sys.databases where name = 'mydb'

显示自动关闭已设置为开启。

因此,似乎数据库始终处于恢复状态,但由于没有客户端连接,因此在再次脱机之前实际上会暂时联机一段时间。

我用以下脚本解决了这个问题。

Declare @state varchar(20)
while 1=1
   begin
     Select @state = state_desc from sys.databases where name='mydb';
     If @state = 'ONLINE'
        Begin
           Alter database MyDb
                 Set AUTO_CLOSE_OFF;
           Print 'Online'
           break;
        End
        waitfor delay '00:00:02'
   end