Fonctionnement de la restauration et de la récupération de sauvegardes dans SQL Server

 Cette rubrique concerne toutes les bases de données SQL Server.

La restauration est le processus qui consiste à copier des données issues d'une sauvegarde et à leur appliquer les transactions enregistrées dans le journal pour les restaurer par progression jusqu'au point de récupération cible. Une sauvegarde de données ou différentielle accueille suffisamment d'enregistrements du journal des transactions pour permettre une restauration par progression des transactions actives comme éléments inhérents à la restauration de chaque sauvegarde. De même, chaque sauvegarde contient un espace journal suffisant pour restaurer les transactions non validées et ramener la base de données dans un état cohérent d'un point de vue transactionnel et exploitable. Le processus de restauration par progression des transactions non validées (le cas échéant) et de remise en ligne de la base de données est désigné sous le terme de récupération.

Jeu de restauration par progression

Le processus qui consiste à appliquer des modifications enregistrées aux données d'une base de données afin de rétablir un état ultérieur de ces données est appelé restauration par progression. L'ensemble de toutes les données restaurées s'appelle jeu de restauration par progression. Un jeu de restauration par progression est défini par la restauration d'une ou de plusieurs sauvegardes complètes, telle qu'une sauvegarde partielle ou de base de données, ou un ensemble de sauvegardes de fichiers. Si une instruction RESTORE spécifie des groupes de fichiers, des fichiers ou des pages, seuls ces éléments sont inclus dans le jeu de restauration par progression. Sinon, tous les fichiers de la sauvegarde à restaurer sont inclus dans le jeu de restauration par progression. Si la sauvegarde complète contient des enregistrements de journal, les données sont restaurées par progression à l'aide de ce journal.

Notes

Si vous spécifiez un groupe de fichiers pendant la restauration, cette dernière porte sur la totalité de ce groupe de fichiers en l'état. Celle-ci inclut les fichiers ajoutés au groupe de fichiers depuis la sauvegarde. Pour plus d'informations, consultez Contrôle de la création de fichiers ajoutés lors la restauration par progression.

Dans le cas des sauvegardes différentielles, si des fichiers ont été ajoutés à la base de données depuis la base différentielle, la restauration de la sauvegarde différentielle risque, au moyen de ses données, de remplacer les pages dans le jeu de restauration par progression. Pour plus d'informations, consultez Utilisation des sauvegardes différentielles.

La restauration d'une sauvegarde différentielle ne met à jour une page que si celle-ci se trouve dans le jeu de restauration par progression, si elle se trouve dans la sauvegarde et si l'instruction RESTORE soit spécifie cette page ou son fichier, soit ne spécifie aucun fichier ni page.

En mode de récupération utilisant les journaux des transactions et en mode de restauration complète, le journal doit être sauvegardé séparément. Après la restauration des données et (éventuellement) des sauvegardes différentielles vient, en général, la restauration des sauvegardes de fichier journal successives qui ramène la base de données dans l'état où elle se trouvait avant la défaillance. La restauration d'une sauvegarde de fichier journal restaure par progression toutes les pages du jeu de restauration par progression. Pour plus d'informations sur les sauvegardes de fichier journal, consultez Utilisation des sauvegardes de journaux de transactions.

Séquences de restauration

Chaque scénario de restauration est mis en œuvre à l'aide d'une ou de plusieurs opérations de restauration, appelées séquence de restauration. Chaque opération correspond à une instruction individuelle Transact-SQL RESTORE. Cette séquence déplace les données impliquées au sein d'une phase ou d'une série de phases de restauration.

Pour plus d'informations sur les séquences de restauration Transact-SQL et sur leur création, consultez Utilisation des séquences de restauration pour les bases de données SQL Server.

Phases de la restauration

