Fonctionnement des captures instantanées de base de données

Une capture instantanée de base de données fournit une vue statique et en lecture seule d'une base de données source telle qu'elle était au moment où l'instantané a été créé, sans les transactions non validées. Les transactions non validées sont restaurées dans une capture instantanée de base de données nouvellement créée car le Moteur de base de données exécute une récupération après la création de la capture instantanée (les transactions dans la base de données ne sont pas affectées).

Les captures instantanées de base de données dépendent de la base de données source. Les captures instantanées d'une base de données doivent résider sur la même instance de serveur que la base de données. De plus, si une base de données n'est plus disponible pour une raison quelconque, toutes ses captures instantanées de base de données cessent d'être disponibles.

Elles peuvent être utilisées à des fins de génération de rapports. De même, si une erreur utilisateur se produit dans une base de données source, vous pouvez rétablir la base de données source dans l'état qui était le sien au moment où l'instantané a été créé. La perte de données se limite alors aux mises à jour apportées à la base de données après la création de l'instantané. De plus, la création d'une capture instantanée de base de données peut être utile juste avant d'apporter une modification majeure à une base de données, telle que la modification du schéma ou de la structure d'une table. Pour plus d'informations sur les utilisations de captures instantanées, consultez Utilisations courantes des captures instantanées de base de données.

Comprendre le fonctionnement des captures instantanées est utile mais non essentiel à leur utilisation. Les captures instantanées de base de données fonctionnent au niveau de la page de données. Toute page de la base de données source qui n'a pas encore été modifiée est copiée de la base de données source vers la capture instantanée. Ce processus est appelé opération de copie sur écriture (ou « copy-on-write », en anglais). La capture instantanée stocke la page d'origine, conservant ainsi les enregistrements de données tels qu'ils étaient lorsque l'instantané a été créé. Les mises à jour ultérieures apportées aux enregistrements d'une page modifiée n'affectent pas le contenu de l'instantané. Le même processus se répète chaque fois qu'une page est modifiée pour la première fois. Ainsi, la capture instantanée préserve les pages d'origine pour tous les enregistrements de données qui ont été modifiés depuis la dernière capture.

Pour stocker les pages d'origine copiées, la capture instantanée utilise un ou plusieurs fichiers fragmentés. Initialement, un fichier fragmenté est un fichier essentiellement vide qui ne contient pas de données d'utilisateur et qui ne dispose pas encore d'espace disque alloué à cet effet. À mesure que le nombre de pages mises à jour augmente dans la base de données source, le fichier devient de plus en plus volumineux. Au moment où une capture instantanée est créée, le fichier fragmenté occupe peu d'espace disque. Or, avec le temps et les mises à jour successives de la base de données, un fichier fragmenté peut devenir très volumineux. Pour plus d'informations sur les fichiers fragmentés, consultez Tailles des fichiers partiellement alloués dans les instantanés de bases de données.

La figure suivante illustre une opération de copie sur écriture. Les rectangles gris clair figurant dans le diagramme de capture instantanée représentent l'espace potentiel pas encore alloué d'un fichier fragmenté. Dès lors que la première mise à jour d'une page est reçue dans la base de données source, le Moteur de base de données écrit dans le fichier et le système d'exploitation alloue de l'espace aux fichiers fragmentés de la capture instantanée et y copie la page d'origine. Ensuite, le Moteur de base de données met à jour la page dans la base de données source. La figure suivante illustre une opération de copie sur écriture similaire.

Opération de lecture sur l'instantané après la mise à jour de la page

Important

Comme les captures instantanées de base de données ne correspondent pas à un stockage redondant, elles ne vous protègent pas face à des erreurs disque ou d'autres types d'endommagement. La réalisation de sauvegardes régulières et le test de votre plan de restauration sont essentiels pour la protection d'une base de données. Si vous devez restaurer la base de données source au point dans le temps où vous avez créé une capture instantanée de base de données, implémentez une stratégie de sauvegarde qui vous permette une telle opération.

Opérations de lecture dans une capture instantanée de base de données

Pour l'utilisateur, une capture instantanée de base de données semble ne jamais changer, car les opérations de lecture dans une capture instantanée de base de données accèdent toujours aux pages de données d'origine, quel que soit leur emplacement.

Si la page n'a pas encore été mise à jour dans la base de données source, une opération de lecture de la capture instantanée lit la page d'origine à partir de la base de données. La figure suivante illustre une opération de lecture dans une capture instantanée nouvellement créée, dont le fichier fragmenté ne contient naturellement aucune page. Cette opération de lecture ne lit qu'à partir de la base de données source.

