2

まったく新しいデータベース スキーマを持つプロジェクトに、Tarantino Database Management を導入しています。唯一の変更 ( にあります0001_InitialSchema.sql) は、ASP.NET メンバーシップで使用されるテーブルの作成です。を使用してテーブルを生成し、aspnet_regsql.exeそれらを CREATE TO スクリプトとしてスクリプト化し、単一の Tarantino sql ファイルに結合しました。

NAnt ビルド スクリプトを実行するdrop databaseと、削除しようとしているデータベースからすべての接続を削除しようとすると、コマンドがチョークします。

データベース DBName の接続を削除しています

[呼び出し] Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。

[call] ユーザー プロセスのみを強制終了できます。

これにより、create databaseデータベースがまだ存在し、新しい更新が適用されないため、次の手順が失敗します。

SQL データベースの管理:

path\to\source\src\Database のスクリプトを使用して、localhost に DBName を作成します。

BUILD FAILED - 致命的ではないエラー 1 件、警告 0 件

内部エラー

Microsoft.SqlServer.Management.Common.ExecutionFailureException: Transact-SQL ステートメントまたはバッチの実行中に例外が発生しました。---> System.Data.SqlClient.SqlException: データベース 'DBName' は既に存在します。別のデータベース名を選択してください。

スクリプトが実行された後も、一部のシステム プロセスは常にデータベースに接続されたままになります。これを別のマシンで実行しようとしましたが、同じ問題が存在します。また、別の Tarantino プロジェクトを実行してみましたが、毎回問題なく実行されます。ダミーの更新ファイル (テーブル Foo、Bar などを追加) も作成しましたが、これも問題なく実行されました。この問題は、ASP.NET メンバーシップ テーブルの CREATE TABLE スクリプトに起因しているようです。

PasteBin で実行された SQL 更新スクリプトのコピーを見つけることができます(長さのために投稿とは別になっています)。

4

1 に答える 1

2

それは明らかにタランティーノのバグでしょう。DropConnections.sqlを調べると、作成者が50を超えるセッションはユーザーセッションであるという古い神話に陥っていることがわかります。ユーザーセッション(したがってKILL可能なセッション)を識別する正しい方法は、のis_user_process列を確認することsys.dm_exec_sessionsです。

于 2010-07-07T04:13:16.650 に答える