Panoramica sul rilevamento delle modifiche
In SQL Server 2008 è stato introdotto il rilevamento delle modifiche, una soluzione semplice che consente di rilevare in modo efficiente le modifiche per le applicazioni. In genere, per consentire alle applicazioni di eseguire una query per le modifiche apportate ai dati in un database e di accedere alle informazioni correlate, gli sviluppatori di applicazioni dovevano implementare meccanismi di rilevamento delle modifiche personalizzati. La creazione di tali meccanismi era di solito impegnativa e comportava frequentemente l'utilizzo di una combinazione di trigger, colonne timestamp, nuove tabelle per archiviare le informazioni di rilevamento e processi di pulizia personalizzati.
A tipi diversi di applicazioni sono associati requisiti diversi correlati alla quantità di informazioni necessarie relative alle modifiche. Il rilevamento delle modifiche può essere utilizzato nelle applicazioni per fornire risposte alle domande seguenti relative alle modifiche apportate a una tabella utente:
Quali righe sono state modificate per una tabella utente?
È necessario sapere solo che una riga è stata modificata. Non è necessario sapere il numero di modifiche apportate alla riga o i valori di qualsiasi modifica intermedia.
Gli ultimi dati possono essere ottenuti direttamente dalla tabella per cui viene eseguito il rilevamento.
Una riga è stata modificata?
- È necessario sapere che una riga è stata modificata. Le informazioni sulla modifica devono inoltre essere disponibili e devono essere state registrate nel momento in cui la modifica è stata apportata nella stessa transazione.
[!NOTA]
Se per un'applicazione è necessario conoscere le informazioni relative a tutte le modifiche apportate e i valori intermedi dei dati modificati, potrebbe risultare appropriato utilizzare la funzionalità Change Data Capture anziché il rilevamento delle modifiche. Per ulteriori informazioni, vedere Confronto tra Change Data Capture e il rilevamento delle modifiche e Change Data Capture.
Applicazioni di sincronizzazione unidirezionale e bidirezionale
Le applicazioni che devono sincronizzare dati con un'istanza del Motore di database di SQL Server devono essere in grado di eseguire query per le modifiche. Il rilevamento delle modifiche può essere utilizzato come base per le applicazioni di sincronizzazione unidirezionale e bidirezionale.
Applicazioni di sincronizzazione unidirezionale
Le applicazioni di sincronizzazione unidirezionale, ad esempio un'applicazione client o un'applicazione di memorizzazione nella cache di livello medio, possono essere create in modo che utilizzino il rilevamento delle modifiche. Come illustrato nella figura seguente, per un'applicazione di memorizzazione nella cache è necessario che i dati siano archiviati nel Motore di database e siano memorizzati nella cache in altri archivi dati. L'applicazione deve essere in grado di mantenere aggiornata la cache con qualsiasi modifica apportata alle tabelle di database. Non è presente alcuna modifica da passare nuovamente al Motore di database.
Applicazioni di sincronizzazione bidirezionale
Anche le applicazioni di sincronizzazione bidirezionale possono essere create in modo che utilizzino il rilevamento delle modifiche. In questo scenario i dati contenuti in un'istanza del Motore di database sono sincronizzati con uno o più archivi dati. I dati in tali archivi possono essere aggiornati e le modifiche devono essere sincronizzate nuovamente nel Motore di database.
Un valido esempio di applicazione di sincronizzazione bidirezionale è un'applicazione che esegue occasionalmente una connessione. In questo caso un'applicazione client esegue una query e aggiorna un archivio locale. Quando tra un client e un server è disponibile una connessione, l'applicazione si sincronizzerà con un server e i dati fluiscono in entrambe le direzioni.
Le applicazioni di sincronizzazione bidirezionale devono essere in grado di rilevare i conflitti. Un conflitto potrebbe verificarsi se gli stessi dati sono stati modificati in entrambi gli archivi dati nel periodo di tempo che intercorre tra le sincronizzazioni. Grazie alla possibilità di rilevare conflitti, un'applicazione può garantire che le modifiche non vadano perse.
Funzionamento del rilevamento delle modifiche
Per configurare il rilevamento delle modifiche, è possibile utilizzare istruzioni DDL o SQL Server Management Studio. Per ulteriori informazioni, vedere Configurazione e gestione del rilevamento delle modifiche. Per rilevare le modifiche, è necessario innanzitutto abilitare il rilevamento delle modifiche per il database, quindi abilitarlo per le tabelle desiderate all'interno del database stesso. La definizione della tabella non deve essere modificata in alcun modo e non viene creato alcun trigger.
Una volta configurato il rilevamento delle modifiche per una tabella, qualsiasi istruzione DML che influisce sulle righe nella tabella causerà la registrazione delle informazioni sul rilevamento delle modifiche per ciascuna riga modificata. Per eseguire query per le righe che sono state modificate e per ottenere informazioni sulle modifiche, è possibile utilizzare le funzioni di rilevamento delle modifiche.
I valori della colonna chiave primaria costituiscono le sole informazioni presenti nella tabella con rilevamento registrate con le informazioni relative alle modifiche. Tali valori identificano le righe modificate. Per ottenere i dati più recenti per tali righe, un'applicazione può utilizzare i valori della colonna chiave primaria per creare un join tra la tabella di origine e quella con rilevamento.
È inoltre possibile utilizzare il rilevamento delle modifiche per ottenere informazioni sulla modifica apportata a ogni riga, ad esempio il tipo di operazione DML che ha provocato la modifica (inserimento, aggiornamento o eliminazione) o le colonne modificate come parte di un'operazione di aggiornamento.