Lendo registros de dados de um fluxo CLFS
Há dois tipos de registros em um fluxo CLFS (Common Log File System): registros de dados e registros de reinicialização. Este tópico explica como ler uma sequência de registros de dados de um fluxo. Para obter informações sobre como ler registros de reinicialização, consulte Leitura de registros de reinicialização de um fluxo CLFS.
Há várias variações na leitura de uma sequência de registros de dados de um fluxo. Você pode ler para frente no fluxo de um registro especificado ou pode ler para trás ao longo de uma cadeia de registros vinculados.
Para todas as variações na leitura de uma sequência de registros de dados, conclua as etapas a seguir.
Chame ClfsReadLogRecord para obter um contexto de leitura e o primeiro registro de dados na sequência.
Passe o contexto de leitura obtido na etapa 1 para ClfsReadNextLogRecord repetidamente para obter os registros de dados restantes na sequência.
Cuidado Os contextos de leitura não são thread-safe. Os clientes são responsáveis por serializar o acesso a contextos de leitura.
Os subtópicos a seguir discutem os detalhes da leitura dos diferentes tipos de sequências e cadeias de registros.
Lendo para frente de um registro de dados especificado
Para ler adiante em um fluxo CLSF (começando no registro de dados de sua escolha), você deve criar um contexto de leitura que tenha seu modo definido como ClfsContextForward. Para criar um contexto de leitura e ler o primeiro registro (no conjunto que você escolheu ler), chame ClfsReadLogRecord , conforme mostrado na tabela a seguir.
Nome do parâmetro | Valor |
---|---|
pvMarshalContext |
Forneça um ponteiro para uma área de marshalling. |
plsnFirst |
Forneça o LSN do primeiro registro que você deseja ler. Esse deve ser o LSN de um registro de dados, não um registro de reinicialização. |
peContextMode |
Forneça o valor ClfsContextForward. |
ppvReadBuffer |
Receba seus dados de registro. |
pcbReadBuffer |
Receba o tamanho dos dados de registro. |
peRecordType |
Receba o tipo de registro. Esse valor é um conjunto de sinalizadores que indicam vários recursos do registro. O registro é um registro de dados, portanto, o valor recebido deve ter o sinalizador ClfsDataRecord definido e o sinalizador ClfsRestartRecord limpo. |
plsnUndoNext |
Receba o LSN de desfazer o próximo registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnPrevious |
Receba o LSN anterior do registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
ppvReadContext |
Receber um ponteiro para um contexto de leitura opaco. Use o contexto de leitura para ler os registros subsequentes. |
Depois de obter o contexto de leitura e o primeiro registro, você poderá obter registros subsequentes no fluxo chamando ClfsReadNextLogRecord repetidamente. Quando não há mais registros de dados no fluxo, ClfsReadNextLogRecord retorna STATUS_END_OF_FILE. A tabela a seguir mostra como definir e interpretar os parâmetros.
Nome do parâmetro | Valor |
---|---|
pvReadContext |
Forneça um ponteiro para o contexto de leitura recebido de ClfsReadLogRecord. |
ppvBuffer |
Receba seus dados de registro. |
pcbBuffer |
Receba o tamanho dos dados de registro. |
peRecordType |
Forneça o valor de ClfsDataRecord. |
plsnUndoNext |
Receba o próximo campo LSN do registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnPrevious |
Receba o campo LSN anterior do registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnRecord |
Receba o LSN do registro de dados que foi lido. |
Lendo uma cadeia de registros de dados vinculados pelo LSN anterior
Ao gravar um registro de dados em um fluxo CLFS, você pode definir o LSN anterior do registro de dados para o LSN de qualquer registro que você escreveu anteriormente no fluxo. Ao definir o LSN anterior, você pode criar uma cadeia de registros relacionados que mais tarde pode ser percorrida em ordem inversa. Por exemplo, suponha que você esteja executando uma transação de banco de dados e deve gravar vários registros de log CLFS para descrever as atualizações feitas pela transação. Sempre que você grava um registro de log que descreve uma atualização de transação, pode definir o LSN anterior do registro para o LSN do registro de log anterior que descreve uma atualização feita pela mesma transação.
Suponha que você tenha escrito uma cadeia de registros de dados que estão vinculados por seus LSNs anteriores. Para ler a cadeia de registros, você deve criar um contexto de leitura que tenha seu modo definido como ClfsContextPrevious. Para criar um contexto de leitura e ler o primeiro registro na cadeia, chame ClfsReadLogRecord , conforme mostrado na tabela a seguir.
Nome do parâmetro | Valor |
---|---|
pvMarshalContext |
Forneça um ponteiro para uma área de marshalling. |
plsnFirst |
Forneça o LSN do primeiro registro na cadeia. Esse deve ser o LSN de um registro de dados, não um registro de reinicialização. |
peContextMode |
Forneça o valor de ClfsContextPrevious. |
ppvReadBuffer |
Receba seus dados de registro. |
pcbReadBuffer |
Receba o tamanho dos dados de registro. |
peRecordType |
Receba o tipo de registro. Esse valor é um conjunto de sinalizadores que indicam vários recursos do registro. O registro é um registro de dados, portanto, o valor recebido deve ter o sinalizador ClfsDataRecord definido e o sinalizador ClfsRestartRecord limpo. |
plsnUndoNext |
Receba o LSN de desfazer o próximo registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnPrevious |
Receba o LSN anterior do registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
ppvReadContext |
Receber um ponteiro para um contexto de leitura opaco. Use o contexto de leitura para ler os registros anteriores na cadeia. |
Depois de ter o contexto de leitura e o primeiro registro, você pode ler os registros restantes na cadeia chamando ClfsReadNextLogRecord repetidamente. A tabela a seguir mostra como definir e interpretar os parâmetros.
Nome do parâmetro | Valor |
---|---|
pvReadContext |
Forneça um ponteiro para o contexto de leitura recebido de ClfsReadLogRecord. |
ppvBuffer |
Receba seus dados de registro. |
pcbBuffer |
Receba o tamanho dos dados de registro. |
peRecordType |
Forneça o valor de ClfsDataRecord. |
plsnUndoNext |
Receba o LSN de desfazer o próximo registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnPrevious |
Receba o LSN anterior do registro de dados. Você não precisa desse valor para continuar lendo a cadeia, para que possa ignorá-la. |
plsnRecord |
Receba o LSN do registro de dados que foi lido. |
À medida que você faz chamadas repetidas para ClfsReadNextLogRecord, sua sequência de chamadas terminará de uma das seguintes maneiras.
Eventualmente, você lerá um registro de dados que tem seu LSN anterior definido como CLFS_LSN_INVALID. Na próxima vez que você chamar ClfsReadNextLogRecord, ele retornará STATUS_END_OF_FILE.
Eventualmente, você lerá um registro de dados que tem um LSN anterior que é menor que o LSN base do fluxo e a parte final do arquivo morto do fluxo. Na próxima vez que você chamar ClfsReadNextLogRecord, ele retornará STATUS_LOG_START_OF_LOG.
Lendo uma cadeia de registros de dados vinculados pelo LSN de desfazer o próximo
Ao gravar um registro de dados em um fluxo CLFS, você pode definir o LSN de desfazer o próximo registro de dados para o LSN de qualquer registro que você escreveu anteriormente no fluxo. Ao definir o LSN de desfazer o próximo, você pode criar uma cadeia de registros relacionados que pode ser percorrida em ordem inversa. Para obter mais informações sobre como criar e interpretar cadeias de desfazer-próximas, consulte Números de sequência de log CLFS.
Suponha que você tenha gravado uma cadeia de registros de dados que estão vinculados por seus LSNs de desfazer próximos. Para ler a cadeia de registros, você deve chamar ClfsReadLogRecord para criar um contexto de leitura que tenha seu modo definido como ClfsContextUndoNext. Depois disso, o processo é idêntico à leitura de uma cadeia vinculada por LSNs anteriores (descrito anteriormente neste tópico).
Lendo uma cadeia de registros de dados vinculados pelo LSN do usuário
Além de cadeias vinculadas por LSNs anteriores e LSNs de desfazer o próximo, você pode criar cadeias vinculadas por seus próprios LSNs que inserem em seus dados de registro.
Suponha que você tenha gravado uma cadeia de registros de dados vinculados por LSNs armazenados nos próprios dados de registro. Para ler a cadeia de registros, você deve criar um contexto de leitura que tenha seu modo definido como ClfsContextPrevious ou ClfsContextUndoNext. Crie seu contexto de leitura e obtenha o registro gravado mais recentemente na cadeia chamando ClfsReadLogRecord. Em seguida, chame ClfsReadNextLogRecord repetidamente para obter os registros anteriores na cadeia. Sempre que você chamar ClfsReadNextLogRecord, defina o parâmetro plsnUser como o LSN do registro anterior em sua cadeia. O LSN fornecido em plsnUser substitui todos os valores armazenados nos campos LSN anteriores ou de desfazer o próximo registro atual.
Observe que você só pode se mover para trás no fluxo quando chamar ClfsReadNextLogRecord para ler uma cadeia de registros. O LSN fornecido no plsnUser deve ser menor que o LSN do registro atual na cadeia.