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);
}
私の質問は...
sQL Server 2008データベースでService Brokerを有効にするにはどうすればよいですか?私はこのクエリを実行しようとしました。ALTER DATABASE tablename SET ENABLE_BROKERが終了することはなく、永遠に実行されるため、手動で停止する必要があります。
sQL Server 2008でこのセットを取得したら、DataContextにフィルターしますか、それとも何かを構成する必要がありますか?
助けてくれてありがとう
Truegilly
あなたのが無効になっている場合、またはバックアップを無効にするように思われるバックアップを復元する必要がある場合、ここでOKです。
このスクリプトを実行するだけで、データベースが使用しているすべてのプロセスを強制終了し(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
他の誰かがこの問題の解決策を探している場合は、次のコマンドがうまく機能しました。待機する代わりに、データベースへの他のすべての接続を解放します。
ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
Sql Server 2012では、Properties-> Options -> 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';