2010-05-03 26 views
38

Estoy integrando SqlCacheDependency para utilizar en mi contexto de datos LinqToSQL.Habilitación de Service Broker en SQL Server 2008

estoy usando una clase de extensión para querys Linq encontrar aquí - http://code.msdn.microsoft.com/linqtosqlcache

He cableado el código y cuando abro la página de recibo esta excepción -

"El Service Broker de SQL Server para la la base de datos actual no está habilitada, y como resultado las notificaciones de consulta no son compatibles. Habilite Service Broker para esta base de datos si desea usar notificaciones. "

su procedentes de este evento en el Global.asax

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

    } 

mi pregunta es ...

  1. ¿Cómo activo Service Broker en mi servidor de base de datos SQL 2008? He intentado ejecutar esta consulta .. ALTER DATABASE tablename SET ENABLE_BROKER pero nunca termina y se ejecuta para siempre, tengo que detenerlo manualmente.

  2. una vez que tengo este conjunto en SQL Server 2008, ¿se filtrará a mi DataContext, o tengo que configurar algo allí también?

gracias por cualquier ayuda

Truegilly

Respuesta

28

bien aquí es cómo hacer esto si el suyo es discapacitado o tiene que restaurar una copia de seguridad, lo que parece para desactivarlo.

acaba de ejecutar este script, que matará a la que una base de datos está utilizando (por qué carnt en 2008 matar manual de proceso a diferencia de 2005 es más allá de mí) y luego ponga el corredor

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

información adicional útil : para ver si está habilitado, ejecute ... 'SELECT is_broker_enabled FROM sys.databases WHERE name = 'Database name'; - Donde 'Nombre de la base de datos' es el nombre de la base de datos que desea consultar.' – Myster

94

En caso de que alguien todo el proceso De lo contrario, estoy buscando una solución a este problema, el siguiente comando funcionó muy bien para mí. Lanza todas las demás conexiones a la base de datos en lugar de esperar.

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

funcionó como un amuleto :) gracias –

27

en SQL Server 2012 se puede ir a Properties-> Options -> Service Broker

Enable Service Broker

+0

Lo mismo para SQL 2008 sp3 (recién probado) con el último smss –

2

Todas las conexiones a la base de datos deben ser dejados y cuenta de usuario con permisos utilizan para habilitar el servicio de corredor.

El siguiente sería ideal (sustituir 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; 

También se sugiere la creación de un nuevo papel y la cuenta de usuario con los permisos adecuados (sustituir inicio de sesión de base de datos):

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