Domanda

di lavoro sul codice di qualcun altro dove hanno istituito un evento SQL Dependency (SQL 2008). Non è una cosa Sono terribilmente familiarità con così è stato solo facendo qualche lettura e alcuni test.

L'evento si chiama CustomerServicesTable_OnChange e così è destinato presumibilmente a fuoco ogni volta che il tavolo CustomerServices è cambiata. Tuttavia quando il DB viene modificato tramite il codice (stiamo usando Entity Framework) l'evento non sta sparando.

Per curiosità ho sparato SQL Server Manager e ha cercato query in esecuzione contro il tavolo direttamente a vedere cosa sarebbe successo. Esecuzione UPDATE, INSERT o ALTER query sul tavolo non ha causato l'evento al fuoco.

Per controllare che la dipendenza SQL era stato abilitato Allora ho fatto funzionare i seguenti comandi nel database, presumibilmente il primo passo per abilitare il servizio:

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

Con mia grande sorpresa di eseguire questi comandi ha causato l'evento al fuoco!

Quindi, sembra che la dipendenza sta lavorando contro sia il database nel suo complesso, o una tabella (s) nel DB diverso CustomerServices. Qualcuno può suggerire un modo avanti per aiutare a determinare esattamente qual è il problema?

EDIT: ho scoperto che non sono i comandi ALTER DATABASE che stanno causando l'evento al fuoco, ma il fatto che SET SINGLE_USER causa un errore. non mi aiuta con il problema molto però.

Saluti, Matt

È stato utile?

Soluzione 2

Finalmente ho avuto questo ha funzionato:

1) Il proprietario del database deve essere impostato a un server SQL conto invece di un account Windows Admin.

2) Il servizio di orologio (vale a dire il comando SQL emesso per avviare il servizio di notifica) deve essere impostato sullo stesso account utente come verrà utilizzato per effettuare gli aggiornamenti del database si sta guardando per.

Ho fatto un po 'di lavoro i permessi, ma credo che questi sono i due temi chiave per farlo funzionare.

Altri suggerimenti

Leggere prima di capire come funziona SqlDependency: La notifica Misteriosa .

Possibilmente le notifiche si accumulano nel sys.transmission_queue e la transmission_status sarebbero indicare il motivo per cui questo accade.

Un salto nel buio: il dbo è mappata a SID valido:

ALTER AUTHORIZATION ON DATABASE::customers to sa;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top