Lectura de registros de datos desde un flujo CLFS

Hay dos tipos de registros en un flujo del Sistema de archivos de registro común (CLFS): registros de datos y registros de reinicio. En este tema se explica cómo leer una secuencia de registros de datos de una secuencia. Para obtener información sobre cómo leer los registros de reinicio, vea Lectura de registros de reinicio desde un flujo CLFS.

Hay varias variaciones en la lectura de una secuencia de registros de datos de una secuencia. Puede leer hacia delante en la secuencia desde un registro especificado o leer hacia atrás a lo largo de una cadena de registros vinculados.

Para todas las variaciones en la lectura de una secuencia de registros de datos, complete los pasos siguientes.

  1. Llame a ClfsReadLogRecord para obtener un contexto de lectura y el primer registro de datos de la secuencia.

  2. Pase el contexto de lectura que obtuvo en el paso 1 a ClfsReadNextLogRecord repetidamente para obtener los registros de datos restantes en la secuencia.

Precaución Los contextos de lectura no son seguros para subprocesos. Los clientes son responsables de serializar el acceso a contextos de lectura.

En los subtemas siguientes se describen los detalles de la lectura de los diferentes tipos de secuencias y cadenas de registros.

Lectura hacia delante de un registro de datos especificado

Para leer el reenvío en una secuencia CLSF (a partir del registro de datos de su elección), debe crear un contexto de lectura que tenga su modo establecido en ClfsContextForward. Para crear un contexto de lectura y leer el primer registro (en el conjunto que ha elegido leer), llame a ClfsReadLogRecord como se muestra en la tabla siguiente.

Nombre de parámetro Value

pvMarshalContext

Proporcione un puntero a un área de serialización.

plsnFirst

Proporcione el LSN del primer registro que desea leer. Debe ser el LSN de un registro de datos, no un registro de reinicio.

peContextMode

Proporcione el valor ClfsContextForward.

ppvReadBuffer

Reciba los datos del registro.

pcbReadBuffer

Reciba el tamaño de los datos del registro.

peRecordType

Reciba el tipo de registro. Este valor es un conjunto de marcas que indican varias características del registro. El registro es un registro de datos, por lo que el valor que recibe debe tener la marca ClfsDataRecord establecida y la marca ClfsRestartRecord desactivada.

plsnUndoNext

Reciba el LSN de deshacer siguiente del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnPrevious

Reciba el LSN anterior del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

ppvReadContext

Recibir un puntero a un contexto de lectura opaco. Use el contexto de lectura para leer los registros posteriores.

Después de haber obtenido el contexto de lectura y el primer registro, puede obtener los registros posteriores en la secuencia llamando a ClfsReadNextLogRecord repetidamente. Cuando no hay más registros de datos en la secuencia, ClfsReadNextLogRecord devuelve STATUS_END_OF_FILE. En la tabla siguiente se muestra cómo establecer e interpretar los parámetros.

Nombre de parámetro Value

pvReadContext

Proporcione un puntero al contexto de lectura que recibió de ClfsReadLogRecord.

ppvBuffer

Reciba los datos del registro.

pcbBuffer

Reciba el tamaño de los datos del registro.

peRecordType

Proporcione el valor de ClfsDataRecord.

plsnUndoNext

Reciba el campo LSN de deshacer siguiente del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnPrevious

Reciba el campo anterior-LSN del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnRecord

Reciba el LSN del registro de datos que se leyó.

Lectura de una cadena de registros de datos vinculados por el LSN anterior

Al escribir un registro de datos en una secuencia CLFS, puede establecer el LSN anterior del registro de datos en el LSN de cualquier registro que haya escrito anteriormente en la secuencia. Al establecer el LSN anterior, puede crear una cadena de registros relacionados que se pueden recorrer posteriormente en orden inverso. Por ejemplo, supongamos que está realizando una transacción de base de datos y debe escribir varias entradas de registro clFS para describir las actualizaciones realizadas por la transacción. Cada vez que escribe un registro que describe una actualización de transacción, puede establecer el LSN anterior del registro en el LSN del registro anterior que describe una actualización realizada por la misma transacción.

Supongamos que ha escrito una cadena de registros de datos vinculados por sus LSN anteriores. Para leer la cadena de registros, debe crear un contexto de lectura que tenga su modo establecido en ClfsContextPrevious. Para crear un contexto de lectura y leer el primer registro de la cadena, llame a ClfsReadLogRecord como se muestra en la tabla siguiente.

Nombre de parámetro Value

