Recuperare i dati di una tabella eliminata senza avere un backup

Nel caso in cui sia stato accidentalmente eseguito uno statement di DROP su di una tabella, se abbiamo un full database backup effettuato dopo la DROP senza che nessun cambiamento si sia verificato, possiamo semplicemente ripristinare i dati sovrascrivendo il database originario con il backup. Nel caso in cui questo non fosse possibile, sia perché gli oggetti sul database hanno subito cambiamenti, sia perché non abbiamo un backup valido, c’è ancora una possibilità di riavere i dati persi.

Ogni operazione di DROP è scritta nel log delle transazioni. Questo file contiene le informazioni necessarie per eseguire il rollback della transazione e, nel caso in cui il modello di recupero del database sia completo, supporta il ripristino point-in-time (ovvero in un preciso istante). Di conseguenza, se non includiamo il comando di DROP in una transazione esplicita come nel comando che segue:

DROP TABLE Customer

SELECT *
FROM Customer

Otterremo un messaggio Msg 208, Level 16, State 1 che indica che la tabella Customer è stata eliminata. Mentre un comando incapsulato in una transazione come il seguente:

BEGIN TRAN 
DROP TABLE Customer

ROLLBACK 
SELECT *
FROM Customer

Ritornerà l’elenco delle righe appartenenti alla tabella Customer.

Se il log delle transazioni che conteneva l’operazione di DROP non è più attivo (ad esempio se il comando di DROP è stato consolidato con una COMMIT) la tabella non può essere recuperata. Ma ciò significa che proprio non è possibile riavere quei dati?

Fortunatamente no. ApexSQL Recover entra in gioco.

ApexSQL Recover è un tool di ripristino per database SQL Server che recupera dati cancellati, troncati, danneggiati o corrotti. Ripristina oggetti e dati persi a causa di operazioni di cancellazione non volute ed è in grado di recuperare BLOB sia cancellati che online, rendendolo particolarmente utile per i le attività di ripristino di SharePoint.

Ecco come procedere:

  1. Eseguire ApexSQL Recover
  2. Selezionare l’opzione Recover lost data due to a DROP TABLE operation
  3. In Select the database to recover:
    • Specificare l’istanza SQL sulla quale vi è il database da ripristinare direttamente dalla drop down Server
    • Specificare il tipo di autenticazione per l’istanza (e un set di credenziali nel cado di autenticazione SQL)
    • Premere Next
  4. In Are additional data sources available selezionare No additional transaction logs are available

  5. In Select a recovery action selezionare Save the recovery script to a file e specificare il percorso in cui lo script che recupererà i dati verrà salvato

  6. Premere Recover

Questo è tutto avremo i nostri dati nuovamente disponibili senza nemmeno la necessità di un ripristino di backup.

Traduttore: Alessandro Alpi

October 1, 2014