Come recuperare dati SQL Server in seguito ad una UPDATE accidentale senza avere un backup disponibile

Immaginiamo di avere eseguito uno statement di UPDATE su di una tabella omettendo la necessaria clausola di WHERE. L’operazione ha erroneamente sovrascritto e aggiornato potenzialmente tantissime righe. Come facciamo a ritornare alla situazione precedente l’aggiornamento non voluto?

Avendo un backup contenente i valori originali della tabella è possibile ripristinare la situazione. Le soluzioni più comuni sono:

  • Fare un ripristino del backup sul database esistente;
  • Nel caso in cui altri cambiamenti si sono verificati dopo l’operazione di UPDATE oppure se non è possibile mettere il database offline:
    1. Ripristinare un backup su un server di test
    2. Usare il wizard SQL Server Management Studio Export Data per esportare i dati
    3. Importare i dati risultanti dal passo precedente nel database su cui è stato fatto UPDATE

Ma nel caso in cui un full backup non sia presente le UPDATE possono essere annullate usando il log delle transazioni. Questo file contiene le informazioni relative alle transazioni effettuate sui nostri database. Se non è stato troncato è possibile usare ApexSQL Log .

ApexSQL Log è un tool che effettua analisi sul log delle transazioni ed annulla questo tipo di operazioni accidentali. Con esso è possibile annullare le operazioni di UPDATE e poi aggiornare nuovamente con il criterio particolare omesso precedentemente.

Ecco come procedere:

  1. Eseguire ApexSQL Log
  2. Connettersi al database
  3. Usare la sezione Time Range in Filter setup per determinare la fascia di tempo su cui ricercare le operazioni accidentali
  4. Selezionare Update row in Filter setup, tab Operations
  5. Selezionare una o più tabelle (quelle su cui è stata effettuata l’operazione di UPDATE) in Filter setup, filtro Tables
  6. Se possibile, utilizzare i filtri Users e Applications per affinare ulteriormente la ricerca
  7. Premere Open
  8. Per creare uno script di undo:
    • Premere Create undo script sul tab Home alla voce Actions (lo script verrà creato per tutte le transazioni mostrate nella griglia)
    • Spuntare le transazioni per le quali creare lo script di undo, premere il tasto destro sulla griglia principale e premere Create undo script nel menu contestuale (lo script verrà creato solo per le transazioni selezionate)
  9. Eseguire lo script sul database desiderato

Al termine dell’esecuzione dello script avremo nuovamente i dati originari, alla situazione appena precedente l’UPDATE accidentale.

Risulta molto conveniente gestire questi casi tramite ApexSQL Log .

Traduttore: Alessandro Alpi

October 1, 2014