Restaurer des pages (SQL Server)

Cette rubrique explique comment restaurer des pages dans SQL Server 2012 à l'aide de SQL Server Management Studio ou de Transact-SQL. Dans la restauration de pages, l'objectif est de restaurer une ou plusieurs pages endommagées sans restaurer toute la base de données. Généralement, les pages candidates à la restauration ont été marquées « suspectes » en raison d'une erreur rencontrée lors de l'accès à la page. Les pages suspectes sont identifiées dans la table suspect_pages dans la base de données msdb.

Dans cette rubrique

  • Avant de commencer :

    Quand une restauration de pages est-elle utile ?

    Limitations et restrictions

    Recommandations

    Sécurité

  • Pour restaurer des pages, utilisez :

    SQL Server Management Studio

    Transact-SQL

Avant de commencer

Quand une restauration de pages est-elle utile ?

La restauration de pages permet de réparer des pages endommagées. La restauration et la récupération de quelques pages individuelles peuvent être plus rapides qu'une restauration de fichiers, ce qui réduit le nombre de données qui restent hors ligne pendant l'opération. Toutefois, si vous avez besoin de restaurer un plus grand nombre de pages d'un fichier, il est généralement plus efficace de restaurer l'ensemble du fichier. Par exemple, si de nombreuses pages sur une unité indiquent une défaillance possible de l'unité, envisagez de restaurer le fichier éventuellement dans un emplacement différent et de réparer l'unité.

En outre, toutes les erreurs de page n'exigent pas une restauration. Il peut arriver qu'un problème survenant dans les données en cache, dans un index secondaire par exemple, ne puisse pas être résolu en recalculant les données. Par exemple, si l'administrateur de la base de données supprime un index secondaire et le reconstruit, les données endommagées, bien qu'ayant été corrigées, ne sont pas indiquées comme telles dans la table suspect_pages.

Limitations et restrictions

  • La restauration de pages s'applique aux bases de données SQL Server qui utilisent les modes de récupération complète ou de récupération utilisant les journaux de transactions. La restauration de pages n'est prise en charge que pour les groupes de fichiers en lecture-écriture.

  • Seules les pages de bases de données peuvent être restaurées. La restauration de pages ne peut pas être utilisée pour restaurer les éléments suivants :

    • Journal des transactions

    • Pages d'allocation : pages GAM (Global Allocation Map), pages SGAM (Shared Global Allocation Map) et pages PFS (Page Free Space).

    • Page 0 de tous les fichiers de données (page de démarrage des fichiers)

    • Page 1:9 (page de démarrage de la base de données)

    • Catalogue de texte intégral

  • Seules les pages de bases de données peuvent être restaurées. La restauration de pages ne peut pas être utilisée pour restaurer les éléments suivants :

    • Journal des transactions

    • Pages d'allocation : pages GAM (Global Allocation Map), pages SGAM (Shared Global Allocation Map) et pages PFS (Page Free Space).

    • Page 0 de tous les fichiers de données (page de démarrage des fichiers)

    • Page 1:9 (page de démarrage de la base de données)

    • Catalogue de texte intégral

  • La fonction de restauration de pages est soumise aux conditions supplémentaires suivantes lorsque la base de données utilise le mode de récupération utilisant les journaux de transactions.

    • La sauvegarde d'un groupe de fichiers ou de données de pages hors connexion pose problème au niveau des données journalisées en bloc étant donné que les données hors connexion ne sont pas enregistrées dans le journal. Une page hors connexion peut empêcher la sauvegarde du journal. Dans ce cas, envisagez l'utilisation de DBCC REPAIR car cette solution peut davantage minimiser la perte de données que la restauration de la sauvegarde la plus récente.

    • Si une sauvegarde de fichier journal d'une base de données journalisée en bloc rencontre une page endommagée, elle échoue à moins que WITH CONTINUE_AFTER_ERROR n'ait été spécifié.

    • La restauration de pages ne fonctionne généralement pas avec la récupération utilisant les journaux de transactions.

      La méthode recommandée pour effectuer une restauration de pages consiste à affecter à la base de données le mode de restauration complète et à tenter une sauvegarde du journal. Si la sauvegarde du journal fonctionne, vous pouvez poursuivre la restauration de la page. Si elle échoue, soit vous perdez effectivement le travail effectué depuis la dernière sauvegarde du journal, soit vous tentez d'exécuter DBCC avec l'option REPAIR_ALLOW_DATA_LOSS.

