2009-09-03 8 views
1

Je me demandais comment vous pouvez récupérer des données à partir de votre fichier journal. J'utilise sql 2005 (sauvegarde complète).SQL Server LOG récupération de données

Le problème est qu'un service a effacé mes données hier soir (ce qu'il ne devrait pas avoir). et maintenant je veux récupérer les lignes qui ont été supprimés avant.

quelqu'un peut-il me dire comment je peux faire cela?

Répondre

3

Tant que vous disposez d'une sauvegarde de votre base de données antérieure à la suppression, puis de toutes les sauvegardes du journal des transactions réalisées depuis la dernière sauvegarde de la base de données, vous pourrez restaurer à un moment donné.

La première chose à faire est de faire une sauvegarde du journal des transactions.

Ensuite, vous restaurez votre dernière sauvegarde de base de données et toutes les sauvegardes du journal des transactions depuis lors jusqu'à la date juste avant la suppression.

Voir ce MSDN Article sur comment faire.

Je vous suggère de laisser votre base de données existante en place telle qu'elle est et de restaurer les sauvegardes dans une nouvelle base de données. Ensuite, vous pouvez écrire des scripts pour transférer les données requises dans votre base de données en direct.

1

Vos données ne peuvent être récupérées que dans les cas suivants: 1) la base de données utilise le modèle de récupération complète; 2) vous avez une sauvegarde complète que vous effectuez avant la suppression accidentelle; 3) vous n'avez PAS encore récupéré ou sauvegardé cette base de données.

Si cela est correct, vous devez: 1) effectuer une sauvegarde du journal des transactions; 2) restaurer la base de données à partir de la sauvegarde complète AVEC l'option NORECOVERY; 3) restaurer le journal des transactions en utilisant l'option STOPAT.

2

Tout d'abord, la base de données doit être dans le modèle de récupération complète et vous devez avoir une chaîne complète de sauvegardes du journal des transactions - une série d'enregistrements de journal ayant une séquence ininterrompue de numéros de séquence de journal (LSN)

Le La chaîne de sauvegarde du journal est démarrée lorsqu'une sauvegarde complète de la base de données est effectuée ou que le modèle de récupération passe de SIMPLE à FULL et qu'une sauvegarde complète est effectuée. Après cela, les sauvegardes du journal des transactions sont créées régulièrement.La chaîne de sauvegarde du journal peut être brisé que de deux manières:

  • Écrasement le jeu de sauvegarde
  • Commutation de PLEIN aux modèles de récupération simple ou VRAC LOGGED

Briser la chaîne de sauvegarde du journal peut conduire à manquer informations transaction

Vous pouvez restaurer à un moment à l'aide:

  • SQL Server Management Studio, comme indiqué dans le lien Robin fourni
  • En utilisant T-SQL et l'option STOPAT

Syntaxe

RESTORE LOG database_name 
FROM <backup_device> 
WITH STOPAT = time, RECOVERY… 
  • Utilisez un outil tiers, tels que ApexSQL Log qui peut non seulement restaurer à un moment précis, mais annuler de manière sélective uniquement les transductions que vous avez sélectionnées

Vous pouvez e les étapes pour toutes les options énumérées ici: Restore a database to a point in time

Disclaimer: Je travaille pour ApexSQL comme ingénieur de soutien

0

Pour restaurer les fichiers journaux de transaction à un point à temps votre base de données doit fonctionner sous le modèle de récupération complète . Donc, d'abord, vous devez restaurer la dernière sauvegarde de base de données complète:

RESTORE DATABASE *database* FROM DISK = 'D:/Full.bak' WITH NORECOVERY, REPLACE 

L'étape suivante consiste à restaurer la dernière sauvegarde de base de données différentielle:

RESTORE DATABASE *database* FROM DISK = 'D:/Diff.bak' WITH NORECOVERY 

Et puis restaurer toutes les sauvegardes du journal des transactions qui ont fait depuis la dernière sauvegarde différentielle dans l'ordre correct

RESTORE LOG *database* FROM DISK = 'D:/log1.bak' WITH NORECOVERY 
RESTORE LOG *database* FROM DISK = 'D:/log2.bak' WITH NORECOVERY 
RESTORE LOG *database* FROM DISK = 'D:/log3.bak' WITH NORECOVER 

la dernière sauvegarde du journal des transactions qui doit être restauré est la sauvegarde du journal des transactions qui ont été faites après t L'échec s'est produit avec l'option stopat. Après l'option stopat, vous devez définir l'heure à laquelle vous souhaitez restaurer votre base de données.

RESTORE LOG *database* FROM DISK = 'D:/log4.bak' WITH STOPAT = '2015-11-26 16:22:40.000', RECOVERY 
Questions connexes