Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Affidabilità SqlDependency?

1) Sì, lo ritengo affidabile in quanto fa correttamente lo scopo per cui è stato progettato (invalidazione della cache)

2) No. Per questo puoi iscriverti solo emettendo una query, questo assicura che non ci sia corsa tra il recupero dei dati e la notifica di nuovi aggiornamenti

3) Il riavvio del database (o dell'istanza) segnala tutte le notifiche di query in sospeso con un SqlNotificationInfo valore di Restart . Leggi come SqlDependency si basa su Query Notification per una migliore comprensione. Come SqlDependency mantiene sempre aperta una connessione al database, un'indisponibilità del database verrà rilevata da SqlDependency anche prima di qualsiasi notifica di query esplicita

4) No. Maggiori informazioni su questo più in basso...

5) Non ci sono "dati mancati". Query Notification (e quindi SqlDependency) non ti avvisa mai su cosa dati modificati. Ti informa solo che è cambiato . Dovresti sempre tornare indietro e leggere tutto i dati tornano per vedere cosa era cambiato (e vi rimando alla domanda/risposta n. 2). Un'applicazione appena avviata non aveva ancora richiesto i dati per cominciare, quindi non vi è alcuna modifica da notificare. Solo dopo ha prima interrogato i dati può ricevere una notifica.

Dalla descrizione del tuo problema non sono convinto che tu abbia bisogno di notifiche di query. Mi sembra che tu voglia agire su qualsiasi modifica, non importa quando è avvenuta, anche se la tua applicazione non era in esecuzione . Questo non è certamente l'invalidazione della cache, è il rilevamento delle modifiche. Pertanto è necessario implementare una tecnologia di rilevamento delle modifiche, come Modifica acquisizione dati o Modifica monitoraggio , entrambi solo SQL Server 2008 e versioni successive (non disponibile in SQL Server 2005). Con SQL Server 2005 non è raro distribuire un trigger e accodare un messaggio per Broker di servizi per gestire lo stesso problema che stai cercando di gestire (rileva le modifiche, reagisci a ogni riga di nuovi dati).