Поддержка CLFS для архивации

Общая файловая система журналов (CLFS) поддерживает архивацию для выделенных журналов, сохраняя хвост архива. При вызове ClfsCreateLogFile для создания выделенного журнала можно задать флаг FILE_ATTRIBUTE_ARCHIVE параметра fFlagsAndAttributes , чтобы указать, что CLFS должен поддерживать архивный хвост журнала. Журнал, для которого CLFS сохраняет хвост архива, называется неэфемерным журналом.

Предположим, что вы выполняете транзакции в базе данных, и каждая транзакция содержит несколько обновлений, описанных записями журнала. После фиксации определенной транзакции и записи в стабильное хранилище может больше не потребоваться записей журнала, описывающих эту транзакцию. То есть записи журнала не потребуются во время восстановления перезапуска при сбое системы. Однако если устойчивый носитель хранения, на котором находится база данных, выходит из строя, и база данных не была недавно заархивирована на другой носитель, обновления базы данных могут быть потеряны.

В предыдущем абзаце описывается архивация записей базы данных, но в других сценариях может потребоваться архивировать записи журналов. В любом случае ответственность за архивацию ложится на клиентов (пользователей вашего программного обеспечения). Вы можете отслеживать архивацию, которую вы выполнили, задав хвост архива журнала. Хвост архива — это номер последовательности журнала (LSN) самой старой записи, для которой архивация еще не завершена.

Неэфемерный лог фактически имеет два хвоста: один отмечен базовым LSN и другой архивным хвостом. Вы можете разместить два хвоста по своему усмотрению, вызвав ClfsAdvanceLogBase (или ClfsWriteRestartArea) и ClfsSetArchiveTail. Как правило, базовый LSN указывает на старую запись, которая по-прежнему необходима для отката транзакции или восстановления перезапуска, а архивный хвост указывает на старую запись, для которой архивация не была выполнена. Хвост архива может быть меньше базового LSN или может быть больше базового LSN.

Базовый LSN и хвост архива важны при вызове ClfsReadNextLogRecord многократно для чтения цепочки записей, связанных с предыдущими LSN, отменой последующих LSN или пользовательскими LSN. ClfsReadNextLogRecord не считывает запись, LSN которой меньше, чем хвост архива и базовый LSN. Однако он будет читать запись, LSN которой находится между архивным хвостом и базовым LSN. Дополнительные сведения о следующих цепочках записей см. в разделе "Чтение записей данных" из потока CLFS.

См. также

ClfsAdvanceLogBase

ClfsCreateLogFile

ClfsReadNextLogRecord

ClfsSetArchiveTail

ClfsWriteRestartArea

Чтение записей данных из потока CLFS