Si vous demandiez à un administrateur de base de données (DBA) quelle est la fonctionnalité qu’il aimerait le plus voir apparaître dans la fonctionnalité de récupération de SQL Server, il répondrait sans aucun doute: “La possibilité de restaurer une seule table depuis une sauvegarde de la base de données”.
Il est bien sûr possible de récupérer les données d’une table donnée à partir de la sauvegarde de la base de données dans laquelle elle se trouve, mais vous ne pouvez réaliser cette opération sans restaurer l’entière de la sauvegarde.
Les administrateurs de base de données veulent cela pour plusieurs raisons:
Si vous vous demandez pourquoi Microsoft n’a pas implémenté cette fonctionnalité, il faut se dire que c’est probablement à cause d’un souci d’intégrité. Si seulement une table est restaurée de la sauvegarde et que celle-ci n’est pas au même point que la base de données actuelle, cela pourrait avoir pour effet de bord de compromettre l’intégrité référentielle au sein de cette base.
Bien sûr, cela est vrai également si une restauration complète de la base de données est réalisée et qu'on ne copie la structure et les données d'une table en particulier. Donc dans tous les cas, il est nécessaire de prendre certaines précautions lors de la récupération des données d’une seule table spécifique.
Ci-dessous se trouve un diagramme contenant les étapes à respecter pour réaliser la restauration d’une seule table à partir d’une sauvegarde:
La première étape consiste à restaurer la dernière sauvegarde complète de la base de données ainsi que celles de tous les fichiers journaux (transaction logs) depuis cette sauvegarde complète jusqu'au moment le plus récent où les données étaient encore correctes. Cette restauration se fera en utilisant un autre nom de base de données sur le même serveur.
Cette étape est la plus longue. Sa durée dépendra de la taille de la base de données a restauré.
S’il est seulement nécessaire de restaurer les données de quelques tables, il peut être plus rapide d’utiliser l’outil de restauration ApexSQL Recover pour extraire les données des tables souhaitées dans une nouvelle base de données plutôt que de restaurer l’entièreté des tables. La procédure sera décrite plus loin dans cet article.
La deuxième étape consiste à copier des données hors de la sauvegarde dans la base de données ciblée.
En fonction du scénario envisagé, il est nécessaire d’utiliser une des techniques suivantes:
Si la table existe encore mais que certaines lignes ont été supprimées:
Utiliser les commandes USE, INSERT et SELECT pour réinsérer uniquement les lignes manquantes dans la table
USE AdventureWorks2012 GO SET IDENTITY_INSERT Production.Illustration ON INSERT INTO Production.Illustration (IllustrationID,Diagram,ModifiedDate) SELECT * FROM AdventureWorks2012_Restored.Production.Illustration SET IDENTITY_INSERT Production.Illustration OFF
Si la table a été complétement supprimée
Utiliser la commande SELECT INTO pour copier les lignes et la structure de la table dans la base de données
USE AdventureWorks2012 GO SELECT * INTO Production.Illustration FROM AdventureWorks2012_Restored.Production.Illustration
If some rows were damaged perhaps through a malicious update or some other unwanted event
The MERGE statement may be used to update damaged or insert data which is missing, or even delete rows which should not be there
USE AdventureWorks2012 GO SET IDENTITY_INSERT Production.Illustration ON MERGE Production.Illustration dest USING (SELECT * FROM AdventureWorks2012_Restored.Production.Illustration src) AS src ON dest.IllustrationID = src.IllustrationID WHEN MATCHED THEN UPDATE SET dest.Diagram = src.Diagram, dest.ModifiedDate = src.ModifiedDate WHEN NOT MATCHED THEN INSERT (IllustrationID,Diagram,ModifiedDate) VALUES (src.IllustrationID,src.Diagram,src.ModifiedDate); SET IDENTITY_INSERT Production.Illustration OFF
La quatrième étape consiste à résoudre les problèmes d’intégrité
Il s’agit d’un processus manuel inévitable et qu'on ne peut malheureusement éviter
La cinquième étape consiste à exécuter la commande DBCC CCHECKTABLE dans la table afin de vérifier l’intégrité des données
DBCC CHECKTABLE ("Production.Illustration")
Comme promis ci-dessus au niveau de la première étape, vous trouverez ci-dessous une explication de l’utilisation de l’outil de récupération ApexSQL Recover pour extraire les données souhaitées sans restaurer toute la base de données
L’outil de récupération ApexSQL Recover offre une multitude d’options pour récupérer une base de données
Plus vous aurez d’information sur l’évènement qui vient de se passer, plus il sera facile de récupérer votre base de données grâce à cet outil
Par exemple, si vous savez que la table a été supprimées via la commande DROP TABLE ou supprimée en utilisant SSMS, vous pouvez utiliser l’option spécifique From DROP TABLE de l’outil qui permet de récupérer les données d’une base de données suite à l’utilisation de cette commande (DROP TABLE). Cela permettra à l’outil de récupération de trouver les données plus rapidement ; puisqu’il n’a besoin de chercher qu’après les données qui ont été supprimées via cette commande
Choisissons cette option pour l’exemple
Pour continuer, il est nécessaire de se connecter au serveur de la base données SQL sur lequel l’évènement s’est produit:
Cliquez sur Suivant (Next)
Cet écran vous permet d’ajouter les sauvegardes des bases de données ainsi que les sauvegardes du journal de transactions (transaction log) dont vous disposez. Si vous n’avez pas de sauvegarde disponible, l’outil de récupération essayera seulement de récupérer les données à partir de la base de données sur laquelle vous êtes connecté
En fonction du temps qui s’est écoulé depuis que la table eut été supprimée, très peu d’information peuvent être encore disponible dans la base de données elle-même. Si vous avez des sauvegardes disponibles, il est essentiel de les ajouter. Cela permettra d’accélérer la récupération des données et améliorera également la qualité des données récupérées
Sélectionnez l’option Add transaction logs afin d’ajouter les sauvegardes des journaux de transactions des différents évènements au sein du programme de récupération des données
Cliquez sur Next (suivant)
Si vous savez le moment approximatif où les données ont été perdues, sélectionnez l'option la plus appropriée. Spécifier un moment approximatif accélèrera le processus de récupération des données
Sélectionner l’option pertinente
Cliquez sur Next (suivant)
L’outil de récupération ApexSQL Recover vous permet d’écrire les données extraites dans un fichier ou bien une nouvelle base de données
Sélectionnez l’action de récupération souhaitée
Spécifiez le nom de la base de données qui doit être créée, si cela est d’application
Cliquez sur Next (suivant)
Ici vous pouvez choisir si vous récupérez la structure de la table et ses données (1er choix) ou bien uniquement sa structure (2ème choix)
Cliquer sur Recover (Récupération)
Un écran de rapport apparaîtra pour vous faire savoir quelles tables ont été récupérées
En conclusion
Quand quelque chose se passe mal et qu’une table est supprimée ou accidentellement tronquée, vous n’avez généralement pas le temps de restaurer l’entièreté de la base de données. Lorsque cela se produit, l’outil de récupération ApexSQL Recover est la réponse à votre problème.
L’outil de récupération ApexSQL Recover peut identifier les données associées à une table spécifique et extraire uniquement les données pertinentes issues des sauvegardes de vos bases de données SQL Server. Cela vous fera gagner un temps précieux en vous évitant de faire une restauration complète.
Veuillez télécharger le(s) script(s) associé(s) à cet article sur notre dépôt GitHub.
N’hésitez pas à nous contacter si vous deviez rencontrer des problèmes ou si vous avez des questions sur les scripts.
© ALL RIGHTS RESERVED. Conditions d’utilisation Confidentialité Cookie Preference Center