Opération de lecture avant la copie de la 1ère page vers l'instantané

Une fois qu'une page a été mise à jour, une opération de lecture dans la capture instantanée continue d'accéder à la page d'origine, qui est désormais stockée dans un fichier fragmenté. La figure suivante illustre une opération de lecture dans la capture instantanée qui accède à une page qui a été mise à jour dans la base de données source. L'opération de lecture lit la page d'origine à partir du fichier fragmenté de la capture instantanée.

Opération de copie lors d'une écriture

Effet du schéma de mise à jour sur la croissance des captures instantanée de base de données

Si votre base de données source est relativement volumineuse et que vous vous souciez de l'espace disque utilisé, vous devrez tôt ou tard remplacer une ancienne capture instantanée par une nouvelle. La durée de vie idéale d'une capture instantanée dépend de son rythme de croissance et de l'espace disque dont disposent ses fichiers fragmentés. L'espace disque nécessaire à une capture instantanée dépend du nombre de pages de la base de données source qui sont mises à jour pendant la durée d'existence de l'instantané. Par conséquent, si les mises à jour concernent principalement un petit sous-ensemble de pages régulièrement mises à jour, le rythme de croissance ralentira dans le temps et les besoins en espace de l'instantané resteront relativement modestes. En revanche, si l'ensemble des pages d'origine sont mises à jour au moins une fois, l'instantané prendra du volume jusqu'à atteindre la taille de la base de données source. Si le disque est proche de la saturation, les captures instantanées sont en concurrence pour l'espace disque restant. Une fois le disque arrivé à saturation, les opérations d'écriture dans toutes les captures instantanées échouent.

Notes

Pour savoir comment déterminer la taille effective et potentielle d'une capture instantanée, consultez Tailles des fichiers partiellement alloués dans les instantanés de bases de données.

Par conséquent, il s'avère utile de connaître les schémas de mise à jour habituels d'une base de données au moment de déterminer la quantité d'espace nécessaire tout au long de la durée de vie prévue d'une capture instantanée. Pour certaines bases de données, le rythme des mises à jour peut être relativement constant. Tel peut être le cas d'une base de données de stock dont bon nombre de pages sont mises à jour quotidiennement, rendant ainsi nécessaire le remplacement quotidien ou hebdomadaire des anciennes captures instantanées. Pour d'autres bases de données, la proportion de pages mises à jour peut varier au cours du cycle économique ; par exemple, une base de données catalogue pourra faire l'objet d'une mise à jour principale tous les trimestres, avec seulement des mises à jour occasionnelles à d'autres moments. Dans ce contexte, une stratégie logique serait de créer des captures instantanées juste avant et après chaque mise à jour trimestrielle. La capture instantanée antérieure à la mise à jour permettrait ainsi d'effectuer une restauration au cas où une erreur sérieuse se produirait pendant la mise à jour, tandis que la capture instantanée ultérieure à mise à jour pourrait quant à elle servir à la génération de rapports lors du trimestre suivant.

La figure suivante illustre les effets de deux schémas de mise à jour distincts sur la taille d'une capture instantanée. Le schéma de mise à jour A représente un environnement dans lequel seules 30% des pages d'origine sont mises à jour pendant la durée d'existence de la capture instantanée. Le schéma de mise à jour B correspond à un environnement dans lequel 80% des pages d'origine sont mises à jour pendant la durée d'existence de la capture instantanée.

Autres modèles de mise à jour et taille d'instantané

Métadonnées et captures instantanées de base de données

Dans le cas des captures instantanées de base de données, les métadonnées de base de données contiennent la propriété source_database_id, qui est stockée dans une colonne de l'affichage catalogue sys.databases. Pour plus d'informations sur cette propriété, consultez sys.databases (Transact-SQL).

En règle générale, une capture instantanée de base de données expose non pas ses propres métadonnées mais celles de sa base de données source. Ces métadonnées peuvent inclure, par exemple, les données renvoyées par l'instruction suivante :

USE <database_snapshot> SELECT * FROM sys.database_files 

sachant que <database_snapshot> est le nom d'une capture instantanée de base de données.

Les seules exceptions sont lorsque la base de données source utilise les fonctionnalités de recherche en texte intégral ou de mise en miroir de base de données, qui se désactivent dans une capture instantanée suite à la modification de certaines valeurs des métadonnées de la capture instantanée.