2

我正在将 Tarantino 数据库管理引入一个具有全新数据库模式的项目中。唯一的变化(位于 中0001_InitialSchema.sql)是 ASP.NET Membership 中使用的表的创建。我使用生成表aspnet_regsql.exe,然后将它们编写为 CREATE TO 脚本,然后将它们组合到我的单个 Tarantino sql 文件中。

在运行我的 NAnt 构建脚本时,该drop database命令在尝试从它试图删除的数据库中删除所有连接时阻塞。

删除数据库 DBName 的连接

[调用] 执行 Transact-SQL 语句或批处理时发生异常。

[调用] 只有用户进程可以被杀死。

这会导致以下create database步骤失败,因为数据库仍然存在,并且不会应用新的更新:

管理Sql数据库:

使用 path\to\source\src\Database 中的脚本在 localhost 上创建 DBName

构建失败 - 1 个非致命错误,0 个警告

内部错误

Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行 Transact-SQL 语句或批处理时发生异常。---> System.Data.SqlClient.SqlException:数据库“DBName”已经存在。选择不同的数据库名称。

脚本运行后,某些系统进程始终保持连接到数据库。我试过在不同的机器上运行它,并且存在同样的问题。我也尝试过运行一个不同的 Tarantino 项目,并且每次运行都完美无缺。我什至创建了一个虚拟更新文件(其中添加了表 Foo、Bar 等),它运行时也没有问题。问题似乎源于 ASP.NET Membership 表的 CREATE TABLE 脚本。

您可以在 PasteBin中找到运行的 SQL 更新脚本的副本(由于其长度而与帖子分开)。

4

1 回答 1

2

这显然是塔伦蒂诺的一个错误。如果您查看DropConnections.sql,您会发现作者已经陷入了一个古老的神话,即任何超过 50 的会话都是用户会话。识别用户会话(因此可以杀死会话)的正确方法是is_user_process检查sys.dm_exec_sessions.

于 2010-07-07T04:13:16.650 回答