Partilhar via


O trabalho de captura de CDC falha ao processar alterações para uma tabela com o tipo de dados CLR do sistema (geometry, geography ou hierarchyid)

Este artigo ajuda você a contornar o problema em que um trabalho de captura de CDC falha quando você processa alterações para uma tabela que tem um tipo de dados CLR do sistema (geometria, geografia ou hierarchyid).

Aplica-se a: SQL Server
Número original do KB: 4538384

Sintomas

Considere o cenário a seguir.

  • Você habilita o recurso CDC (Captura de Dados de Alteração) em uma tabela que tem o tipo de dados CLR do sistema, como geometry, geography ou hierarchyid.
  • O trabalho de captura (verificação) CDC está processando alterações relacionadas a outras tabelas. O processo ainda não atingiu a tabela que tem o tipo de dados CLR do sistema.
  • Você faz algumas alterações na DML (Linguagem de Manipulação de Dados) na tabela que tem o tipo de dados CLR do sistema. Em seguida, você faz alterações na DDL (Linguagem de Definição de Dados) na mesma tabela (por exemplo, você adiciona uma coluna).

Nesse cenário, quando o trabalho de captura de CDC começa a processar a tabela que tem o tipo de dados CLR do sistema, ele falha e retorna a seguinte mensagem de erro:

Msg 18805, Nível 16, Estado 1, Procedimento sp_replcmds, LineLineNumber[Batch Start Line LineNumber ]
O processo de verificação de log falhou ao construir um comando replicado a partir do LSN (número de sequência de log) {nnnnnnnn: nnnnnnnn: nnnn}. Faça backup do banco de dados de publicação e contate os Serviços de Atendimento ao Cliente.
Msg 22859, Nível 16, Estado 2, Procedimento sp_replcmds, Número da Linha [Número da Linha de Início do Lote]
A Verificação do Log não processou registros de log. Consulte os erros anteriores na sessão atual para identificar a causa e corrigir quaisquer problemas associados.
Msg 3621, Nível 16, Estado 6, Procedimento sp_replcmds, Número da Linha [Número da Linha de Início do Lote]
A instrução foi finalizada.
Msg 22864, Nível 16, Estado 1, Procedimento sp_MScdc_capture_job, Line LineNumber[Batch Start Line LineNumber ]
Falha na chamada para sp_MScdc_capture_job pelo Trabalho de Captura do banco de dados 'DatabaseName'. Examine os erros anteriores para obter a causa da falha.

Além disso, a seguinte entrada pode ser registrada no log de erros:

Erro: 913, Gravidade: 16, Estado: 16. Não foi possível encontrar o IDID do banco de dados. O banco de dados talvez ainda não esteja ativado ou esteja em transição. Emita a consulta novamente depois que o banco de dados estiver disponível. Se você não acha que esse erro é devido a um banco de dados que está fazendo a transição de estado e esse erro continua ocorrendo.

Mais informações

Esse problema não ocorrerá se o trabalho de captura de CDC processar inicialmente apenas o DML e, em seguida, processar a alteração de DDL na próxima execução.

Solução alternativa

Para contornar esse problema, tente um dos seguintes métodos:

  • Evite usar os tipos de dados problemáticos (geometry, geography, hierarchyid) junto com o CDC.

  • Certifique-se de que você não tenha alterações DML em andamento ao fazer alterações DDL em tabelas que tenham tipos de dados geometry, geography ou hierarchyid. Para evitar esse problema, siga estas etapas:

    1. Desative todo o DML para a tabela.
    2. Execute um trabalho de captura para processar as alterações.
    3. Execute DDL para a tabela.
    4. Execute um trabalho de captura para processar as alterações DDL.
    5. Reative o processamento DML.

    Observação

    Se você continuar a ter esse problema, desabilite e reative o CDC na tabela.