質問

linqtosql datacontextで使用するためにsqlcachedependencyを統合しています。

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

コードを配線しました。ページを開くと、この例外が表示されます。

「現在のデータベースのSQL Server 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データベースでサービスブローカーを有効にするにはどうすればよいですか?このクエリを実行しようとしました。データベースTableName set enabable_brokerを変更しましたが、それは決して終わりず、永遠に実行されます。手動で停止する必要があります。

  2. SQL Server 2008にこのセットを設定したら、DataContextにフィルターダウンしますか、それともそこに何かを構成する必要がありますか?

助けてくれてありがとう

TrueGilly

役に立ちましたか?

解決 3

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

このスクリプトを実行するだけで、データベースが使用しているすべてのプロセスを殺します(2008年にプロセスを手動で殺す理由は2005年とは異なります)。

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

他のヒント

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

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

SQL Server 2012では、行くことができます Properties-> Options -> Service Broker

Enable Service Broker

DBへのすべての接続をドロップし、ブローカーサービスを有効にするために使用される権限を備えたユーザーアカウントを削除する必要があります。

以下は理想的です(交換してください databasename):

     IF ((SELECT is_broker_enabled FROM sys.databases WHERE name = '%DATABASE_NAME%') = 1)
      BEGIN
        ALTER DATABASE %DATABASE_NAME% SET NEW_BROKER WITH ROLLBACK IMMEDIATE;
     END

    ALTER DATABASE %DATABASE_NAME% SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;

また、適切な権限を使用して新しい役割とユーザーアカウントを作成することをお勧めします(データベースログインを置き換えます)。

  --DBA creates a new role 
   if not exists (select 1 from sys.database_principals where name='sql_dependency_subscriber' and Type = 'R')
  begin
   EXEC sp_addrole 'sql_dependency_subscriber' 
  end

  --Minimum Required  Permissions needed for SQLDependancy Notification to work
   GRANT CREATE PROCEDURE to sql_dependency_subscriber;
   GRANT CREATE QUEUE to sql_dependency_subscriber; 
   GRANT CREATE SERVICE to sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   GRANT VIEW DEFINITION TO sql_dependency_subscriber;

  --Minimum Required  Permissions  needed for SQLDependaney Notification to work
   GRANT SELECT to sql_dependency_subscriber;
   GRANT SUBSCRIBE QUERY NOTIFICATIONS TO sql_dependency_subscriber;
   GRANT RECEIVE ON QueryNotificationErrorsQueue TO sql_dependency_subscriber;
   GRANT REFERENCES on CONTRACT::[http://schemas.microsoft.com/SQL/Notifications/PostQueryNotification] to sql_dependency_subscriber ;
   EXEC sp_addrolemember 'sql_dependency_subscriber', '%DATABASE_LOGIN%';
   EXEC sp_addrolemember 'sql_dependency_subscriber', 'sqldp';
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top