Compartir a través de


Interfaz ILog (txlogpub.h)

Proporciona funcionalidad genérica de registro de bajo nivel.

El sistema de archivos de registro común (CLFS), proporciona una funcionalidad que es un superconjunto de que proporciona ILog.

Herencia

La interfaz ILog hereda de la interfaz IUnknown . ILog también tiene estos tipos de miembros:

Métodos

La interfaz ILog tiene estos métodos.

 
ILog::AppendRecord

Escriba un registro nuevo al final del registro.
ILog::Force

Fuerza el contenido del registro al disco, al menos hasta el LSN especificado.
ILog::GetLogLimits

Recupera información sobre los límites actuales del registro.
ILog::ReadRecord

Lee un registro del registro.
ILog::ReadRecordPrefix

Lee una parte inicial de un registro del registro.
ILog::SetAccessPolicyHint

Proporciona una sugerencia a la implementación sobre el patrón en el que se leerán los registros.
ILog::TruncatePrefix

Elimina el prefijo especificado del registro, lo que hace que ya no se pueda recuperar.

Comentarios

WAL es una técnica que usan determinadas aplicaciones, como sistemas de administración de bases de datos, para implementar transacciones atómicas y aisladas. Esta técnica implica escribir registros de cambios en los recursos de la aplicación en un registro antes de realizar estos cambios. De este modo, los cambios se pueden revertir si son necesarios, por ejemplo, si se produce un error en la transacción o se interrumpe. Para que las aplicaciones proporcionen transacciones sólidas contra interrupciones, como bloqueo del sistema o error de energía, la implementación del registro debe proporcionar un método para forzar el registro; es decir, para asegurarse de que los registros escritos anteriormente están en el disco antes de continuar.

Escribir registros que usan ILog es una operación secuencial; es decir, los nuevos registros siempre se anexan al final del registro. A cada registro anexado al registro se le asigna un número de secuencia de registro (LSN), un identificador numérico que se puede usar para recuperar el registro más adelante. El LSN de tipo de datos es una definición de tipo para LARGE_INTEGER, un valor de 64 bits con signo; sin embargo, ILog solo usa LSN con valores no negativos. Además, los LSN deben cumplir las condiciones siguientes:

  • Los LSN están aumentando monotónicamente; si el registro B se escribe en el registro después del registro A, el LSN del registro B debe ser mayor que el LSN del registro A.
  • Los valores de cero y MAXLSN (0x7FFFFFFFFFFFFFFF) nunca se deben usar como LSN de un registro, ya que tienen un significado especial para algunos de los métodos de ILog.
Aparte de las condiciones aquí, no se debe realizar ninguna suposición sobre cómo se asignan los LSN mediante una implementación de ILog. En concreto, no es seguro suponer que los registros se asignarán valores secuenciales para los LSN.

Después de anexar un registro al registro, es posible que no se modifique. Sin embargo, cuando los registros escritos anteriormente ya no son necesarios, por ejemplo, registros de cambios en una transacción que ya se ha confirmado, ILog admite truncar el registro. De este modo, se puede reutilizar el espacio en disco que se usó para los registros no esenciales. Truncar el registro consiste en eliminar todos los registros con un LSN menor que un valor especificado.

Como optimización del rendimiento, algunas implementaciones de ILog pueden almacenar en búfer registros en memoria hasta que se fuerza el registro. Si este es el caso, especial debe tener en cuenta el control de errores y la recuperación. Considere la siguiente situación:

  1. El registro A se anexa al registro, pero el registro no se fuerza. La implementación de ILog copia el registro en un búfer en la memoria y devuelve un código correcto.
  2. El registro B se anexa al registro y la implementación de ILog decide forzar el registro al disco. Esto se debe a que el autor de la llamada pidió al registro que se forzara o porque el búfer de memoria está lleno. Sin embargo, se produce un error en la operación de escritura, por ejemplo debido a poco espacio en disco.
En esta situación, sería inadecuado que la implementación de ILog permita anexar registros adicionales al registro, a menos que pueda garantizar que todos los registros para los que devolvió un código correcto se escriban primero en el disco. Un posible método de control de errores sería anclar el registro en un estado de error cuando se produzca esta situación, lo que impediría permanentemente escrituras adicionales en la instancia de registro. Los autores de llamadas que no fuerzan el registro al disco para cada registro anexado deben darse cuenta de que esta situación puede producirse y poder controlarlo correctamente.

Implementación basada en archivos de ILog

El sistema operativo Windows proporciona una implementación basada en archivos de ILog, que permite crear un registro adecuado para el registro de escritura anticipada en un archivo. El registro usa un archivo como un búfer circular, que permite reutilizar el espacio sin usar. Esto también puede aumentar el tamaño del archivo que puede ser necesario para ajustarse a registros adicionales cuando el registro está lleno. Los cambios realizados en el registro se realizan de forma atómica, de modo que el contenido del registro se pueda recuperar después de un bloqueo. Esta implementación usa un búfer en memoria para anexar registros de registro. Como resultado, no se garantiza que los registros se escriban en el disco cuando el método ILog::AppendRecord devuelva, a menos que el autor de la llamada solicite que se obligue el registro.

Use el clSID siguiente para crear una instancia de un registro basado en archivos (consulte CoCreateInstance):

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

La implementación basada en archivos de ILog también admite las interfaces IFileBasedLogInit e IPersistFile . Use IFileBasedLogInit::InitNew para crear un nuevo archivo de registro. Use IPersistFile::Load para abrir un archivo de registro existente.

Esta implementación usa una directiva de control de errores simple. Si se produce un error en alguno de los métodos debido a un error en el nivel de sistema de archivos, que incluye un error completo del disco, el registro se ancla en un estado de error. Esto impide que los clientes anexen registros adicionales al archivo o lean registros potencialmente incorrectos. Para seguir usando el archivo de registro, debe crear una nueva instancia del registro.

Requisitos

Requisito Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado txlogpub.h

Consulte también

IFileBasedLogInit