Compartilhar via


Interface ILog (txlogpub.h)

Fornece funcionalidade genérica de log de baixo nível.

O CLFS ( Common Log File System ) fornece uma funcionalidade que é um superconjunto do fornecido pelo ILog.

Herança

A interface ILog herda da interface IUnknown . O ILog também tem esses tipos de membros:

Métodos

A interface ILog tem esses métodos.

 
ILog::AppendRecord

Grave um novo registro no final do log.
ILog::Force

Força o conteúdo do log para o disco, pelo menos até o LSN especificado.
ILog::GetLogLimits

Recupera informações sobre os limites atuais do log.
ILog::ReadRecord

Leia um registro do log.
ILog::ReadRecordPrefix

Lê uma parte inicial de um registro do log.
ILog::SetAccessPolicyHint

Fornece uma dica para a implementação sobre o padrão no qual os registros serão lidos.
ILog::TruncatePrefix

Joga fora o prefixo especificado do log, tornando-o não mais recuperável.

Comentários

WAL é uma técnica usada por determinados aplicativos, como sistemas de gerenciamento de banco de dados, para implementar transações atômicas e isoladas. Essa técnica envolve gravar registros de alterações nos recursos do aplicativo em um log antes de fazer essas alterações. Dessa forma, as alterações poderão ser revertidas se forem necessárias, por exemplo, se a transação falhar ou for interrompida. Para que os aplicativos forneçam transações robustas contra interrupções como falha do sistema ou falha de energia, a implementação de log deve fornecer um método para forçar o log; ou seja, para garantir que os registros gravados anteriormente estejam no disco antes de continuar.

Gravar registros que usam ILog é uma operação sequencial; ou seja, novos registros são sempre acrescentados ao final do log. Cada registro acrescentado ao log recebe um LSN (número de sequência de log), um identificador numérico que pode ser usado para recuperar o registro posteriormente. O LSN do tipo de dados é um typedef para LARGE_INTEGER, um valor assinado de 64 bits; no entanto, o ILog usa apenas LSNs com valores não negativos. Além disso, os LSNs devem atender às seguintes condições:

  • Os LSNs estão aumentando monotonicamente; se o registro B for gravado no log após o registro A, o LSN do registro B deverá ser maior que o LSN do registro A.
  • Os valores de zero e MAXLSN (0x7FFFFFFFFFFFFFFF) nunca devem ser usados como o LSN de um registro, pois têm um significado especial para alguns dos métodos do ILog.
Além das condições aqui, nenhuma suposição deve ser feita sobre como os LSNs são atribuídos por uma implementação do ILog. Em particular, não é seguro assumir que os registros serão atribuídos valores sequenciais para LSNs.

Depois que um registro é acrescentado ao log, ele pode não ser modificado. No entanto, quando registros gravados anteriormente não são mais necessários, por exemplo, registros de alterações em uma transação que já foi confirmada, o ILog dá suporte ao truncamento do log. Dessa forma, o espaço em disco usado para registros não essenciais pode ser reutilizado. Truncar o log consiste em excluir todos os registros com um LSN menor que um valor especificado.

Como otimização de desempenho, algumas implementações do ILog podem armazenar registros em buffer na memória até que o log seja forçado. Se esse for o caso, especial, você deverá considerar o controle de erro e a recuperação. Considere a seguinte situação:

  1. O registro A é acrescentado ao log, mas o log não é forçado. A implementação do ILog copia o registro para um buffer na memória e retorna um código de êxito.
  2. O registro B é acrescentado ao log e a implementação do ILog decide forçar o log para o disco. Isso ocorre porque o chamador pediu que o log fosse forçado ou porque o buffer de memória está cheio. No entanto, a operação de gravação falha, por exemplo, devido ao baixo espaço em disco.
Nessa situação, seria inadequado que a implementação do ILog permitisse que registros adicionais fossem acrescentados ao log, a menos que ele possa garantir que todos os registros para os quais ele retornou um código de êxito sejam gravados primeiro no disco. Um método possível de controle de erro seria fixar o log em um estado de erro quando essa situação ocorrer, não permitindo permanentemente gravações adicionais na instância de log. Os chamadores que não forçam o log para o disco de cada registro acrescentado devem perceber que essa situação pode ocorrer e ser capazes de lidar com ela adequadamente.

Implementação baseada em arquivo ILog

O sistema operacional Windows fornece uma implementação baseada em arquivo do ILog, que permite que você crie um log adequado para o log de gravação antecipada em um arquivo. O log usa um arquivo como um buffer circular, o que permite que o espaço não utilizado seja reutilizado. Isso também pode aumentar o tamanho do arquivo que pode ser necessário para ajustar registros adicionais quando o log estiver cheio. As alterações no log são feitas atomicamente, para que o conteúdo do log possa ser recuperado após uma falha. Essa implementação usa um buffer na memória para acrescentar registros de log. Como resultado, não há garantia de que os registros sejam gravados em disco quando o método ILog::AppendRecord retornar, a menos que o chamador solicite que o log seja forçado.

Use o CLSID a seguir para criar uma instância de um log baseado em arquivo (consulte CoCreateInstance):

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

A implementação baseada em arquivo do ILog também dá suporte às interfaces IFileBasedLogInit e IPersistFile . Use IFileBasedLogInit::InitNew para criar um novo arquivo de log. Use IPersistFile::Load para abrir um arquivo de log existente.

Essa implementação usa uma política de controle de erro simples. Se qualquer um dos métodos falhar devido a um erro no nível do sistema de arquivos, que inclui um erro de disco completo, o log será fixado em um estado de erro. Isso impede que os clientes acrescentem registros adicionais ao arquivo ou leiam registros potencialmente ruins. Para continuar a usar o arquivo de log, você deve criar uma nova instância do log.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho txlogpub.h

Confira também

IFileBasedLogInit