Condividi tramite


Rilevamento delle modifiche e ripristino dei dati

Le applicazioni che richiedono la sincronizzazione è necessario considerare il caso in cui un database con il rilevamento delle modifiche attivato viene ripristinato a una versione precedente dei dati. Questa situazione può verificarsi dopo il ripristino di un database da un backup, quando si verifica un failover a un database mirror asincrono o quando si verifica un errore durante l'utilizzo del log shipping. Nel seguente scenario viene illustrato il problema:

  1. Nella tabella T1 è attivato il rilevamento delle modifiche e la versione minima valida della tabella è 50.

  2. Un'applicazione client sincronizza i dati alla versione 100 e ottiene informazioni su tutte le modifiche tra le versioni 50 e 100.

  3. Le modifiche aggiuntive vengono apportate alla tabella T1 dopo la versione 100.

  4. Alla versione 120 si verifica un errore e l'amministratore del database ripristina il database con perdita di dati. Dopo l'operazione di ripristino, la tabella contiene dati fino alla versione 70 e la versione minima sincronizzata è ancora 50.

    Ciò significa che l'archivio dati sincronizzato ha dati che non esistono più nell'archivio dati primario.

  5. T1 viene aggiornato molte volte. La versione corrente viene portata a 130.

  6. L'applicazione client esegue nuovamente la sincronizzazione e fornisce l'ultima versione sincronizzata: 100. Il client convalida il numero, in quanto 100 è maggiore di 50.

    Il client ottiene le modifiche tra la versione 100 e la 130. A questo punto, il client non riconosce che le modifiche tra 70 e 100 non sono come le modifiche precedenti. I dati nel client e nel server non sono sincronizzati.

Se il database è stato recuperato in un punto successivo alla versione 100, non si verificheranno problemi con la sincronizzazione. Il client e il server sincronizzeranno correttamente i dati durante il successivo intervallo di sincronizzazione.

Il rilevamento delle modifiche non fornisce il supporto per il recupero dalla perdita di dati. Tuttavia, sono disponibili due opzioni per il rilevamento di questi tipi di problemi di sincronizzazione:

  • Archiviare un ID della versione del database nel server e aggiornare tale valore ogni volta che un database viene ripristinato o perde dati. Ciascuna applicazione client archivia l'ID e ciascun client convalida tale ID quando viene eseguita la sincronizzazione dei dati. Se si verifica la perdita di dati, gli ID non corrisponderanno e i client verranno reinizializzati. Se la perdita di dati non si sovrappone all'ultimo limite di date sincronizzato, il client potrebbe essere reinizializzato inutilmente.

  • Quando un client esegue una query per le modifiche, registrare il numero dell'ultima versione sincronizzata per ciascun client nel server. Se si verifica un problema con i dati, i numeri delle ultime versioni sincronizzate non corrispondono. Ciò indica che è necessario eseguire la reinizializzazione.