0

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

当我们创建一个新分支时,构建脚本将使用该分支的 ID 创建一个新数据库,创建模式对象,并从生产影子服务器复制选择的数据。

创建数据库后,它或本地计算机上的其他数据库通常会进入“In Recovery”模式几分钟。几次刷新后,它会出现并且很开心,但偶尔会回到“恢复中”模式。

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

加载数据后的数据库大小约为 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)' ; 结尾”

...其中 $(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'.

在这种情况下,它一直尝试连续启动数据库,直到我在 23 分钟后的 08:48:19.72 关闭 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.
4

1 回答 1

1

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

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

干杯

于 2010-06-10T17:42:58.603 回答