Domanda

sto integrando SqlCacheDependency ad uso nel mio LinqToSQL DataContext.

Se si utilizza una classe di estensione per querys Linq trovato qui - http://code.msdn.microsoft. com / linqtosqlcache

Ho cablato il codice e quando apro la pagina ottengo questa eccezione -

"Il Service Broker di SQL Server per il database corrente non è abilitato, e di conseguenza le notifiche delle query non sono supportati. Si prega di abilitare il Service Broker per il database, se si desidera utilizzare le notifiche".

la sua venuta da questo evento nel Global.asax

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

    }

la mia domanda è ...

  1. Come faccio ad attivare Service Broker nel mio server di database SQL 2008? Ho cercato di eseguire questa query .. ALTER DATABASE SET nometabella ENABLE_BROKER ma non è mai fini e piste per sempre, mi devo fermare manualmente.

  2. una volta che ho questo set in SQL Server 2008, sarà filtrare fino al mio DataContext, o devo a configurare qualcosa anche lì?

Grazie per qualsiasi aiuto

Truegilly

È stato utile?

Soluzione 3

ok qui è come fare questo se il vostro è disattivata o è necessario ripristinare un backup, che sembra disattivarlo.

basta eseguire questo script, ucciderà tutto il processo è che un database utilizza (il motivo per cui nel 2008 buoo uccidere manualmente processo di differenza il 2005 è al di là di me) e quindi impostare il broker

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

Altri suggerimenti

Nel caso in cui nessun altro è alla ricerca di una soluzione a questo problema, il seguente comando ha lavorato molto per me. Rilascia tutte le altre connessioni al database, invece di aspettare.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

In SQL Server 2012 si può andare a Properties-> Options -> Service Broker

Abilita Service Broker

Tutte le connessioni al DB deve essere essere eliminato e l'account utente con le autorizzazioni utilizzate per attivare il servizio broker.

Di seguito sarebbe l'ideale (sostituire 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;

Anche io suggerisco di creare un nuovo ruolo e account utente con le autorizzazioni appropriate (sostituire accesso al database):

  --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';
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top