Une restauration est un processus en plusieurs phases. Ses phases possibles comprennent la copie de données, la restauration par progression et la restauration :

  • La copie de données copie toutes les données, le journal et les pages d'index des supports de sauvegarde d'une base de données vers les fichiers de base de données.

  • La phase de restauration par progression applique les transactions du journal aux données copiées depuis la sauvegarde afin de restaurer par progression ces données jusqu'au point de récupération. À ce stade une base de données comprend des transactions non validées et elle est inutilisable, raison pour laquelle une phase de restauration est requise afin que la récupération de la base de données ait lieu.

  • La phase d'annulation (soit la première étape de la récupération) permet de restaurer toutes les transactions non validées et de mettre la base de données à la disposition des utilisateurs. Après cette phase, les sauvegardes suivantes ne peuvent pas être restaurées.

Le reste de cette section passe en revue ces différentes phases dans le détail.

Phase de copie de données

La première phase d'un processus de restauration est la copie de données. Celle-ci initialise le contenu de la base de données, des fichiers ou des pages à restaurer. Elle implique des opérations de restauration de la base de données, des fichiers et des pages au moyen de sauvegardes complètes ou différentielles.

La phase de copie des données copie les données issues d'une ou de plusieurs sauvegardes complètes et, éventuellement, de sauvegardes différentielles. Puis elle réinitialise le contenu de la base de données, des fichiers ou des pages concernés jusqu'à leur point de capture par ces sauvegardes.

Le fichier ou la page le plus ancien dans le jeu de restauration par progression détermine le point de départ de la phase suivante : la restauration par progression.

Phase de restauration par progression

La restauration par progression est le processus qui consiste à appliquer les modifications enregistrées pour restaurer par progression les données du jeu de restauration par progression de façon à rétablir un état ultérieur des données. Pour l'exécuter, le moteur de base de données SQL Server traite les sauvegardes de fichier journal à mesure qu'elles sont restaurées, en commençant par le journal contenu dans les sauvegardes complètes.

La restauration évite les restaurations par progression inutiles. En règle générale, si des données étaient en lecture seule lors de leur sauvegarde et le sont restées depuis lors, la restauration par progression n'est pas nécessaire et est donc ignorée.

Point de récupération

L'objectif d'une restauration par progression est de rétablir l'état initial des données au point de récupération. Le point de récupération est le point, tel que spécifié par l'utilisateur, jusqu'auquel le dataset doit être récupéré. En mode de restauration complète, vous pouvez spécifier le point de récupération comme une limite particulière dans le temps, une transaction marquée ou un numéro séquentiel dans le journal. En mode de récupération utilisant les journaux de transactions, vous pouvez effectuer une restauration à un point dans le temps à condition qu'aucune opération en bloc n'ait été effectuée depuis la sauvegarde de journal précédente.

Cohérence de la restauration par progression

Durant la phase de restauration par progression, les données sont toujours restaurées jusqu'à un point qui assure leur cohérence avec l'état de la base de données au point de récupération. Toutes les données ont été restaurées par progression jusqu'au point de restauration.

L'état de la base de données est défini par le fichier primaire, comme suit :

  • Si le fichier primaire doit être restauré, le point de récupération détermine l'état de la totalité de la base de données. Si, par exemple, une base de données doit être récupérée jusqu'à une limite dans le temps juste avant la suppression accidentelle d'une table, elle doit être restaurée dans son intégralité jusqu'à cette limite dans le temps.

  • Si le fichier primaire ne doit pas être restauré, l'état de la base de données est connu et les données restaurées sont restaurées par progression jusqu'à un point de récupération qui assure leur cohérence d'un point de vue transactionnel avec la base de données. SQL Server assure cette mise en œuvre.

Toutefois, la base de données peut contenir des modifications engendrées par des transactions non validées au point de récupération. Dans le cas d'une restauration en ligne, les données sont récupérées jusqu'à une limite dans le temps qui assure leur cohérence avec l'état de la partie en ligne de la base de données.