pvMarshalContext

Proporcione un puntero a un área de serialización.

plsnFirst

Proporcione el LSN del primer registro de la cadena. Debe ser el LSN de un registro de datos, no un registro de reinicio.

peContextMode

Proporcione el valor de ClfsContextPrevious.

ppvReadBuffer

Reciba los datos del registro.

pcbReadBuffer

Reciba el tamaño de los datos del registro.

peRecordType

Reciba el tipo de registro. Este valor es un conjunto de marcas que indican varias características del registro. El registro es un registro de datos, por lo que el valor que recibe debe tener la marca ClfsDataRecord establecida y la marca ClfsRestartRecord desactivada.

plsnUndoNext

Reciba el LSN de deshacer siguiente del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnPrevious

Reciba el LSN anterior del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

ppvReadContext

Recibir un puntero a un contexto de lectura opaco. Use el contexto de lectura para leer los registros anteriores de la cadena.

Después de tener el contexto de lectura y el primer registro, puede leer los registros restantes de la cadena llamando a ClfsReadNextLogRecord repetidamente. En la tabla siguiente se muestra cómo establecer e interpretar los parámetros.

Nombre de parámetro Value

pvReadContext

Proporcione un puntero al contexto de lectura que recibió de ClfsReadLogRecord.

ppvBuffer

Reciba los datos del registro.

pcbBuffer

Reciba el tamaño de los datos del registro.

peRecordType

Proporcione el valor de ClfsDataRecord.

plsnUndoNext

Reciba el LSN de deshacer siguiente del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnPrevious

Reciba el LSN anterior del registro de datos. No necesita este valor para continuar leyendo la cadena, por lo que puede omitirlo.

plsnRecord

Reciba el LSN del registro de datos que se leyó.

A medida que realice llamadas repetidas a ClfsReadNextLogRecord, la secuencia de llamadas finalizará de una de las maneras siguientes.

  • Finalmente, leerá un registro de datos que tiene su LSN anterior establecido en CLFS_LSN_INVALID. La próxima vez que llame a ClfsReadNextLogRecord, devolverá STATUS_END_OF_FILE.

  • Finalmente, leerá un registro de datos que tiene un LSN anterior que es menor que el LSN base de la secuencia y la cola de archivo de la secuencia. La próxima vez que llame a ClfsReadNextLogRecord, devolverá STATUS_LOG_START_OF_LOG.

Lectura de una cadena de registros de datos vinculados por el LSN de deshacer-next

Al escribir un registro de datos en una secuencia CLFS, puede establecer el LSN de deshacer siguiente del registro de datos en el LSN de cualquier registro que haya escrito anteriormente en la secuencia. Al establecer el LSN undo-next, puede crear una cadena de registros relacionados que se pueden recorrer en orden inverso. Para obtener más información sobre cómo crear e interpretar cadenas de deshacer a continuación, vea Números de secuencia de registro clFS.

Supongamos que ha escrito una cadena de registros de datos que están vinculados por sus LSN de deshacer a continuación. Para leer la cadena de registros, debe llamar a ClfsReadLogRecord para crear un contexto de lectura que tenga su modo establecido en ClfsContextUndoNext. Después, el proceso es idéntico a leer una cadena vinculada por LSN anteriores (descrita anteriormente en este tema).

Lectura de una cadena de registros de datos vinculados por el LSN de usuario

Además de las cadenas vinculadas por LSN anteriores y LSN de deshacer siguientes, puede crear cadenas vinculadas por sus propios LSN que inserte en los datos de registro.

Supongamos que ha escrito una cadena de registros de datos vinculados por LSN que ha almacenado en los propios datos de registro. Para leer la cadena de registros, debe crear un contexto de lectura que tenga su modo establecido en ClfsContextPrevious o ClfsContextUndoNext. Cree el contexto de lectura y obtenga el registro escrito más recientemente en la cadena llamando a ClfsReadLogRecord. A continuación, llame a ClfsReadNextLogRecord repetidamente para obtener los registros anteriores de la cadena. Cada vez que llame a ClfsReadNextLogRecord, establezca el parámetro plsnUser en el LSN del registro anterior de la cadena. El LSN que proporcione en plsnUser invalida los valores almacenados en los campos LSN anteriores o LSN del registro actual.

Tenga en cuenta que solo puede retroceder en la secuencia cuando llame a ClfsReadNextLogRecord para leer una cadena de registros. El LSN que proporcione en plsnUser debe ser menor que el LSN del registro actual de la cadena.