web-dev-qa-db-fra.com

Comment récupérer des enregistrements supprimés?

J'ai supprimé par erreur environ 2 000 000 d'enregistrements d'une table SQL Server 2008 distante. Le serveur ne m'accorde pas l'accès aux fichiers de sauvegarde côté serveur.

Existe-t-il un moyen de récupérer ces enregistrements?

49
user755

Votre base de données est-elle en mode de récupération complète?

  • Si oui, effectuez-vous des sauvegardes du journal des transactions?

    • Si oui, avez-vous un utilitaire de sauvegarde comme Quest LiteSpeed, Red Gate SQL Backup ou Idera SQLSafe?
      • Si oui, ces utilitaires peuvent restaurer des objets des fichiers de sauvegarde (y compris les journaux complets et les journaux de transactions) - mais expliquer comment les utiliser dépasse le cadre de ce que je peux faire ici. Contactez le vendeur pour obtenir des instructions.
      • Si non, restaurez la sauvegarde complète et les journaux de transactions en tant que base de données avec un nom différent. (N'écrasez pas la base de données existante.) Vous pourrez obtenir une copie à la seconde de l'objet avant la suppression, mais vous devrez utiliser la partie stopat de la commande restore pour spécifier quand arrêter de restaurer les commandes. Vous devez vous arrêter avant la suppression.
    • Si non, allez récupérer une copie d'un utilitaire de lecture de journal comme Quest LiteSpeed ​​ou Apex SQL Log. Ces utilitaires peuvent se connecter au serveur de base de données, examiner le fichier journal et vous aider à annuler des transactions. Je ne sais pas si les versions de démonstration fonctionneront, mais celles payantes le seront certainement.
  • Si non (pas en mode de récupération complète), restaurez la dernière sauvegarde complète en tant que base de données avec un nom différent. (N'écrasez pas la base de données que vous avez déjà.) À partir de là, vous pourrez restaurer tous les enregistrements en ligne au moment de la sauvegarde, mais vous perdrez toutes les modifications depuis.

118
Brent Ozar

SQL Server conserve des journaux pour chaque enregistrement supprimé. Vous pouvez interroger ces journaux via le fn_dblog Fonction SQL Server.

SELECT [RowLog Contents 0] 
FROM   sys.fn_dblog(NULL, NULL) 
WHERE  
       AllocUnitName = 'dbo.TableName'        
   AND Context IN ( 'LCX_MARK_AS_GHOST', 'LCX_HEAP' )        
   AND Operation in ( 'LOP_DELETE_ROWS' )   
;

Mais ce journal est au format Hex et vous devez convertir ce format Hex en vos données réelles.

L'article ci-dessous vous aidera à récupérer les enregistrements supprimés de la manière définie ci-dessus:

http://raresql.com/2011/10/22/how-to-recover-deleted-data-from-sql-sever/

30
user1059637

Malheureusement, nous ne pourrons pas vous aider sans beaucoup plus d'informations. Mais d'après votre question, je constate que vous avez supprimé ce qui semble être 2 millions d'enregistrements de votre base de données. Il est très probable que vous ne puissiez pas récupérer ces informations, sauf si vous avez une connexion complète à votre base de données et que vous achetez des outils très spécifiques.

Si vous pouvez décrire plus en détail ce que vous pensez avoir fait et pourquoi vous pensez que vous ne pouvez pas récupérer les enregistrements et pouvez décrire l'organisation de votre base de données, alors nous pouvons peut-être vous aider un peu plus.

Quelques conseils généraux: si vous pensez avoir supprimé 2 millions d'enregistrements, vous êtes probablement un peu flippé en ce moment. Vous devriez donc faire une pause de cinq minutes, vous calmer et revoir le problème. De plus, vous devriez dire à votre patron tout de suite si c'est raisonnable (ne réveillez pas quelqu'un à 2h du matin pour le lui dire) et que vous travaillez sur une solution. Mieux vaut admettre ce qui s'est passé que d'essayer frénétiquement de récupérer et potentiellement d'aggraver les choses et de cacher les détails. Savoir que votre patron peut vous aider d'une manière ou d'une autre vous aide à résoudre le problème. Comme je l'ai dit, juste quelques conseils généraux.

22
jcolebrand