SQL Server erro de declaração ao tentar executar uma instrução Inserção em Massa ou BCP

Este artigo ajuda você a resolve o problema que ocorre quando você tenta executar uma BULK INSERT operação ouBCP.

Versão original do produto: SQL Server 2008 R2 Enterprise, SQL Server 2008 Enterprise
Número de KB original: 2700641

Sintomas

Considere o seguinte cenário:

  • O Servidor A e o Servidor B estão executando o Microsoft SQL Server 2008 ou SQL Server 2008 R2.

  • Você configurou o espelhamento de banco de dados entre o Servidor A e o Servidor B.

  • Você executa uma BULK INSERT instrução ou BCP no banco de dados principal.

    Observação

    Por padrão, a opção CHECK_CONSTRAINTS é definida como desativada quando você executa uma BULK INSERT instrução ou BCP .

  • O espelhamento de banco de dados está quebrado e a sessão de espelhamento de banco de dados insere o estado SUSPEND.

Nesse cenário, ocorre uma declaração no servidor espelho. Portanto, um arquivo de mini-despejo é criado na pasta de log SQL Server. Além disso, você verá o seguinte erro no log de erros do SQL Server no servidor espelho:

Observação

Você deve reinitializar o espelhamento de banco de dados para resolve esse problema.

Motivo

Esse problema ocorre porque as informações de compatibilidade de bloqueio no log de transações do banco de dados principal não são transferidas para o servidor espelho.

Solução alternativa

Para contornar esse problema, execute a BULK INSERT instrução ou BCP no banco de dados principal usando a opção CHECK_CONSTRAINTS .

Observação

A opção CHECK_CONSTRAINTS causa um desempenho mais lento. No entanto, a declaração de bloqueio no servidor espelho não ocorre.

Mais informações

Durante uma BULK INSERT operação ou BCP , uma transação filho desativa a opção CHECK_CONSTRAINTS . Essa transação filho usa um bloqueio compatível com os bloqueios de transação pai. As informações de compatibilidade são armazenadas no log de transações do banco de dados principal. Portanto, a solicitação de bloqueio de transação filho é concedida no banco de dados principal.

No entanto, essas informações de compatibilidade não são transferidas para o servidor espelho. Portanto, a solicitação de bloqueio de transação filho é incompatível com os bloqueios de transação pai no servidor espelho. Esse cenário faz com que a declaração no servidor espelho.