2010-05-03 7 views
38

J'intègre SqlCacheDependency à utiliser dans mon contexte de données LinqToSQL.Activation de Service Broker dans SQL Server 2008

J'utilise une classe d'extension pour querys Linq trouvés ici - http://code.msdn.microsoft.com/linqtosqlcache

Je câblé le code et quand j'ouvre la page que je reçois cette exception -

« Le Service Broker SQL Server pour la La base de données actuelle n'est pas activée et, par conséquent, les notifications de requête ne sont pas prises en charge. Veuillez activer Service Broker pour cette base de données si vous souhaitez utiliser des notifications. "

sa venue de cet événement dans le global.asax

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

    } 

ma question est ...

  1. comment je fais activer Service Broker dans mon serveur base de données SQL 2008? J'ai essayé d'exécuter cette requête .. ALTER DATABASE nom de table SET ENABLE_BROKER mais il ne se termine jamais et fonctionne pour toujours, je dois l'arrêter manuellement.

  2. Une fois que je l'ai défini dans SQL Server 2008, va-t-il filtrer vers mon DataContext ou dois-je également configurer quelque chose?

Merci pour toute aide

Truegilly

Répondre

28

ok ici est comment faire si le vôtre est désactivé ou vous avez besoin de restaurer une sauvegarde, qui semble le désactiver.

il suffit d'exécuter ce script, il va tuer tout le processus est qu'une base de données utilise (pourquoi vous Carnt en 2008 tuer manuellement des années processus contrairement à 2005 est au-delà de moi), puis définissez le courtier

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 
+3

informations supplémentaires utiles : pour voir si elle est activée, exécutez ... 'SELECT is_broker_enabled FROM sys.databases WHERE name = 'Nom de la base de données'; - Où 'Nom de la base de données' est le nom de la base de données que vous souhaitez interroger.' – Myster

94

Au cas où quelqu'un D'autre est à la recherche d'une solution à ce problème, la commande suivante a bien fonctionné pour moi. Il libère toutes les autres connexions à la base de données au lieu d'attendre.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE 
+4

a travaillé comme un charme :) merci –

27

Dans Sql Server 2012 vous pouvez aller à Properties-> Options -> Service Broker

Enable Service Broker

+0

Idem pour SQL 2008 sp3 (juste testé) avec le dernier smss –

2

Toutes les connexions au DB doivent être être supprimés et compte utilisateur avec des autorisations utilisées pour activer le service de courtier.

Ce qui suit serait idéal (remplacer 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; 

Aussi, je suggère la création d'un nouveau rôle et le compte utilisateur avec les autorisations appropriées (remplacer la connexion de base de données):

--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';