2009-08-21 4 views
1

J'ai créé un petit site Web ASP.NET. Il utilise sqlcachedependencyCourtier de service SQL Server signalant comme désactivé lorsque j'ai écrit une requête pour l'activer

SQL Server Service Broker pour la base de données en cours n'est pas activé et, par conséquent, les notifications de requête ne sont pas prises en charge. Veuillez activer Service Broker pour cette base de données si vous souhaitez utiliser des notifications.

Description: Une exception non gérée s'est produite lors de l'exécution de la requête Web en cours. Veuillez consulter la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

Détails d'exception: System.InvalidOperationException: SQL Server Service Broker pour la base de données en cours n'est pas activé et, par conséquent, les notifications de requête ne sont pas prises en charge. Veuillez activer Service Broker pour cette base de données si vous souhaitez utiliser des notifications.

Erreur Source:

Ligne 12: System.Data.SqlClient.SqlDependency.Start (connString);

Ceci est la ligne erronée dans mon global.asax.

Cependant, dans le serveur SQL (2005), j'ENABLED courtier de service comme si (je me connecte et exécuter le service SQL Server lorsque je déboguer mon site):

ALTER DATABASE mynewdatabase SET ENABLE_BROKER avec rollback immédiate

Et ce fut un succès.

Qu'est-ce qui me manque? J'essaye d'employer la dépendance de mise en cache de SQL et ai suivi toutes les procédures.

Merci

+0

Redémarrez le pool d'applications après la ENABLE_BROKER. Assurez-vous que connString transmis à Start fait référence à "mynewdatabase" comme catalogue initial. –

+0

Que voulez-vous dire par catalogue initial? C'est tout ce que je ne comprends pas. En ce moment, ce nom est remplacé par le nom de mon db. – dotnetdev

+0

Catalogue initial: le 'catalogue initial' sur la chaîne de connexion. http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx. Peut-être aussi 'Base de données'. –

Répondre

0

Est-ce que vous utilisez une instance SQL normale, y compris Express, ou si vous utilisez User Instances vous? c'est à dire. votre chaîne de connexion utilise l'option "AttachDbFilename"? Sur les instances d'utilisateur parce que le MDF est attaché chaque fois que l'instance est créée, Service Broker est désactivé à chaque fois car les opérations d'attachement et de restauration désactivent toujours le courtier dans la base de données.

+0

Instance normale (édition d'entreprise). – dotnetdev

+0

Vous pouvez vérifier la valeur de la colonne 'is_broker_enabled' dans' sys.databases' pour confirmer que broker est activé dans la base de données. Si vous n'avez pas besoin d'exécuter à nouveau ALTER et peut-être vérifier quel composant peut le désactiver. –

0

Abandonnez le "avec annulation immédiate" et réessayez d'exécuter l'instruction.

Est-ce que ça bloque? Si c'est le cas, tuez toutes les autres sessions qui se trouvent dans la base de données et bloquez la session en essayant de modifier la base de données.

Voici le script que j'ai mentionné dans mon commentaire.

use master 
go 
declare @parent int 
declare @cmd varchar(100) 

set @parent = 53 

while exists (select * from sys.sysprocesses where spid = @parent and blocked <> 0) 
begin 
    select @cmd = 'kill ' + cast(blocked as varchar(10)) 
    from sys.sysprocesses 
    where spid = @parent 

    print @cmd 

    exec (@cmd) 
end 
+0

Oui, il se bloque sans la restauration immédiate. Je vais essayer de tuer les sessions, mais je suis la seule personne connectée/où puis-je tuer des sessions? – dotnetdev

+0

Ensuite, quelque chose d'autre est connecté à la base de données. Fermez l'Explorateur d'objets si nécessaire et toutes les autres fenêtres de requête que vous avez ouvertes. Interrogez le fichier DMV sys.sysprocesses pour voir quels autres processus utilisent la base de données (ou recherchez les processus qui bloquent votre commande ALTER DATABASE) et utilisez la commande KILL T/SQL pour supprimer ces processus. Vous devrez tous les détruire pour que la commande ALTER DATABASE prenne effet. Je posterai un script que j'utiliserai qui devrait aider. – mrdenny

1

J'ai rencontré le même problème sur l'un de nos serveurs. cela a résolu le problème (remplacez DBNAME par le nom de la base de données)

ALTER DBASE DE DONNÉES RÉGLÉ NEW_BROKER AVEC ROLLBACK IMMEDIATE;

ALTER DATABASE DBNAME SET ENABLE_BROKER;

Enfin, vérifiez si vous obtenez 1 pour drapeau is_broker_enabled:

SELECT is_broker_enabled SYS.bases de données WHERE nom = 'DBNAME'

0

Vous pouvez le modifier par

Data Base - > Properties -> Options -> Service Broker

Questions connexes