web-dev-qa-db-fra.com

Activation de Service Broker dans SQL Server 2008

J'intègre SqlCacheDependency à utiliser dans mon contexte de données LinqToSQL.

J'utilise une classe d'extension pour les requêtes Linq trouvées ici - http://code.msdn.Microsoft.com/linqtosqlcache

J'ai câblé le code et lorsque j'ouvre la page, j'obtiens cette exception -

"Le courtier de service SQL Server pour la base de données actuelle n'est pas activé et, par conséquent, les notifications de requête ne sont pas prises en charge. Veuillez activer le courtier de service pour cette base de données si vous souhaitez utiliser les 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 activer Service Broker dans ma base de données SQL Server 2008? J'ai essayé d'exécuter cette requête .. ALTER DATABASE tablename SET ENABLE_BROKER mais elle ne se termine jamais et s'exécute pour toujours, je dois l'arrêter manuellement.

  2. une fois que j'aurai cet ensemble dans SQL Server 2008, filtrera-t-il vers mon DataContext, ou dois-je configurer quelque chose là aussi?

merci pour toute aide

Truegilly

47
JGilmartin

ok voici comment faire si la vôtre est désactivée ou si vous devez restaurer une sauvegarde, ce qui semble la désactiver.

il suffit d'exécuter ce script, il tuera tous les processus utilisés par une base de données (pourquoi vous avez tué manuellement en 2008 les processus contrairement à 2005 me dépasse), 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
31
JGilmartin

Au cas où quelqu'un d'autre chercherait une solution à ce problème, la commande suivante a très 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
106
Matt

Dans Sql Server 2012, vous pouvez accéder à Properties-> Options -> Service Broker

Enable Service Broker

36
Dragos Durlut

Toutes les connexions à la base de données doivent être supprimées et un compte utilisateur avec des autorisations doit être utilisé pour activer le service de courtier.

L'idéal serait de remplacer (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;

Je suggère également de créer un nouveau rôle et un nouveau compte utilisateur avec les autorisations appropriées (remplacer la connexion à la 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';
3
Anubhav