Partager via


Interface ILog (txlogpub.h)

Fournit une fonctionnalité de journalisation générique de bas niveau.

Le système CLFS (Common Log File System ) fournit des fonctionnalités qui sont un sur-ensemble de celles fournies par ILog.

Héritage

L’interface ILog hérite de l’interface IUnknown. ILog a également les types de membres suivants :

Méthodes

L’interface ILog a ces méthodes.

 
ILog ::AppendRecord

Écrivez un nouvel enregistrement à la fin du journal.
ILog ::Force

Force le contenu du journal sur le disque, au moins jusqu’au niveau du LSN spécifié.
ILog ::GetLogLimits

Récupère des informations sur les limites actuelles du journal.
ILog ::ReadRecord

Lire un enregistrement à partir du journal.
ILog ::ReadRecordPrefix

Lit une partie initiale d’un enregistrement à partir du journal.
ILog ::SetAccessPolicyHint

Fournit un conseil à l’implémentation sur le modèle dans lequel les enregistrements seront lus.
ILog ::TruncatePrefix

Supprime le préfixe spécifié du journal, ce qui le rend plus récupérable.

Remarques

WAL est une technique utilisée par certaines applications, telles que les systèmes de gestion de base de données, pour implémenter des transactions atomiques et isolées. Cette technique implique l’écriture d’enregistrements des modifications apportées aux ressources de l’application dans un journal avant d’effectuer ces modifications. De cette façon, les modifications peuvent être annulées si elles sont requises, par exemple si la transaction échoue ou est interrompue. Pour que les applications fournissent des transactions robustes contre des interruptions telles qu’un plantage du système ou une panne d’alimentation, l’implémentation de la journalisation doit fournir une méthode pour forcer le journal ; autrement dit, pour vous assurer que les enregistrements précédemment écrits sont sur le disque avant de continuer.

L’écriture d’enregistrements qui utilisent ILog est une opération séquentielle ; autrement dit, les nouveaux enregistrements sont toujours ajoutés à la fin du journal. Chaque enregistrement ajouté au journal se voit attribuer un numéro séquentiel de journal (LSN), un identificateur numérique qui peut être utilisé pour récupérer l’enregistrement ultérieurement. Le type de données LSN est un typedef pour LARGE_INTEGER, une valeur 64 bits signée ; toutefois, ILog utilise uniquement des LSN avec des valeurs non négatives. En outre, les réseaux LSN doivent remplir les conditions suivantes :

  • Les LSN augmentent de façon monotone ; si l’enregistrement B est écrit dans le journal après l’enregistrement A, le LSN de l’enregistrement B doit être supérieur au LSN de l’enregistrement A.
  • Les valeurs zéro et MAXLSN (0x7FFFFFFFFFFFFFFF) ne doivent jamais être utilisées comme LSN d’un enregistrement, car elles ont une signification particulière pour certaines des méthodes de ILog.
À part les conditions ici, aucune hypothèse ne doit être faite sur la façon dont les LSN sont attribués par une implémentation d’ILog. En particulier, il n’est pas sûr de supposer que des valeurs séquentielles seront affectées aux enregistrements pour les LSN.

Une fois qu’un enregistrement est ajouté au journal, il peut ne pas être modifié. Toutefois, lorsque des enregistrements écrits précédemment ne sont plus nécessaires, par exemple des enregistrements de modifications dans une transaction qui a déjà été validée, ILog prend en charge la troncation du journal. De cette façon, l’espace disque utilisé pour les enregistrements non essentiels peut être réutilisé. La troncation du journal consiste à supprimer tous les enregistrements dont le LSN est inférieur à une valeur spécifiée.

En guise d’optimisation des performances, certaines implémentations d’ILog peuvent mettre en mémoire tampon les enregistrements jusqu’à ce que le journal soit forcé. Si c’est le cas, vous devez prendre en compte le contrôle des erreurs et la récupération. Prenons la situation suivante :

  1. L’enregistrement A est ajouté au journal, mais le journal n’est pas forcé. L’implémentation ILog copie l’enregistrement dans une mémoire tampon et retourne un code de réussite.
  2. L’enregistrement B est ajouté au journal, et l’implémentation ILog décide de forcer le journal sur le disque. Cela est dû au fait que l’appelant a demandé au journal d’être forcé ou parce que la mémoire tampon est saturée. Toutefois, l’opération d’écriture échoue, par exemple en raison d’un espace disque insuffisant.
Dans ce cas, il ne serait pas approprié que l’implémentation ILog autorise l’ajout d’enregistrements supplémentaires au journal, sauf si elle peut garantir que tous les enregistrements pour lesquels elle a retourné un code de réussite sont d’abord écrits sur le disque. Une méthode possible de contrôle des erreurs consiste à épingler le journal dans un état d’erreur lorsque cette situation se produit, en interdisant définitivement les écritures supplémentaires dans le journal instance. Les appelants qui ne forcent pas le journal sur le disque pour chaque enregistrement ajouté doivent se rendre compte que cette situation peut se produire et être en mesure de la gérer de manière appropriée.

Implémentation basée sur un fichier ILog

Le système d’exploitation Windows fournit une implémentation basée sur un fichier d’ILog, qui vous permet de créer un journal adapté à la journalisation en écriture anticipée sur un fichier. Le journal utilise un fichier comme mémoire tampon circulaire, ce qui permet de réutiliser l’espace inutilisé. Cela peut également augmenter la taille du fichier qui peut être nécessaire pour ajuster des enregistrements supplémentaires lorsque le journal est plein. Les modifications apportées au journal sont effectuées de manière atomique, afin que le contenu du journal puisse être récupéré après un incident. Cette implémentation utilise une mémoire tampon en mémoire pour ajouter des enregistrements de journal. Par conséquent, il n’est pas garanti que les enregistrements soient écrits sur le disque lorsque la méthode ILog ::AppendRecord retourne, sauf si l’appelant demande que le journal soit forcé.

Utilisez le CLSID suivant pour créer un instance d’un journal basé sur des fichiers (voir CoCreateInstance) :

CLSID_SimpleFileBasedLog ({E16C0593-128F-11D1-97E4-00C04FB9618A} ).

L’implémentation basée sur les fichiers d’ILog prend également en charge les interfaces IFileBasedLogInit et IPersistFile . Utilisez IFileBasedLogInit ::InitNew pour créer un fichier journal. Utilisez IPersistFile ::Load pour ouvrir un fichier journal existant.

Cette implémentation utilise une stratégie de contrôle d’erreur simple. Si l’une des méthodes échoue en raison d’une erreur au niveau du système de fichiers, qui inclut une erreur disque plein, le journal est épinglé dans un état d’erreur. Cela empêche les clients d’ajouter des enregistrements supplémentaires au fichier ou de lire des enregistrements potentiellement incorrects. Pour continuer à utiliser le fichier journal, vous devez créer une nouvelle instance du journal.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
Plateforme cible Windows
En-tête txlogpub.h

Voir aussi

IFileBasedLogInit