Récupération de bases de données associées contenant une transaction marquée

S’applique à :SQL Server

Cette rubrique s'applique uniquement aux bases de données qui contiennent des transactions marquées et qui utilisent le mode de récupération complète ou le mode de récupération utilisant les journaux de transactions.

Pour plus d’informations sur la configuration requise pour la restauration à un point de récupération spécifique, consultez Restaurer une base de données SQL Server jusqu’à une limite dans le temps (Mode de récupération complète).

SQL Server prend en charge l’insertion de marques nommées dans le journal des transactions afin de permettre la récupération jusqu’à une marque particulière. Les marques de journal sont transactionnelles et ne sont insérées que si leurs transactions associées sont validées. Par conséquent, des marques peuvent être liées à un travail spécifique, et vous pouvez récupérer jusqu'à un point incluant ou excluant ce travail.

Avant d'insérer des marques nommées dans le journal des transactions, prenez en compte les éléments suivants :

  • les marques de transaction occupant de l'espace dans le journal, utilisez-les seulement pour les transactions ayant un rôle significatif dans la stratégie de récupération de la base de données ;

  • Après la validation d'une transaction marquée, une ligne est insérée dans la table logmarkhistory de la base de données msdb.

  • si une transaction marquée s'étend à plusieurs bases de données sur le même serveur de bases de données ou sur différents serveurs, les marques doivent être enregistrées dans les journaux de toutes les bases de données concernées. Pour plus d’informations, consultez Utiliser les transactions marquées pour récupérer des bases de données associées uniformément (Mode de récupération complète).

Remarque

Pour plus d’informations sur la façon de marquer les transactions, consultez Utiliser les transactions marquées pour récupérer des bases de données associées uniformément (Mode de récupération complète).

Syntaxe Transact-SQL permettant d'insérer des marques nommées dans un journal des transactions

Pour insérer des marques dans les journaux des transactions, utilisez l’instruction BEGIN TRANSACTION et la clause WITH MARK [description]. La marque a le même nom que la transaction. La description facultative est une description textuelle de la marque, pas le nom de la marque. Par exemple, le nom de la transaction et de la marque créé dans l'instruction BEGIN TRANSACTION suivante est Tx1:

BEGIN TRANSACTION Tx1 WITH MARK 'not the mark name, just a description'    

Le journal des transactions enregistre le nom de la marque (nom de la transaction), la description, la base de données, l’utilisateur, les informations de datetime et le numéro séquentiel dans le journal (LSN, Log Sequence Number). Les informations de datetime sont utilisées conjointement avec le nom de la marque pour identifier celle-ci de façon univoque.

Pour plus d’informations sur la façon d’insérer une marque dans une transaction qui s’étend sur plusieurs bases de données, consultez Utiliser les transactions marquées pour récupérer des bases de données associées uniformément (Mode de récupération complète).

Syntaxe Transact-SQL permettant de réaliser une récupération jusqu'à une marque

Quand vous ciblez une transaction marquée à l’aide d’une instruction RESTORE LOG, vous pouvez utiliser l’une des clauses suivantes pour vous arrêter à la marque ou juste avant celle-ci :

  • Utilisez la clause WITH STOPATMARK = '<nom_marque>' pour spécifier que la transaction marquée est le point de récupération.

    L'option STOPATMARK effectue une restauration par progression jusqu'à la marque et inclut la transaction marquée dans cette restauration.

  • Utilisez la clause WITH STOPBEFOREMARK = '<nom_marque>' pour spécifier que l’enregistrement de journal situé juste avant la marque est le point de récupération.

    L'option STOPBEFOREMARK effectue une restauration par progression jusqu'à la marque et exclut la transaction marquée de cette restauration.

Les options STOPATMARK et STOPBEFOREMARK prennent toutes les deux en charge une clause AFTER datetime facultative. Lorsqu'ils sont utilisés avec datetime , il n'est pas nécessaire que les noms de marque soient uniques.

Si la clause AFTER datetime est omise, la restauration par progression s'arrête à la première marque portant le nom spécifié. Si une valeur est spécifiée pour AFTER datetime , la récupération par progression s'arrête à la première marque portant le nom spécifié, à datetimeexactement ou après.

Remarque

Comme dans le cas de toute opération de restauration dans le temps, la récupération jusqu'à une marque n'est pas permise pendant les périodes où la base de données subit des opérations journalisées en bloc.

Pour effectuer une restauration jusqu'à une transaction marquée

Restaurer une base de données jusqu’à une transaction marquée (SQL Server Management Studio)

RESTORE (Transact-SQL)

Préparation des sauvegardes de journaux

Dans cet exemple, il serait parfaitement envisageable d'appliquer la stratégie de sauvegarde appropriée suivante aux bases de données :

  1. Utilisation du mode de récupération complète pour les deux bases de données.

  2. Création d'une sauvegarde complète de chaque base de données.

    Les bases de données peuvent être sauvegardées l'une après l'autre ou de façon simultanée.

  3. Préalablement à la sauvegarde du journal des transactions, le marquage d'une transaction qui s'exécute dans toutes les bases de données. Pour plus d’informations sur la façon de créer les transactions marquées, consultez Utiliser les transactions marquées pour récupérer des bases de données associées uniformément (Mode de récupération complète).

  4. Sauvegarde du journal des transactions sur chaque base de données.

Récupération de la base de données jusqu'à une transaction marquée

Pour restaurer la sauvegarde

  1. Créez des sauvegardes de la fin du journal pour les bases de données non endommagées, si possible.

  2. Restaurez la sauvegarde complète de base de données la plus récente pour chaque base de données.

  3. Identifiez la transaction marquée la plus récente disponible dans toutes les sauvegardes des journaux de transactions. Ces informations sont stockées dans la table logmarkhistory de la base de données msdb de chaque serveur.

  4. Identifiez les sauvegardes de journaux de toutes les bases de données associées contenant cette marque.

  5. Restaurez chaque sauvegarde de journal en vous arrêtant à la transaction marquée.

  6. Récupérez chaque base de données.

Voir aussi

BEGIN TRANSACTION (Transact-SQL)
RESTORE (Transact-SQL)
Appliquer les sauvegardes du journal de transactions (SQL Server)
Utiliser des transactions marquées pour récupérer des bases de données associées uniformément (mode de récupération complète)
Vue d'ensemble de la restauration et de la récupération (SQL Server)
Restaurer une base de données SQL Server jusqu’à une limite de restauration dans le temps (mode de récupération complète)
Planifier et exécuter des séquences de restauration (mode de récupération complète)