Включение SQL Server Broker занимает слишком много времени


134

У меня есть Microsoft SQL Server 2005, и я попытался включить Broker для моей базы данных с этими T-SQL:

 SELECT name, is_broker_enabled FROM sys.databases 
 -- checking its status 0 in my case
 ALTER DATABASE myDatabase SET ENABLE_BROKER

Процесс Alter Databaseзанимает много времени. Сейчас прошло более получаса, и он все еще работает. Не уверен, что он ждет чего-то другого, или я должен сначала что-то очистить, например, удалить все сообщения, контракт, очередь и сервисы в сервис-брокере?


Как примечание для других, если есть какие-либо открытые соединения с БД, они вызовут эту задержку. Беги, sp_whoчтобы показать, есть ли кто-нибудь .. (это может быть ты)
ChipperG

Ответы:


270

http://rusanu.com/2006/01/30/how-long-should-i-expect-alter-databse-set-enable_broker-to-run/

alter database [<dbname>] set enable_broker with rollback immediate;

7
каков эффект "с немедленным откатом"?
А.Дара

14
@ A.Dara Вы не можете изменить базу данных, если есть ожидающие транзакции. Откат немедленно прекратит все это.
libjup


2

На самом деле я предпочитаю использовать NEW_BROKER, он работает нормально во всех случаях:

ALTER DATABASE [dbname] SET NEW_BROKER WITH ROLLBACK IMMEDIATE;

2
Вы должны объяснить, почему вы предпочитаете это и что он делает по-другому ....
Митч Уит

Это работает нормально и не требует времени во всех случаях
Майк Дарвиш

2

Включение SQL Server Service Broker требует блокировки базы данных. Остановите агент SQL Server и затем выполните следующее:

USE master ;
GO

ALTER DATABASE [MyDatabase] SET ENABLE_BROKER ;
GO

Замените [MyDatabase] именем вашей базы данных, а затем запустите агент SQL Server.

Если вы хотите просмотреть все базы данных, в которых включен или отключен компонент Service Broker, запросите файл sys.databases, например:

SELECT
    name, database_id, is_broker_enabled
FROM sys.databases
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.