Prise en charge de CLFS pour l’archivage
Common Log File System (CLFS) prend en charge l’archivage des journaux dédiés en conservant une fin d’archivage. Lorsque vous appelez ClfsCreateLogFile pour créer un journal dédié, vous pouvez définir l’indicateur FILE_ATTRIBUTE_ARCHIVE du paramètre fFlagsAndAttributes pour spécifier que CLFS doit conserver une fin d’archivage pour le journal. Un journal pour lequel CLFS gère une fin d’archivage est appelé journal non éphémère.
Supposons que vous effectuez des transactions sur une base de données et que chaque transaction comporte plusieurs mises à jour décrites par les enregistrements de journal. Une fois qu’une transaction particulière a été validée et écrite dans un stockage stable, vous n’aurez peut-être plus besoin des enregistrements de journal qui décrivent cette transaction. Autrement dit, les enregistrements de journal ne seraient pas nécessaires lors de la récupération du redémarrage en cas de défaillance du système. Toutefois, si le support de stockage stable qui contient la base de données échoue et que la base de données n’a pas été récemment archivée sur un autre support, les mises à jour de la base de données peuvent être perdues.
Le paragraphe précédent décrit l’archivage des enregistrements de base de données, mais dans d’autres scénarios, vous pouvez archiver les enregistrements de journal. Dans les deux cas, l’archivage est la responsabilité des clients (votre logiciel). Vous pouvez effectuer le suivi de l’archivage que vous avez effectué en définissant la fin d’archivage du journal. La fin de l’archive est le numéro séquentiel du journal (LSN) du plus ancien enregistrement pour lequel l’archivage n’a pas encore été effectué.
Un journal non éphémère a en fait deux extrémités : l’une marquée par le LSN de base et l’autre par la fin d’archive. Vous pouvez positionner les deux extrémités comme vous le souhaitez en appelant ClfsAdvanceLogBase (ou ClfsWriteRestartArea) et ClfsSetArchiveTail. En règle générale, le LSN de base pointe vers l’enregistrement le plus ancien qui serait toujours nécessaire pour la restauration des transactions ou le redémarrage de la récupération, et la fin de l’archive pointe vers l’enregistrement le plus ancien pour lequel l’archivage n’a pas été effectué. Notez que la fin de l’archive peut être inférieure au LSN de base ou supérieure au LSN de base.
Le LSN de base et la fin de l’archive sont importants lorsque vous appelez ClfsReadNextLogRecord à plusieurs reprises pour lire une chaîne d’enregistrements liés par des LSN précédents, des LSN d’annulation suivant ou des LSN utilisateur. ClfsReadNextLogRecord ne lit pas un enregistrement dont le numéro LSN est inférieur à la fin de l’archive et au LSN de base. Toutefois, il lit un enregistrement dont le numéro LSN se trouve entre la fin de l’archive et le LSN de base. Pour plus d’informations sur les chaînes d’enregistrements suivantes, consultez Lecture d’enregistrements de données à partir d’un flux CLFS.