Activación de Service Broker en SQL Server 2008
-
02-10-2019 - |
Pregunta
estoy integrando SqlCacheDependency para su uso en mi DataContext LinqToSql.
Estoy utilizando 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 que conseguir esta excepción -
"El Service Broker de SQL Server para la base de datos actual no está activado, y como resultado, no se admiten las notificaciones de consulta. Por favor, activa el Service Broker para esta base de datos si desea utilizar las 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 ...
-
¿Cómo activo Service Broker en mi servidor de base de datos SQL 2008? He tratado de ejecutar esta consulta .. ALTER DATABASE SET nombredetabla ENABLE_BROKER pero nunca extremos y corre para siempre, tengo que parar manualmente.
-
Una vez que tengo este conjunto en el servidor SQL 2008, va a filtrarse a mi DataContext, o tengo necesidad de configurar algo allí también?
gracias por cualquier ayuda
Truegilly
Solución 3
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.
basta con ejecutar este script, que matará a todo el proceso es que una base de datos está utilizando (por la que en 2008 carnt matar manualmente proceso de 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
Otros consejos
En cualquier caso más está buscando una solución a este problema, el siguiente comando funcionó muy bien para mí. Libera todas las otras conexiones a la base de datos en lugar de espera.
ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
En SQL Server 2012 se puede ir a Properties-> Options -> Service Broker
Todas las conexiones a la base de datos debe ser dado de baja y la cuenta de usuario con permisos usados ??para habilitar el servicio intermediario.
La 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';