Une sauvegarde différentielle ignore tout ce qui précède le moment où la sauvegarde différentielle a été réalisée. Les pages du jeu de restauration par progression sont remplacées par de plus récentes issues de la sauvegarde différentielle, le cas échéant.

Phase de restauration et de récupération

À l'issue de la phase de restauration par progression de toutes les transactions du journal, une base de données peut en règle générale contenir des modifications engendrées par des transactions non validées au point de récupération. Ce processus rend les données restaurées par progression incohérentes d'un point de vue transactionnel. Le processus de récupération consulte le journal des transactions pour identifier les transactions non validées. Ces transactions sont annulées au cours de leur restauration, sauf si elles contiennent des verrous qui empêchent d'autres transactions d'afficher des données incohérentes d'un point de vue transactionnel. Cette phase se nomme annulation (ou restauration). Si les données sont déjà cohérentes d'un point de vue transactionnel au début du processus de récupération, la phase de restauration est ignorée. Une fois la base de données cohérente d'un point de vue transactionnel, la récupération met la base de données en ligne.

Après la restauration d'une ou plusieurs sauvegardes, la récupération contient généralement les phases de restauration par progression et de restauration. Toutes les sauvegardes complètes et les sauvegardes différentielles contiennent suffisamment d'enregistrements du journal des transactions pour permettre la récupération dans un état cohérent des données de cette sauvegarde.

Notes

Durant une opération de récupération après panne ou de basculement de mise en miroir de bases de données, SQL Server 2005 Enterprise Edition et les versions ultérieures autorisent les utilisateurs à accéder à la base de données pendant la phase de restauration. Cela est possible grâce à la récupération rapide. Cette dernière peut être réalisée, car les transactions qui n'étaient pas validées lorsque l'incident s'est produit retrouvent les verrous dont elles disposaient avant l'incident. Pendant la restauration des transactions, leurs verrous les protègent contre toute interférence de la part des utilisateurs.

Relations des options RESTORE et NORECOVERY pour restaurer des phases

Une instruction RESTORE spécifique se termine après la phase de restauration par progression ou se poursuit jusqu'à la phase de restauration, selon que l'instruction WITH NORECOVERY est spécifiée ou non, de la manière suivante :

  • WITH RECOVERY contient les phases de restauration par progression et de restauration et récupère la base de données ; les autres sauvegardes ne peuvent pas être restaurées. Il s'agit de l'option par défaut.

    Si le jeu de restauration par progression n'a pas été restauré par progression suffisamment loin pour être cohérent avec la base de données, la phase de restauration ne peut pas avoir lieu. Le moteur de base de données signale une erreur et la récupération est interrompue.

    Si la totalité du jeu de restauration par progression est en cohérence avec la base de données, la récupération est réalisée et la base de données peut être mise en ligne.

  • WITH NORECOVERY omet la phase de restauration pour conserver les transactions non validées. L'omission de la phase de restauration permet la restauration d'autres sauvegardes pour restaurer par progression la base de données plus loin dans le temps. Éventuellement, RESTORE WITH NORECOVERY restaure par progression les données jusqu'au point où elles sont cohérentes avec la base de données. Dans ce cas, le moteur de base de données envoie un message d'information indiquant que le jeu de restauration par progression peut désormais être récupéré à l'aide de l'option RECOVERY.

    Pour plus d'informations sur les jeux de restauration par progression, consultez Fonctionnement de la restauration et de la récupération de sauvegardes dans SQL Server.

Notes

Une troisième alternative, WITH STANDBY, est en dehors du champ de cette rubrique.

Pour une description détaillée des options de RESTORE, consultez RESTORE (Transact-SQL).

Chemins de récupération

Un chemin de récupération est un ensemble unique de transformations ayant permis à la base de données d'évoluer dans le temps tout en garantissant sa cohérence. Pour des informations sur les chemins de récupération et sur les concepts associés de branchements et branches de récupération, consultez Chemins de récupération.