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 ...

  1. 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.

  2. , 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

War es hilfreich?

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

Enable 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';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top