2009-07-07 13 views
98

J'ai un serveur Microsoft SQL 2005 et j'ai essayé de permettre Broker pour ma base de données avec les T-SQL:Broker SQL Server prendre trop longtemps

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

Le Alter Database prend beaucoup de temps à traiter. Il est maintenant plus d'une demi-heure et il est toujours en cours d'exécution. Vous ne savez pas s'il attend quelque chose d'autre ou dois-je tout d'abord nettoyer, par exemple supprimer tous les messages, contrats, files d'attente et services sous Service Broker?

Répondre

199

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; 
+6

quel est l'effet de « rollback avec immédiate »? –

+10

@ A.Dara Vous ne pouvez pas modifier une base de données tant que des transactions sont en attente. Rollback immédiat mettra fin à tout cela. – libjup

+0

pouvez-vous répondre [this] (http://stackoverflow.com/questions/38456433/cannot-find-the-object-querynotificationerrorsqueue-because-it-does-not-exist) sur sqlDependency? – stom

13

Avec ci-dessous le code, vous pouvez activer la file d'attente courtier de service immédiatement

ALTER DATABASE Database_Name SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE; 
8
USE master; 
GO 
ALTER DATABASE Database_Name 
    SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE; 
GO 
USE Database_Name; 
GO 
1

En fait, je suis préférant utiliser NEW_BROKER, il fonctionne bien sur tous les cas:

ALTER DATABASE [dbname] SET NEW_BROKER WITH ROLLBACK IMMEDIATE; 
1

L'activation de SQL Server Service Broker requiert un verrou de base de données. Arrêtez l'Agent SQL Server, puis exécutez la commande suivante:

USE master ; 
GO 

ALTER DATABASE [MyDatabase] SET ENABLE_BROKER ; 
GO 

Change [MaBase] avec le nom de votre base de données en question puis démarrez Agent SQL Server.

Si vous voulez voir toutes les bases de données qui ont Service Broker activé ou désactivé, puis interroger sys.databases, par exemple:

SELECT 
    name, database_id, is_broker_enabled 
FROM sys.databases 
Questions connexes