Falha no trabalho de captura do CDC ao processar alterações para uma tabela com o tipo de dados CLR do sistema (geometria, geografia ou hierarquia)

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

Aplica-se ao: SQL Server
Número de KB original: 4538384

Sintomas

Considere o seguinte cenário:

  • Você habilita o recurso CDC (Captura de Dados de Alteração) em uma tabela que tem o tipo de dados CLR do sistema, como geometria, geografia ou hierarquia.
  • O trabalho de captura do CDC (verificação) 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 de DML (Linguagem de Manipulação de Dados) na tabela que tem o tipo de dados CLR do sistema. Em seguida, você faz alterações de DDL (Linguagem de Definição de Dados) na mesma tabela (por exemplo, você adiciona uma coluna).

Nesse cenário, quando o trabalho de captura do 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[Linha de Início do LoteNumber ]
O Processo Log-Scan falhou ao construir um comando replicado a partir do número de sequência de log (LSN) {nnnnnnnnnn: nnnnnnnn: nnnn}. Faça backup do banco de dados de publicação e entre em contato com os Serviços de Suporte ao Cliente.
Msg 22859, Nível 16, Estado 2, Procedimento sp_replcmds, LineNumber [LineNumber da Linha de Início em Lote ]
Falha no processo de verificação de log no processamento de registros de log. Consulte erros anteriores na sessão atual para identificar a causa e corrigir quaisquer problemas associados.
Msg 3621, Nível 16, Estado 6, Sp_replcmds de Procedimento, LineNumber [Linha inicial em loteNumber ]
A instrução foi encerrada.
Msg 22864, Nível 16, Estado 1, Procedimento sp_MScdc_capture_job, LineNumber[Linha de Início do LoteNumber ]
A chamada para sp_MScdc_capture_job pelo Trabalho de Captura do banco de dados 'DatabaseName' falhou. Examine os erros anteriores da causa da falha.

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

Erro: 913, Severidade: 16, Estado: 16. Não foi possível localizar o IDID do banco de dados. O banco de dados ainda não pode ser ativado ou pode estar em transição. Reemissar a consulta 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 do estado e esse erro continua a ocorrer.

Mais informações

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

Solução alternativa

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

  • Evite usar os tipos de dados problemáticos (geometria, geografia, hierarchyid) junto com CDC.

  • Verifique se você não tem alterações de DML a bordo ao fazer alterações de DDL em tabelas que tenham tipos de dados geometry, geografia ou hierarchyid. Para evitar esse problema, siga estas etapas:

    1. Quiesce todos os DML para a tabela.
    2. Execute um trabalho de captura para processar as alterações.
    3. Execute o DDL para a tabela.
    4. Execute um trabalho de captura para processar as alterações de DDL.
    5. Habilitar novamente o processamento DML.

    Observação

    Se você continuar a enfrentar esse problema, desabilite e habilite novamente o CDC na tabela.