为什么我会看到“恢复中”消息,我该如何预防?

时间:2010-06-03 22:34:21

标签: sql-server tsql msbuild sql-server-2008-express

我正在处理的项目为您使用的每个SVN分支创建SQL Server数据库的本地副本。我们在本地计算机上运行带有高级服务的SQL Server 2008 Express来托管它。

当我们创建一个新分支时,构建脚本将创建一个具有该分支ID的新数据库,创建模式对象,并复制来自生产影子服务器的一组数据。

创建数据库后,它或本地计算机上的其他数据库通常会进入“恢复”模式几分钟。经过几次刷新后,它会出现并且很高兴,但有时会回到“恢复”模式。

数据库以简单恢复模式创建。未指定文件名,因此它使用文件的默认路径。

加载数据后数据库的大小约为400兆。它在SQL Server 2005兼容模式下运行。

创建数据库的命令是:

  

sqlcmd -S $(DBServer)-Q“IF NOT EXISTS(SELECT [name] FROM sysdatabases WHERE [name] ='$(DBName)')BEGIN CREATE DATABASE [$(DBName)]; print'Created $( DBName)'; END“

...其中$(DBName)和$(DBServer)是MSBuild参数。

今天早上我收到了一份干净的日志文件。当我打开电脑时,它会启动所有五个数据库。但是,其中两个显示正在向前和向后滚动的交易。它只是不断尝试启动所有五个数据库。

2010-06-10 08:24:59.74 spid52      Starting up database 'ASPState'.
2010-06-10 08:24:59.82 spid52      Starting up database 'CommunityLibrary'.
2010-06-10 08:25:03.97 spid52      Starting up database 'DLG-R8441'.
2010-06-10 08:25:05.07 spid52      2 transactions rolled forward in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:05.14 spid52      0 transactions rolled back in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:05.14 spid52      Recovery is writing a checkpoint in database 'DLG-R8441' (6). This is an informational message only. No user action is required.
2010-06-10 08:25:11.23 spid52      Starting up database 'DLG-R8979'.
2010-06-10 08:25:12.31 spid36s     Starting up database 'DLG-R8441'.
2010-06-10 08:25:13.17 spid52      2 transactions rolled forward in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:13.22 spid52      0 transactions rolled back in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:13.22 spid52      Recovery is writing a checkpoint in database 'DLG-R8979' (9). This is an informational message only. No user action is required.
2010-06-10 08:25:18.43 spid52      Starting up database 'Rls QA'.
2010-06-10 08:25:19.13 spid46s     Starting up database 'DLG-R8979'.
2010-06-10 08:25:23.29 spid36s     Starting up database 'DLG-R8441'.
2010-06-10 08:25:27.91 spid52      Starting up database 'ASPState'.
2010-06-10 08:25:29.80 spid41s     Starting up database 'DLG-R8979'.
2010-06-10 08:25:31.22 spid52      Starting up database 'Rls QA'.

在这种情况下,它一直试图连续启动数据库,直到我在08:48:19.72,23分钟后关闭SQL Server。同时,我实际上可以在很多时候使用数据库。

日志文件中最后一个有趣的行是......

2010-06-10 08:35:01.52 spid34s     Recovery completed for database DLG-R8441 (database ID 6) in 1 second(s) (analysis 603 ms, redo 0 ms, undo 219 ms.) This is an informational message only. No user action is required.

1 个答案:

答案 0 :(得分:1)

问题似乎是“自动关闭”选项。在我关闭之后,问题就消失了。在脚本中创建数据库时,默认值为on,但如果通过管理工作室创建数据库,则默认值为off。

自动关闭功能会在最后一个用户断开连接后释放数据库的所有资源。由于这是一台开发机器,通常只有一个用户,因此它会在每次请求后释放所有资源。此外,似乎Management Studio偶尔连接到服务器上的每个数据库,导致每个数据库每分钟启动几次。

干杯