Stellar Data Recovery Blog

Come recuperare i record di tabella eliminati in SQL Server

Se si è eseguito accidentalmente un comando DROP o DELETE su una tabella con una clausola WHERE errata e si sono persi dei record importanti, è possibile recuperarli utilizzando uno dei seguenti metodi.

Nota: Le operazioni di troncamento non possono essere recuperate. È possibile recuperare solo le operazioni di cancellazione.

Metodi per recuperare i record di tabella eliminati in SQL Server

Metodo 1 – Utilizzo del numero di sequenza del registro (LSN)

Nota: Questo metodo non funziona se il backup del registro transazioni è danneggiato o mancante. In tal caso, passare al metodo successivo.

Ogni record del registro delle transazioni di SQL Server è identificato in modo univoco da un numero di sequenza del registro (LSN). È possibile costruire sequenze di ripristino utilizzando l’LSN di un record di registro in cui si è verificato un evento significativo.

Facciamo un esempio per capire come utilizzare il metodo del numero di sequenza del registro per recuperare i record della tabella eliminati. In questo esempio creeremo un database e una tabella, inseriremo righe nella tabella, cancelleremo alcune righe, otterremo informazioni sui dati cancellati e recupereremo i dati.

Passi per recuperare i record eliminati da una tabella SQL con LSN

In questa sezione, creeremo un database di prova e una tabella su cui eseguiremo un’operazione di cancellazione. Quindi, troveremo i dati cancellati e li recupereremo utilizzando LSN.

Passo 1: creare un database

Eseguire la seguente query per creare un database denominato ‘RecoverDeletedRecords’ e una tabella denominata ‘Employee’:

UTILIZZARE [master]; 
VAI  

CREARE DATABASE RecoverDeletedRecords;

VAI

UTILIZZARE RecoverDeletedRecords;  

VAI

CREARE TABELLA [Dipendente] (

[Sr.No] IDENTITÀ INT,

[Data] DATETIME DEFAULT GETDATE (),

[Città] CHAR (25) DEFAULT 'Città1')
Figura 1 – Creare un database in SSMS

Passo 2: Inserire i dati nella tabella

Abbiamo creato una tabella denominata ‘RecoverDeletedRecords’ e una tabella ‘Employee’ con tre colonne. Ora inseriamo le righe nella tabella eseguendo la seguente query:

UTILIZZARE RecoverDeletedRecords;
VAI

INSERT INTO Employee DEFAULT VALUES;

GO 100
Figura 2 – Inserire i record nella nuova tabella

Passo 3: Eliminare le righe dalla tabella

Ora cancelliamo alcune righe eseguendo quanto segue:
UTILIZZARE RecoverDeletedRecords

Vai

CANCELLARE i dipendenti

DOVE [Sr.No] < 10

VAI

Selezionare * da Dipendenti
Figura 3 – Cancellare le righe della tabella

Come mostrato nell’immagine precedente, tutte le righe con Sr.No inferiore a 10 sono state eliminate dalla tabella ‘Employee’.

Passo 4: Ottenere informazioni sulle righe eliminate

Successivamente, si otterranno informazioni sulle righe eliminate cercando nel registro delle transazioni:

UTILIZZARE RecoverDeletedRecords
VAI

SELEZIONARE

 [LSN corrente],  

 [ID transazione],

     Operazione,

     Contesto,

     Nome dell'unità di allocazione

DA

    fn_dblog(NULL, NULL)

DOVE

    Operazione = 'LOP_DELETE_ROWS'
Figura 4 – ID transazione delle righe eliminate

Dopo aver ottenuto gli ID delle transazioni delle righe cancellate, dobbiamo trovare l’ora in cui le righe sono state cancellate.

Passo 5: Ottenere il numero di sequenza del registro del record di registro LOP_BEGIN_XACT

Per trovare l’ora esatta in cui le righe sono state eliminate, è necessario utilizzare l’ID della transazione per ottenere l’LSN del record di log LOP_BEGIN_XACT di una transazione:

UTILIZZARE RecoverDeletedRecords
VAI

SELEZIONARE

 [LSN corrente],  

 Operazione,

     [ID transazione],

     [Ora di inizio],

     [Nome della transazione],

     [Transaction SID]

DA

    fn_dblog(NULL, NULL)

DOVE

    [ID transazione] = '0000:0000020e'

E

    [Operazione] = 'LOP_BEGIN_XACT'
Figura 5 – LSN corrente del registro delle transazioni

Nella schermata precedente, è possibile vedere l’LSN corrente della transazione insieme a dettagli come l’ora ‘2021/03/15 19:36:59:337’ in cui è stata eseguita un’istruzione DELETE con LSN ‘00000014:0000001a:0001’ sotto l’ID transazione ‘0000:0000020e’. Per recuperare i dati della tabella del database SQL cancellata, procedere con il passo successivo.

