Aktivieren von Service Broker in SQL Server 2008
-
02-10-2019 - |
Frage
Ich bin die Integration SqlCacheDependency auf den Einsatz in meinem LinqToSQL Datacontext.
Ich verwende eine Erweiterungsklasse für Linq querys hier - http://code.msdn.microsoft. com / linqtosqlcache
Ich habe den Code verdrahtet und wenn ich die Seite öffne ich diese Ausnahme erhalten -
„Der SQL Server Service Broker für die aktuelle Datenbank nicht aktiviert ist, und als Ergebnis Abfragebenachrichtigungen werden nicht unterstützt. Bitte aktivieren Sie den Service Broker für diese Datenbank, wenn Sie möchten Benachrichtigungen verwenden.“
sein Kommen von diesem Ereignis in der global.asax
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
//In Application Start Event
System.Data.SqlClient.SqlDependency.Start(new dataContextDataContext().Connection.ConnectionString);
}
Meine Frage ist ...
-
Wie kann ich Service Broker in meinem SQL Server 2008-Datenbank? Ich habe versucht, diese Abfrage .. ALTER DATABASE Tabellenname SET ENABLE_BROKER laufen, aber es nie Enden und läuft immer, ich muss es manuell stoppen.
-
, wenn ich diesen Satz in SQL Server 2008 wird es auf meine Datacontext filtern nach unten, oder muss ich configure dort etwas zu?
Dank für jede Hilfe
Truegilly
Lösung 3
ok hier ist, wie dies zu tun ist, wenn Ihr deaktiviert ist oder Sie eine Sicherung wiederherstellen, die sie zu deaktivieren scheint.
nur dieses Skript ausführen, wird es töten die ganze Prozess ist, dass eine Datenbank verwendet (warum Sie 2008 CarNT manuell Prozess töten im Gegensatz zu 2005 ist mir schleierhaft) und dann den Broker gesetzt
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
Andere Tipps
Falls jemand anderes für eine Lösung für dieses Problem suchen, arbeitete der folgende Befehl für mich groß. Es gibt alle anderen Verbindungen zur Datenbank anstelle des Wartens.
ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE
In SQL Server 2012 können Sie auf Properties-> Options -> Service Broker
Alle Verbindungen mit dem DB fallen gelassen werden müssen und das Benutzerkonto mit Berechtigungen verwendet, um den Broker-Dienst zu aktivieren.
In der folgenden wäre ideal (ersetzen 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;
Auch schlage ich eine neue Rolle und das Benutzerkonto mit den entsprechenden Berechtigungen zu schaffen (Datenbank-Login ersetzen):
--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';