Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
La necessità di generare le notifiche delle query è dovuta al fatto che un'applicazione può basarsi sui dati memorizzati nella cache finché non riceve un messaggio di notifica. Quando SQL Server non può più garantire che i dati memorizzati nella cache sono affidabili, invia un messaggio di notifica. SQL Server invia una notifica di query per una sottoscrizione quando si verifica uno degli eventi seguenti:
- È possibile che i risultati di una query siano cambiati.
- La sottoscrizione scade.
- Il server viene riavviato.
- Non è stato possibile creare la sottoscrizione di notifica delle query, ad esempio perché l'istruzione SELECT non è conforme ai requisiti specificati in Creazione di una query da notificare.
- Il carico del server è eccessivo.
- Gli oggetti da cui le sottoscrizioni dipendono vengono eliminati o modificati.
Si noti che SQL Server può produrre una notifica di query in risposta a eventi che non modificano i dati oppure in risposta a una modifica che non influenza concretamente i risultati di una query. Quando un'istruzione UPDATE modifica una delle righe restituite da una query, ad esempio, è possibile che venga generata una notifica anche se il nuovo valore della riga è identico al precedente. Le notifiche delle query sono progettate con l'obiettivo generale di migliorare le prestazioni delle applicazioni che memorizzano dati nella cache. Quando il carico del server è eccessivo, è possibile che SQL Server generi un messaggio di notifica delle query per la sottoscrizione, anziché determinare se i risultati di una query sono stati modificati o meno.
La sottoscrizione di notifica avviene prima che Motore di database esegua tutte le istruzioni contenute nella richiesta di sottoscrizione. Pertanto, se il comando contiene una query e diverse istruzioni che modificano i dati restituiti dalla query, è possibile che l'applicazione riceva un messaggio di notifica prima che il comando che contiene la richiesta di sottoscrizione venga completato.
Ogni sottoscrizione ha una durata minima specificata, al termine della quale SQL Server rimuove la sottoscrizione e crea un messaggio di notifica. Il messaggio informa l'applicazione che la notifica non è più attiva e che SQL Server non sta più eseguendo il rilevamento delle modifiche apportate alla query.
All'avvio di SQL Server il server crea automaticamente messaggi di notifica delle query per tutte le sottoscrizioni di notifica delle query registrate nel database. In tal modo le applicazioni possono aggiornare immediatamente i dati memorizzati nella cache e SQL Server può essere avviato senza elaborare la query in ogni notifica. Quando si elimina un database Motore di database genera messaggi di notifica delle query per tutte le sottoscrizioni registrate nel database.
Se una richiesta di sottoscrizione di notifica viene inviata insieme a una query che non soddisfa i requisiti per la notifica delle query, il database genererà immediatamente un messaggio di notifica delle query, per informare l'applicazione che la query non soddisfa i requisiti per la sottoscrizione. Poiché inoltre SQL Server non può eseguire il rilevamento delle modifiche apportate alla query, l'applicazione dovrà considerare immediatamente obsoleti i risultati della query.
[!NOTA] Una sottoscrizione di notifica delle query gestita da un oggetto di dipendenza, ad esempio SqlDependency in ADO.NET, non genera alcun evento se la connessione tra l'applicazione e il database si interrompe. Quando la connessione con il database viene ripristinata, tuttavia, l'applicazione riceve immediatamente tutte le notifiche create mentre il database non era raggiungibile.
Quando un comando genera un messaggio di notifica, il processo di creazione e invio di un messaggio di notifica avviene nell'ambito di un'istruzione, all'interno della transazione che genera il messaggio di notifica. Se Motore di database non riesce a completare la creazione e l'invio del messaggio di notifica, il comando non riesce e l'errore viene registrato nel log degli errori di SQL Server. Si noti che Motore di database rimuove la sottoscrizione di notifica quando il messaggio di notifica viene generato, indipendentemente dal fatto che Motore di database riesca a generare il messaggio di notifica o meno.
[!NOTA] Le sottoscrizioni vengono rimosse senza generare un messaggio di notifica quando l'account utente del database che ha creato la sottoscrizione viene eliminato o disattivato, quando il database che contiene la sottoscrizione viene collegato o quando si utilizza KILL QUERY NOTIFICATION SUBSCRIPTION per rimuovere la sottoscrizione.
Vedere anche
Concetti
Creazione di una query da notificare
Messaggi di notifica delle query