2010-12-02 3 views
0

An einem anderen Code arbeiten, an dem ein SQL-Abhängigkeitsereignis ausgelöst wurde (SQL 2008). Nicht etwas, das mir so vertraut ist, sondern nur etwas lesen und testen.SQL-Abhängigkeitsereignis wird in Alter Database, aber nicht in Tabellenänderungen ausgelöst

Das Ereignis heißt CustomerServicesTable_OnChange und soll daher vermutlich ausgelöst werden, wenn die Tabelle customerServices geändert wird. Wenn die Datenbank jedoch über Code geändert wird (wir verwenden Entity Framework), wird das Ereignis nicht ausgelöst.

Aus Neugier ich gefeuert SQL Server-Manager und versuchte, Abfragen direkt gegen die Tabelle ausgeführt, um zu sehen, was passieren würde. Das Ausführen von UPDATE-, INSERT- oder ALTER-Abfragen für die Tabelle führte nicht zum Auslösen des Ereignisses.

ALTER DATABASE customers SET SINGLE_USER with rollback immediate 
alter database customers set enable_broker 
ALTER DATABASE customers SET MULTI_USER 

Zu meiner Überraschung laufen diese Befehle verursacht das Ereignis ausgelöst:

, dass SQL Abhängigkeit Um zu überprüfen, hatte damit den Service, den ich lief dann die folgenden Befehle für die Datenbank, die angeblich den ersten Schritt aktiviert wurde!

Es sieht also so aus, als ob die Abhängigkeit gegen die Datenbank als Ganzes oder die Tabelle (n) in der Datenbank anders als CustomerServices funktioniert. Kann jemand einen Weg vorschlagen, um mir zu helfen, genau zu bestimmen, was das Problem ist?

EDIT: Ich habe festgestellt, dass es nicht die ALTER DATABASE-Befehle sind, die das Ereignis auslösen, sondern die Tatsache, dass SET SINGLE_USER einen Fehler verursacht. Aber mir hilft das Problem nicht viel.

Cheers, Matt

Antwort

0

Schließlich dieses ausgearbeitet habe:

1) zu einer SQL Server-Konto muss festgelegt werden Der Datenbank-Besitzer ist die dbo auf ungültig SID abgebildet anstelle eines Windows-Admin-Kontos.

2) Der Überwachungsdienst (d. H. Der zum Starten des Benachrichtigungsdiensts ausgegebene SQL-Befehl) muss auf demselben Benutzerkonto eingerichtet werden, das für die Datenbankaktualisierungen verwendet wird, nach denen Sie suchen.

Ich habe eine Reihe von Berechtigungen arbeiten, aber ich denke, das sind die beiden wichtigsten Probleme, damit es funktioniert.

0

diesen ersten Lesen zu verstehen, wie SqlDependency funktioniert: The Mysterious Notification.

Möglicherweise häufen sich die Benachrichtigungen in sys.transmission_queue und die transmission_status würde angeben, warum dies geschieht.

Ein Schuss im Dunkeln:

ALTER AUTHORIZATION ON DATABASE::customers to sa; 
+0

Danke für den Vorschlag. Es scheint jedoch, als ob die Unterstützung für Benachrichtigungen in SQL Server 2008 entfernt wurde, was wir verwenden. Es sieht so aus, als ob der auftauchende Fehler ein Ablenkungsmanöver ist. –

+0

Abfragebenachrichtigungen wurden ** nicht ** aus SQL Server 2008 oder einer späteren Version entfernt und befinden sich nicht im veralteten Pfad. Sie sprechen über Notifications Services, was ein völlig anderes, nicht verwandtes Feature ist. ASP Cache-Abhängigkeit und SqlDependency verwenden Abfragebenachrichtigung und haben keinerlei Beziehung zu Notification Services. –

+0

Danke für die Zeiger. Ich habe Ihren Artikel gelesen und bin Schritt für Schritt durch das MS-Tutorial gegangen und habe den Code in seiner Gesamtheit repliziert, um sicherzustellen, dass ich genau dasselbe mache wie MS, aber keinen Würfel: Der Service funktioniert einfach nicht.Und wenn es eine Erlaubnis ist, würde die vorgeschlagene CanRequestNotifications() Funktion im Tutorial das Problem nicht auffangen? –

Verwandte Themen