Passo 6: Recupero dei record eliminati in SQL Server

Per recuperare i record della tabella SQL cancellati, è necessario convertire i valori LSN da esadecimali a decimali.  Per farlo, aggiungere ‘0x’ prima del numero di sequenza del registro, come mostrato nel codice seguente:

-Ripristino del backup completo con assenza di ripristino.
RESTORE DATABASE RecoverDeletedRecords_COPY

    FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.STELLAR\MSSQL\Backup\RecoverDeletedRecords.bak'

CON

    SPOSTARE 'RecoverDeletedRecords' in 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.STELLAR\MSSQL\Backup\RecoverDeletedRecords.mdf',

    SPOSTARE 'RecoverDeletedRecords_log' in 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.STELLAR\MSSQL\Backup\RecoverDeletedRecords.ldf',

    SOSTITUIRE, NON RECUPERARE;

    VAI

-Ripristinare il backup del registro con l'opzione STOPBEFOREMARK per ripristinare l'esatto LSN.

   RESTORE LOG RecoverDeletedRecords_COPY

DA

    DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.STELLAR\MSSQL\Backup\RecoverDeletedRecords_tlogbackup.trn'

CON

    STOPBEFOREMARK = 'lsn:0x00000014:0000001a:0001'
Figura 6 – Recupero dei record eliminati

Ora che i dati sono stati ripristinati, verificare se i record eliminati sono stati recuperati. A tale scopo, eseguire la seguente query per visualizzare le prime dieci righe della tabella che sono state eliminate (al punto 3).

UTILIZZARE RecoverDeletedRecords_COPY
VAI

SELEZIONARE * da Dipendenti

Se i record delle tabelle eliminate non sono stati recuperati, provare a utilizzare uno strumento di recupero SQL come Stellar Repair for MS SQL per recuperare i dati eliminati.

Nota: nel codice sopra riportato, sostituire il percorso ‘C:\Program Files\Microsoft SQL Server\MSSQL10_50.STELLAR\MSSQL\Backup\RecoverDeletedRecords.bak’ con il percorso in cui si trova il file di backup. Inoltre, sostituire il percorso dei file .mdf e .ldf con il percorso in cui sono stati salvati i file del database.

Metodo 2 – Utilizzo di un software di recupero SQL

Il software di recupero SQL di Stellar® può aiutare a recuperare tutti i record eliminati in un database SQL Server in pochi semplici passaggi. Oltre ai dati eliminati, il software è in grado di recuperare anche tutti gli altri oggetti come viste, trigger, stored procedure e così via, mantenendo l’integrità dei dati.

Prima di procedere

Prima di utilizzare il software per ripristinare i record, accertarsi che il sistema soddisfi i seguenti prerequisiti:

Passi per recuperare i record di tabella eliminati con Stellar Repair for MS SQL

Scaricate la versione demo del software di recupero SQL per recuperare le righe eliminate o i database danneggiati:

Figura 7 – Interfaccia principale di Stellar Repair for MS SQL
Figura 8 – Selezionare il file MDF del database nel software

Nota: se non sapete dove si trova il vostro database, potete trovarlo in SSMS nelle proprietà del database, nella pagina del file di dati (fate riferimento all’immagine sottostante).

Figura 9 – Verifica della posizione del database in SSMS
Figura 10 – Opzione Includi record cancellati
Figura 11 – Selezione della modalità di scansione
Figura 12 – Casella di messaggio Riparazione completata
Figura 13 – Rapporto sui registri
Figura 14 – Salvataggio del database
Figura 15 – Opzioni di salvataggio
Figura 16 – Scegliere il tipo di autenticazione

I record della tabella recuperati e altri dati selezionati verranno salvati nel file MDF riparato.

Guardate il processo completo di funzionamento del software SQL Recovery:

Conclusione

In questo articolo abbiamo appreso come recuperare i record cancellati in SQL Server. Queste soluzioni possono funzionare con qualsiasi versione di SQL Server in Windows. Se avete a disposizione il backup completo del database, potete provare a recuperare i record eliminati utilizzando il registro delle transazioni con il Log Sequence Number (LSN). Se il backup è danneggiato, utilizzare Stellar Repair for MS SQL per recuperare i dati eliminati in SQL Server o in altri formati come file CSV (Comma Separated Value), HTML o XLS.

Il software di riparazione del database SQL non solo aiuta a recuperare le righe cancellate, ma ripristina anche il database SQL danneggiato da attacchi di virus, guasti hardware o altri motivi.

Exit mobile version