Recommandations

  • Scénarios de restauration de pages :

    • Restauration de pages hors connexion
      Toutes les éditions de SQL Server 2005 et versions ultérieures prennent en charge la restauration des pages lorsque la base de données est hors connexion. Dans une restauration de pages hors connexion, la base de données est hors connexion pendant que les pages endommagées sont restaurées. À la fin de la séquence de restauration, la base de données est mise en ligne.

    • Restauration de pages en ligne
      SQL Server 2005 Enterprise Edition et versions ultérieures prennent en charge les restaurations de pages en ligne, bien qu'ils utilisent la restauration hors ligne si la base de données est actuellement hors connexion. Dans la plupart des cas, une page endommagée peut être restaurée alors que la base de données reste en ligne, notamment le groupe de fichiers dans lequel une page est restaurée. Lorsque le groupe de fichiers primaire est en ligne, même si un ou plusieurs de ses groupes de fichiers secondaires sont hors connexion, les restaurations de pages sont habituellement effectuées en ligne. Cependant, une page endommagée peut parfois nécessiter une restauration hors connexion. Il arrive par exemple que l'état de certaines pages critiques empêche le démarrage de la base de données.

      AttentionAttention

      Si les pages endommagées stockent des métadonnées de base de données critiques, les mises à jour obligatoires des métadonnées peuvent échouer lors d'une tentative de restauration de pages en ligne. Dans ce cas, vous pouvez effectuer une restauration de pages hors connexion, mais vous devez en premier lieu créer une sauvegarde de la fin du fichier journal (en sauvegardant le journal des transactions à l'aide de RESTORE WITH NORECOVERY).

  • La restauration de pages bénéficie de la fonction améliorée de signalisation des erreurs au niveau de la page (avec sommes de contrôle) et du suivi de SQL Server 2005 et versions ultérieures. Les pages endommagées détectées par somme de contrôle ou une erreur d'écriture, pages endommagées, peuvent être restaurées par une opération de restauration de pages. Seules les pages spécifiées explicitement sont restaurées. Chaque page spécifiée est remplacée par la copie de cette page de la sauvegarde de données spécifiée.

    Lorsque vous restaurez les sauvegardes de journaux suivantes, elles s'appliquent uniquement aux fichiers de base de données qui contiennent au moins une page récupérée. Si une chaîne ininterrompue de sauvegardes de journaux doit être appliquée à la dernière restauration complète ou différentielle pour restaurer par progression la page jusqu'au fichier journal actuel. Comme dans le cas d'une restauration de fichiers, le jeu de restauration par progression est une opération avancée qui s'effectue en une seule passe. Pour qu'une restauration de pages aboutisse, les pages restaurées doivent être récupérées dans un état cohérent avec la base de données.

Sécurité

Autorisations

