Comment récupérer des données SQL Server après un UPDATE / DELETE accidentel

Le pire cauchemar d’un DBA SQL est la perte de données en raison d’une erreur de leur part. Il n’est pas rare d’exécuter ou d’oublier une clause WHERE lors de l’exécution d’un DELETE ou d’un UPDATE, ce qui compromet potentiellement des millions de lignes de données.

Alors, quelles sont les options disponibles dans SQL Server pour récupérer les données?

Une solution serait d’utiliser une sauvegarde qui a été faite juste avant la catastrophe.

Voici une liste de solutions communes permettant de récupérer des données perdues d’une base de données à l’aide d’une sauvegarde:

  1. Restaurez la sauvegarde de la base de données et l’utiliser à la place de la base de données originale
  2. Autrement:
    • Restaurez la sauvegarde sur le même serveur que la base de données d’origine en utilisant un nom de base de données différent
    • Repérez les lignes pertinentes dans la base de données récupérée
    • Mettre à jour les lignes modifiées en utilisant les lignes d’origine de la base de données récupérée

Malheureusement, le scénario de reprise de manière “propre et net” est rare et ne permet pas une telle solution simple.

Généralement:

  • Les erreurs ne sont pas détectées suffisamment tôt
  • Il y a eu des changements de données entre la création de la dernière sauvegarde de base de données et l’exécution de la requête ce qui complique considérablement la reprise
  • Afflux de nouvelles données
  • Les sauvegardes de bases de données n’ont pas été assez régulières ou sont absentes


Sortez les rames et en avant

Lire les informations des journaux de transactions en ligne où provenant d’un backup ou encore d’une base de données détachée, afin de récupérer les données d’une base de données, est une des options pour récupérer les données.
ApexSQL Log est un outil de récupération pour SQL Server capable de lire les données du journal de transactions et d’en récupérer des données perdues en annulant les transactions.

Pour récupérer les données de base de données perdues en raison d’opérations UPDATE ou DELETE accidentelles en utilisant ApexSQL Log:

    1. Lancez ApexSQL Log
    2. Connectez-vous à la base de données
    3. Dans l’étape Select SQL logs to analyze ajoutez les sauvegardes des journaux de transactions et les journaux de transactions individuels que vous souhaitez lire. Notez qu’ils doivent former une chaîne complète afin de fournir un audit concluant. Ajouter une sauvegarde de base de données peut aider à augmenter la performance et la qualité des données de la phase d’audit

    4. Utilisez les options Filter setup pour affiner le résultat en utilisant la date, le type d’opérations, le nom de la table, l’utilisateur et d’autres options de filtrage

  • Après avoir défini toutes les options, cliquez sur Open

Vos transactions seront inscrites dans la grille principale de l’application. Vous pouvez toujours utiliser le filtre dans le volet gauche pour éliminer les opérations inutiles.

Pour effectuer une récupération des données, sélectionnez les transactions que vous souhaitez restaurer et cliquez sur Create undo script dans l’onglet Actions.

Pour exécuter le script à partir de l’éditeur de script, cliquez sur le bouton Execute ou appuyez sur la touche F5 et les données perdues seront récupérées dans la base de données.

N’oubliez pas, si vous avez involontairement exécuté une commande DELETE/UPDATE, vous pouvez toujours récupérer les données perdues, et ce dans de nombreux cas avec ApexSQL Log

Article traduit par Romain Casteres
Consultant en informatique décisionnelle et en Big Data chez Dcube. Il est MVP SQL Server, MCSE Data Platform et Business Intelligence.
Blog : http://pulsweb.fr
Twitter : @PulsWeb

October 9, 2014