Comment récupérer les données du fichier LDF?

9

Nous utilisons SQL 2005 Express Edition. Nous voulons lire les données du fichier LDF afin de restaurer certains enregistrements supprimés.

Nous avons essayé d'utiliser une version d'essai d'ApexSQL qui nous a beaucoup aidés. Au lieu d'utiliser un logiciel tiers, nous essayons de comprendre comment lire le fichier journal nous-mêmes.

Comment lire et récupérer des données à partir du fichier LDF?

goofyui
la source
La base de données utilise-t-elle le modèle de récupération complète ou simplement?
MartinC
Oui, nous utilisons le modèle de récupération complète
goofyui
Nous pouvons récupérer des données en utilisant la version d'essai d'ApexSQL. La version d'essai permet uniquement de visualiser les données. Nous n'avons pas de budget pour acheter une édition complète et essayons donc de le découvrir par nous-mêmes pour récupérer les données du fichier
.ldf

Réponses:

11

Vous aurez besoin d'une sauvegarde complète précédente et de toutes les sauvegardes de journaux effectuées depuis la dernière sauvegarde complète

1) Prenez la queue de la sauvegarde du journal

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

2) Rechercher la transaction pour les enregistrements supprimés (l'opération sera LOP_DELETE_ROWS pour DELETEs et LOP_SET_BITS & LOP_MODIFY_ROW pour une TRUNCATE TABLE)

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

3) Restaurer les sauvegardes complètes précédentes et les journaux plus la queue dans une nouvelle base de données AVEC NORECOVERY et STOPAT = 'Juste avant le début de la transaction'

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

Ce billet de blog traite plus en détail de la recherche de l'heure d'arrêt avec fn_dblog. Ce billet de blog tente de récupérer des données directement à partir du journal, mais cela peut prendre beaucoup de temps par rapport à une récupération ponctuelle.

De plus, cet article de blog de Robert L Davis a un exemple sur la combinaison de STOP et STANDBY pour vous permettre d'interroger l'état des bases de données à différents moments.

MartinC
la source
Et Truncate Records? Je suppose que certains d'entre eux sont également tronqués .. !!
goofyui
1) Comment prendre .trn à partir de mon ancienne base de données. J'ai obtenu .ldf, .mdf !! Je n'ai pas de fichier journal des transactions.
goofyui
L'idée ici est de récupérer la base de données au point avant la perte des données et vous pourrez ensuite faire une copie des données perdues. La commande BACKUP LOG est ce qui crée le fichier trn à partir de la partie active du journal des transactions (ldf)
MartinC
Je trouve difficile de comprendre complètement votre point. Pouvez-vous s'il vous plaît partager la syntaxe pour continuer .. comme le garder comme OldDB où l'accident s'est produit et NewDB dans lequel le fichier journal OldDB va être restauré ..
goofyui
1
J'ai ajouté plus de détails et des liens vers des blogs pour trouver le moment de récupérer et un autre blog sur l'utilisation de la sortie de fn_dblog pour régénérer les lignes supprimées.
MartinC