Come posso recuperare i dati dal file LDF?


9

Stiamo usando SQL 2005 Express Edition. Vogliamo leggere i dati dal file LDF per ripristinare alcuni record eliminati.

Abbiamo provato a utilizzare una versione di prova di ApexSQL che ci ha aiutato molto. Invece di cercare software di terze parti, stiamo cercando di capire come leggere noi stessi il file di registro.

Come possiamo leggere e recuperare i dati dal file LDF?


Il database utilizza il modello di recupero completo o è semplicemente semplice?
MartinC,

Sì, utilizziamo il modello di recupero completo
goofyui il

Siamo in grado di recuperare i dati utilizzando la versione di prova di ApexSQL. La versione di prova consente solo di visualizzare i dati. Non abbiamo budget per acquistare una Full Edition e quindi
proviamo a capirci da soli

Risposte:


11

Sarà necessario un backup completo precedente e tutti i backup dei log eseguiti dall'ultimo backup completo

1) Prendi una coda del backup del registro

BACKUP LOG OldDB TO DISK='C:\OldDB_Tail.trn' WITH NO_TRUNCATE

2) Trova transazione per record eliminati (l'operazione sarà LOP_DELETE_ROWS per DELETEs e LOP_SET_BITS e LOP_MODIFY_ROW per una TABELLA TRUNCATE)

SELECT * FROM fn_dblog(NULL,NULL) WHERE AllocUnitName = 'dbo.YourTableName'

3) Ripristina i backup precedenti completi di dorso e registro più la coda in un nuovo database WITH NORECOVERY e STOPAT = "Poco prima dell'inizio della transazione"

RESTORE DATABASE NewDB
FROM DISK='C:\Previous_Full_Backup_Of_OldDB.bak'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM',
MOVE 'OldDB' TO 'C:\DATABASES\NewDB.mdf',
MOVE 'OldDB_Log' TO 'C:\DATABASES\NewDB.ldf'

RESTORE LOG NewDB
FROM DISK='C:\Previous_TranLog_Backup_Of_OldDB.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

RESTORE LOG NewDB
FROM DISK='C:\OldDB_Tail.trn'
WITH NORECOVERY,
STOPAT='2012/01/11 11:35AM'

-- This recovers the restored database and allows access
RESTORE DATABASE NewDB WITH RECOVERY

Questo post del blog tratta in modo più dettagliato come trovare il tempo di STOPAT usando fn_dblog. Questo post sul blog ha il compito di recuperare i dati direttamente dal registro, ma ciò potrebbe richiedere molto tempo rispetto a un recupero temporizzato.

Anche questo blog post di Robert L Davis ha un esempio sulla combinazione STOP o STANDBY, per consentire all'utente di interrogare lo stato dei database in diversi punti nel tempo.


Che dire di Truncate Records? Presumo che alcuni di loro siano troncati anche .. !!
goofyui,

1) Come prendere .trn dal mio vecchio database. Ho .ldf, .mdf !! Non ho un file di registro delle transazioni.
goofyui,

L'idea qui è quella di ripristinare il database fino al punto in cui i dati sono stati persi e quindi si sarà in grado di fare una copia dei dati persi. Il comando BACKUP LOG è ciò che crea il file trn dalla parte attiva del registro delle transazioni (ldf)
MartinC

Trovo difficile comprendere completamente il tuo punto. Puoi per favore condividere la sintassi per procedere .. come tenerlo come OldDB dove si è verificato un incidente e NewDB in cui verrà ripristinato il file di registro OldDB ..
goofyui,

1
Ho aggiunto ulteriori dettagli e collegamenti ai blog per trovare il momento in cui ripristinare e un altro blog sull'utilizzo dell'output di fn_dblog per rigenerare le righe eliminate.
MartinC,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.