52

LinqToSQL データコンテキストで使用する SqlCacheDependency を統合しています。

ここにあるLinqクエリの拡張クラスを使用しています - http://code.msdn.microsoft.com/linqtosqlcache

コードを配線しましたが、ページを開くと、この例外が発生します-

「現在のデータベースの SQL Server Service Broker が有効になっていないため、クエリ通知がサポートされていません。通知を使用する場合は、このデータベースの Service Broker を有効にしてください。」

global.asax のこのイベントから来ています

        protected void Application_Start()
    {
        RegisterRoutes(RouteTable.Routes);
        //In Application Start Event
        System.Data.SqlClient.SqlDependency.Start(new dataContextDataContext().Connection.ConnectionString);

    }

私の質問は...

  1. SQL Server 2008 データベースで Service Broker を有効にするにはどうすればよいですか? このクエリを実行しようとしました。

  2. SQL Server 2008 でこれを設定すると、DataContext までフィルター処理されますか、それともそこで何かを構成する必要がありますか?

助けてくれてありがとう

トゥルーギリー

4

6 に答える 6

120

他の誰かがこの問題の解決策を探している場合、次のコマンドがうまく機能しました。待機する代わりに、データベースへの他のすべての接続を解放します。

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
于 2011-01-24T05:21:58.457 に答える
32

あなたのものが無効になっている場合、またはバックアップを復元する必要がある場合にこれを行う方法は次のとおりです。

このスクリプトを実行するだけで、データベースが使用しているすべてのプロセスが強制終了されます(2005年とは異なり、2008年にプロセスを手動で強制終了する理由は私にはわかりません)、ブローカーを設定します

USE master
go

DECLARE @dbname sysname

SET @dbname = 'YourDBName'

DECLARE @spid int
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname)
WHILE @spid IS NOT NULL
BEGIN
EXECUTE ('KILL ' + @spid)
SELECT @spid = min(spid) from master.dbo.sysprocesses where dbid = db_id(@dbname) AND spid > @spid
END


ALTER DATABASE @dbname SET ENABLE_BROKER
于 2010-06-03T21:49:14.630 に答える
0

ALTER DATABASE ステートメントによって、またデータベース プロパティ > オプション > サービス ブローカー > ブローカーの有効化: True/False から、ブローカー サービスを有効にすることができます。

ただし、ブローカを有効にしているときにここで問題が発生します。プロセスは特定のデータベースで実行されており、それらを強制終了する必要があり、その後でのみブローカ サービスを有効にできます。@JGilmartinの回答は完全に機能しますが、データベースの進行中のすべてのプロセスを強制終了することを確認してから、本番環境でこのスクリプトを使用する前に、トラフィックまたはプロセスの重大度を確認してください。

于 2020-07-28T08:32:08.797 に答える