Falha de declaração em um servidor espelho ao usar SQL Server arquitetura de espelhamento

Este artigo discute uma falha de declaração do Microsoft SQL Server que pode ocorrer em um servidor parceiro ao usar SQL Server arquitetura de espelhamento.

Versão original do produto: SQL Server 2014, SQL Server 2012, SQL Server 2008 R2, SQL Server 2008
Número de KB original: 2729953

Sintomas

Em SQL Server arquitetura de espelhamento, você pode encontrar uma SQL Server declaração marcar falha no servidor do parceiro (espelho). Nesse caso, marcar o log de erros SQL Server para obter detalhes. No log, você encontrará uma mensagem de erro que se assemelha à mensagem a seguir. Esse erro geralmente significa que você deve recompilar o par espelho.

declaração SQL Server: arquivo: loglock.cpp, line=834 Declaração de falha = 'result == LCK_OK' . Esse erro pode estar relacionado ao tempo. Se o erro persistir depois de executar novamente a instrução, use o DBCC CHECKDB para marcar banco de dados para integridade estrutural ou reinicie o servidor para garantir que as estruturas de dados na memória não estejam corrompidas.

Erro: 3624, Gravidade: 20, Estado: 1.

Normalmente, uma falha de declaração é causada por um bug de software ou corrupção de dados. Para marcar para corrupção de banco de dados, considere executar DBCC CHECKDB. Se você concordar em enviar despejos para a Microsoft durante a instalação, um minidump será enviado para a Microsoft. Uma atualização pode estar disponível da Microsoft no Service Pack mais recente ou em um QFE de Suporte Técnico.

Observação

Quando esse problema ocorre, um arquivo de minidump é gerado na pasta SQL Server log de erros. Este arquivo tem um nome que se assemelha ao nome do arquivo SQLDumpnnnn.mdmp .

Motivo

Esse problema pode ocorrer em cenários diferentes. Cada cenário tem uma causa e resolução diferentes, e cada cenário pode causar a mesma mensagem de erro e falha de declaração.

Observação

  • Embora a assinatura de erro pareça ser muito específica, o erro real é causado por uma afirmação que falhou. Por exemplo, o erro pode ser causado por uma declaração que executa uma marcar proativa no código SQL Server que valida condições saudáveis para falhar o mais limpo possível em vez de causar uma falha em todo o processo.
  • Você não pode determinar facilmente a causa real. Os Serviços de Suporte ao Cliente da Microsoft geralmente determinam a causa. Geralmente, ele é feito coletando o arquivo de backup completo do banco de dados principal e os backups de log de transações que abrangem a hora do problema. Além disso, um arquivo de despejo de processo completo do espelho pode ser necessário para reproduzir o problema em configurações específicas.

Resolução

Para resolve esse problema, obtenha a correção mais recente para sua versão do SQL Server. Para obter mais informações, consulte a tabela a seguir.

Motivo Artigo base de dados de conhecimento Primeiro corrigido em
Comportamento de bloqueio diferente entre o primário e o espelho 2938828 FIX: as visualizações de espelhamento de banco de dados afirmam e a sessão de espelhamento mostra o estado suspenso em SQL Server 2012 ou SQL Server 2014 2931693 Atualização Cumulativa 1 para SQL Server 2014, 2931078 Atualização Cumulativa 9 para SQL Server 2012 SP1
Inserção em massa/BCP com Check_Constraints OFF SQL Server 2012
Alteração das chaves de criptografia: chave master de banco de dados, master de instância do servidor SQL Server 2012

Observação

  • Na tabela anterior, a última coluna lista apenas o primeiro build que contém a correção. Como SQL Server builds são cumulativos, builds posteriores, como SQL Server 2014 SP1 contém essas correções. No entanto, esses builds não estão listados na tabela.
  • Para obter mais informações sobre como obter o pacote de serviço mais recente para sua versão do SQL Server, consulte Determinar a versão, a edição e o nível de atualização. O cenário BCP/Bulk Insert é um cenário comum que permanece não fixado para SQL Server 2008 e SQL Server 2008 R2, e é a causa mais provável conhecida de declarações lck_ok nessas versões. O problema foi corrigido pela primeira vez em SQL Server 2012. O motivo para não corrigir isso nas versões anteriores é que ele requer uma nova arquitetura de SQL Server internos de log de transações. Essa alteração só pode ser incluída com uma grande versão do SQL Server.

Confira também

Declaração ao executar Inserção em Massa ou BCP