Вопрос

Я интегрирую SQLCachedEpendency для использования в моем DataContext LinqtoSQL.

Я использую класс расширения для LINQ QUERYS, найденных здесь - http://code.msdn.microsoft.com/linqtosqlcache

Я подключил код, и когда я открываю страницу, я получаю это исключение -

«Сервисный брокер SQL Server для текущей базы данных не включен, и в результате уведомлений о запросе не поддерживаются. Пожалуйста, включите сервисного брокера для этой базы данных, если вы хотите использовать уведомления».

это исходит от этого события в Global.asax

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

    }

Мой вопрос ...

  1. Как включить сервисный брокер в моей базе данных SQL Server 2008? Я попытался запустить этот запрос. Изменить набор табличных значений базы данных enable_broker, но он никогда не заканчивается и работает навсегда, я должен вручную остановить его.

  2. Как только я начну этот набор в SQL Server 2008, будет ли он отфильтровать в мой DataContext, или мне нужно что -то там настраивать?

Спасибо за помощь

TrueGilly

Это было полезно?

Решение 3

Хорошо, вот как это сделать, если ваш отключен или вам нужно восстановить резервную копию, которая, кажется, отключает ее.

Просто запустите этот скрипт, он убьет все процессы, которые использует база данных (почему вы в 2008 году в ручных убийствах, в отличие от 2005 года, не превышает меня), а затем установите брокера

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

Другие советы

В случае, если кто -то еще ищет решение этой проблемы, следующая команда отлично подходила для меня. Он выпускает все остальные подключения к базе данных вместо ожидания.

ALTER DATABASE [DBNAME] SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE

В SQL Server 2012 вы можете перейти к Properties-> Options -> Service Broker

Enable Service Broker

Все соединения с БД должны быть сброшены и учетная запись пользователя с разрешениями, используемыми для обеспечения службы брокера.

Следующее было бы идеальным (замените 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;

Также я предлагаю создать новую роль и учетную запись пользователя с правильными разрешениями (замените вход в базу данных):

  --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';
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top