Compartilhar via


Suporte do CLFS para arquivamento

O CLFS (Common Log File System) dá suporte ao arquivamento para logs dedicados mantendo uma parte final do arquivo morto. Ao chamar ClfsCreateLogFile para criar um log dedicado, você pode definir o sinalizador FILE_ATTRIBUTE_ARCHIVE do parâmetro fFlagsAndAttributes para especificar que o CLFS deve manter uma parte final do arquivo morto para o log. Um log para o qual o CLFS mantém uma cauda de arquivo morto é chamado de log não efêmero.

Suponha que você esteja executando transações em um banco de dados e cada transação tenha várias atualizações descritas pelos registros de log. Depois que uma determinada transação tiver sido confirmada e gravada no armazenamento estável, talvez você não precise mais dos registros de log que descrevem essa transação. Ou seja, os registros de log não seriam necessários durante a recuperação de reinicialização em caso de falha do sistema. No entanto, se o meio de armazenamento estável que contém o banco de dados falhar e o banco de dados não tiver sido arquivado recentemente em um meio diferente, as atualizações de banco de dados poderão ser perdidas.

O parágrafo anterior descreve o arquivamento de registros de banco de dados, mas em outros cenários você pode querer arquivar registros de log. Em ambos os casos, o arquivamento é responsabilidade dos clientes (seu software). Você pode acompanhar o arquivamento que fez definindo a parte final do arquivo morto do log. A parte final do arquivo é o LSN (número de sequência de log) do registro mais antigo para o qual o arquivamento ainda não foi concluído.

Na verdade, um log não efêmero tem duas caudas: uma marcada pelo LSN base e outra marcada pela parte final do arquivo morto. Você pode posicionar as duas caudas como achar melhor chamando ClfsAdvanceLogBase (ou ClfsWriteRestartArea) e ClfsSetArchiveTail. Normalmente, o LSN base aponta para o registro mais antigo que ainda seria necessário para a recuperação de reversão ou reinicialização da transação, e a parte final do arquivo aponta para o registro mais antigo para o qual o arquivamento não foi executado. Observe que a parte final do arquivo pode ser menor que o LSN base ou pode ser maior que o LSN base.

O LSN base e a parte final do arquivo são importantes quando você chama ClfsReadNextLogRecord repetidamente para ler uma cadeia de registros vinculados por LSNs anteriores, LSNs de desfazer o próximo ou LSNs de usuário. ClfsReadNextLogRecord não lerá um registro cujo LSN seja menor que a parte final do arquivo morto e o LSN base. No entanto, ele lerá um registro cujo LSN está entre a parte final do arquivo morto e o LSN base. Para obter mais informações sobre como seguir cadeias de registros, consulte Lendo registros de dados de um fluxo CLFS.