Comment récupérer des données SQL Server suite à des mises à jour accidentelles lorsque vous ne disposez pas de sauvegardes

Oups! Dites-vous lorsque vous avez exécuté une requête UPDATE sans condition WHERE sur une base de données et écrasé un tas de lignes avec des données incorrectes. Comment pouvez-vous ramener les bonnes valeurs?

Si vous aviez une sauvegarde préalablement créée qui contient les valeurs initiales de la table, vous pourriez facilement récupérer les données. Les solutions les plus courantes sont les suivantes:

  • Restaurez la sauvegarde de la base de données et utilisez-la à la place de la base de données originale
  • Dans les cas où d’autres changements sont survenus après la mise à jour et où vous ne pouvez pas vous permettre d’avoir la base de données hors connexion:
    1. Restaurez une sauvegarde sur un serveur de test
    2. Utilisez l’assistant d’export des données de SQL Server Management Studio
    3. Importez les données exportées dans la base de données initiale

Mais, si vous n’avez pas de sauvegardes complètes de la base de données, les UPDATE peuvent toujours être restaurés en utilisant les informations des transactions enregistrées dans le journal des transactions de la base de données.

Le journal des transactions conserve les informations sur les transactions effectuées dans votre base de données. S’il n’a pas été réduit ou tronqué, vous pouvez utiliser ApexSQL Log

ApexSQL Log est un outil qui peut analyser le journal des transactions de la base de données et restaurer les UPDATE accidentels. Donc au lieu d’avoir toutes les données mises à jour dans la table, vous pouvez restaurer l’instruction UPDATE et mettre à jour uniquement les données qui répondent à certains critères.

Pour récupérer les UPDATE accidentels à l’aide d’ ApexSQL Log:

  1. DémarrezApexSQL Log
  2. Connectez-vous à la base de données

  3. Utilisez la section Time range dans l’étape Filter setup pour affiner l’espace de temps correspondant à l’instruction UPDATE qui a été exécutée

  4. Sélectionnez Update row à l’étape Filter setup dans la section, Operations tab

  5. Sélectionnez-la ou les tables dont les données ont été mises à jour à l’étape Filter setup dans la section Tables

  6. Si possible, utilisez les filtres Users et Applications pour affiner les résultats
  7. Cliquez sur Open
  8. Pour créer un script d’annulation:
    1. Cliquez sur Create undo script dans l’onglet Home dans le groupe Actions pour créer un script d’annulation pour toutes les transactions visibles dans la grille

    2. Vérifier les transactions dont vous voulez créer le script d’annulation, faites un clic droit dans la grille principale et cliquez Create undo script dans le menu contextuel pour créer le script d’annulation uniquement pour les transactions sélectionnées
  9. Exécutez le script dans la base de données

Une fois le script d’annulation exécuté, les UPDATEs sont annulés et les données d’origine sont de retour dans la base de données comme si elle n’avait pas été endommagée.

Si vous avez sans le vouloir mis à jour des enregistrements d’une base de données et que vous n’avez pas de sauvegarde complète, il y a une chance de les récupérer à l’aide d’ApexSQL Log

Article traduit par Philippe Geiger
Consultant certifié MCSE Data Platform et Business Intelligence et formateur certifié MCT.
Blog : http://blog.pgeiger.net
Twitter : @pgeiger

October 9, 2014