Come recuperare i record di tabella eliminati in SQL Server

Summary: Questo blog spiega come recuperare i record cancellati di una tabella in SQL Server. Illustra un esempio di recupero dei record eliminati da una tabella SQL utilizzando un Log Sequence Number (LSN). Esplora inoltre il software Stellar Repair for MS SQL per recuperare rapidamente i record eliminati senza alcuna perdita di dati.

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.

Related Post

Exit mobile version