Si la base de données restaurée n'existe pas, l'utilisateur doit posséder les autorisations CREATE DATABASE afin de pouvoir exécuter RESTORE. Si la base de données existe, les autorisations RESTORE reviennent par défaut aux membres des rôles serveur fixes sysadmin et dbcreator et au propriétaire (dbo) de la base de données (pour l'option FROM DATABASE_SNAPSHOT, la base de données existe toujours).

Les autorisations RESTORE sont attribuées aux rôles dont les informations d'appartenance sont toujours immédiatement accessibles à partir du serveur. Étant donné que l'appartenance au rôle de base de données fixe ne peut être contrôlée que lorsque la base de données est accessible et non endommagée, ce qui n'est pas toujours le cas lorsque RESTORE est exécuté, les membres du rôle de base de données fixe db_owner ne détiennent pas d'autorisations RESTORE.

Icône de flèche utilisée avec le lien Retour en haut[Haut de la page]

Utilisation de SQL Server Management Studio

À compter de SQL Server 2012, SQL Server Management Studio prend en charge les restaurations de pages.

Pour restaurer des pages

  1. Connectez-vous à l'instance appropriée du Moteur de base de données SQL Server, puis dans l'Explorateur d'objets, cliquez sur le nom du serveur pour développer son arborescence.

  2. Développez le dossier Bases de données. Selon la base de données, sélectionnez une base de données utilisateur ou développez Bases de données système et sélectionnez une base de données système.

  3. Cliquez avec le bouton droit sur la base de données, pointez sur Tâches, pointez sur Restaurer, puis cliquez sur Page, pour ouvrir la boîte de dialogue Restaurer la page.

    • Restaurer
      Cette section effectue la même fonction que Restaurer sur dans la page Restaurer la base de données (page Général).

      • Base de données
        Spécifie la base de données à restaurer. Vous pouvez saisir le nom d'une nouvelle base de données ou en sélectionner une existante dans la liste déroulante. La liste comprend toutes les bases de données se trouvant sur le serveur, à l'exception des bases de données système master et tempdb.
      AttentionAttention

      Pour restaurer une sauvegarde protégée par mot de passe, vous devez utiliser l'instruction RESTORE.

    • Sauvegarde de la fin du journal
      Entrez ou sélectionnez un nom de fichier dans Unité de sauvegarde où la sauvegarde de la fin du journal sera stockée pour la base de données.

    • Jeux de sauvegarde
      Cette section affiche les jeux de sauvegarde impliqués dans la restauration.

      En-tête

      Valeurs

      Nom

      Nom du jeu de sauvegarde.

      Composant

      Composant sauvegardé : Base de données, Fichier ou <vide> (pour les journaux des transactions).

      Type

      Type de sauvegarde effectué : Complète, Différentielle ou Journal des transactions.

      Serveur

      Le nom de l'instance du moteur de base de données qui a effectué l'opération de sauvegarde.

      Base de données

      Le nom de la base de données impliquée dans l'opération de sauvegarde.

      Position

      Position du jeu de sauvegarde dans le volume.

      Premier NSE

      Numéro séquentiel dans le journal (LSN) correspondant à la première transaction dans le jeu de sauvegarde. Vide pour les sauvegardes de fichiers.

      Dernier NSE

      Numéro séquentiel dans le journal (LSN) correspondant à la dernière transaction dans le jeu de sauvegarde. Vide pour les sauvegardes de fichiers.

      NSE du point de contrôle

      Le numéro séquentiel dans le journal (LSN) du point de contrôle le plus récent au moment où la sauvegarde a été créée.

      Tous les NSE

      Numéro séquentiel dans le journal (LSN) correspondant à la sauvegarde complète la plus récente de la base de données

      Date de début

      Date et heure de lancement de l'opération de sauvegarde, présentée conformément aux paramètres régionaux du client.

      Date de fin

      Date et heure de fin de l'opération de sauvegarde, exprimée d'après les paramètres régionaux du client.

      Taille

      Taille du jeu de sauvegarde, exprimée en octets.

      Nom d'utilisateur

      Nom de l'utilisateur qui a exécuté l'opération de sauvegarde.

      Expiration

      Date et heure d'expiration du jeu de sauvegarde.

      Cliquez sur Vérifier pour vérifier l'intégrité des fichiers de sauvegarde nécessaires pour effectuer l'opération de restauration de pages.

  4. Pour identifier les pages endommagées, avec la base de données correcte sélectionnée dans la zone Base de données, cliquez sur Vérifier les pages de la base de données. Cette opération est longue.

    AttentionAttention

    Pour restaurer les pages spécifiques qui ne sont pas endommagées, cliquez sur Ajouter et entrez ID de fichier et ID de page des pages à restaurer.

  5. La grille de pages est utilisée pour identifier les pages à restaurer. Initialement, cette grille est remplie à partir de la table système suspect_pages. Pour ajouter ou supprimer des pages de la grille, cliquez sur Ajouter ou Supprimer. Pour plus d'informations, consultez Gérer la table suspect_pages (SQL Server).

  6. La grille Jeux de sauvegarde répertorie les jeux de sauvegarde dans le plan de restauration par défaut. Éventuellement, cliquez sur Vérifier pour vérifier que les sauvegardes sont lisibles et que les jeux de sauvegarde sont complets, sans les restaurer. Pour plus d'informations, consultez RESTORE VERIFYONLY (Transact-SQL).

    Pages

  7. Restaurer les pages répertoriées dans la grille de pages, cliquez sur OK.

Icône de flèche utilisée avec le lien Retour en haut[Haut de la page]

Utilisation de Transact-SQL

Pour spécifier une page dans une instruction RESTORE DATABASE, vous avez besoin de l'ID du fichier qui contient la page et l'ID de la page. La syntaxe requise est la suivante :

RESTORE DATABASE <database_name>

PAGE = '<file: page> [ ,... n ] ' [ ,... n ]

FROM <backup_device> [ ,... n ]

WITH NORECOVERY

Pour plus d'informations sur les paramètres de l'option PAGE, consultez Arguments RESTORE (Transact-SQL). Pour plus d'informations sur la syntaxe RESTORE DATABASE, consultez RESTORE (Transact-SQL).

Pour restaurer des pages

  1. Obtenez les ID des pages endommagées à restaurer. Une somme de contrôle ou une erreur d'écriture renvoie un ID de page fournissant les informations nécessaires pour la spécification des pages. Pour rechercher l'ID de page d'une page endommagée, utilisez une des sources suivantes.

    Source d'ID de page

    Rubrique

    msdb..suspect_pages

    Gérer la table suspect_pages (SQL Server)

    Journal des erreurs

    Afficher le journal des erreurs SQL Server (SQL Server Management Studio)

    Traces d'événements

    Surveiller et répondre aux événements

    DBCC

    DBCC (Transact-SQL)

    Fournisseur WMI

    Fournisseur WMI pour les concepts des événements de serveur

  2. Démarrez une restauration de pages avec une sauvegarde complète de base de données, de fichier ou de groupe de fichiers contenant la page. Dans l'instruction RESTORE DATABASE, utilisez la clause PAGE pour énumérer les ID de toutes les pages à restaurer.

  3. Appliquez les sauvegardes différentielles les plus récentes.

  4. Appliquez les sauvegardes des journaux suivants.

  5. Créez une nouvelle sauvegarde de journal de la base de données incluant le NSE final des pages restaurées, c'est-à-dire le point auquel la dernière page restaurée est placée en mode hors connexion. Le NSE final, qui est défini dans le cadre de la première restauration dans la séquence, est le NSE cible de restauration par progression. La restauration en ligne par progression du fichier contenant la page est capable de s'arrêter au NSE cible de restauration par progression. Pour connaître le NSE cible actuel de restauration d'un fichier, consultez la colonne redo_target_lsn de sys.master_files. Pour plus d'informations, consultez sys.master_files (Transact-SQL).

  6. Restaurez la nouvelle sauvegarde de fichier Une fois appliquée cette nouvelle sauvegarde de journal, la restauration des pages est terminée et les pages sont désormais utilisables.

    [!REMARQUE]

    Cette séquence est analogue à une séquence de restauration de fichier. En fait, la restauration de pages et les restaurations de fichiers peuvent être effectuées dans le cadre de la même séquence.

Exemple (Transact-SQL)

Cet exemple restaure quatre pages endommagées du fichier B à l'aide de NORECOVERY. Ensuite, deux sauvegardes de journal sont appliquées à l'aide de NORECOVERY, suivies de la sauvegarde de la fin du journal, qui est restaurée à l'aide de RECOVERY. Cet exemple effectue une restauration en ligne. Dans l'exemple, l'ID de fichier B est 1, et les ID des pages endommagées sont 57, 202, 916, et 1016.

RESTORE DATABASE <database> PAGE='1:57, 1:202, 1:916, 1:1016'
   FROM <file_backup_of_file_B> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY;
RESTORE LOG <database> FROM <log_backup> 
   WITH NORECOVERY; 
BACKUP LOG <database> TO <new_log_backup>; 
RESTORE LOG <database> FROM <new_log_backup> WITH RECOVERY;
GO

Icône de flèche utilisée avec le lien Retour en haut[Haut de la page]

Voir aussi

Référence

RESTORE (Transact-SQL)

Concepts

Appliquer les sauvegardes du journal de transactions (SQL Server)

Gérer la table suspect_pages (SQL Server)

Sauvegarde et restauration des bases de données SQL Server