Erro: sp_change_secondary_role falha com erro 3101 se há backups de log de transações pendentes

Traduções deste artigo Traduções deste artigo
ID do artigo: 294397 - Exibir os produtos aos quais esse artigo se aplica.
BUG #: 352508 (SHILOH)
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

Procedimento armazenado no servidor de um par de envio de log em espera executar sp_change_secondary_role falha com uma mensagem de erro 3101 se as duas condições a seguir forem verdadeiras:

  • Um valor de 1 é passado para o argumento @ Encerrar . Observe que isso também é o valor padrão para esse parâmetro.
  • Há pelo menos um log de transação pendente a ser aplicada no servidor em espera.
Se você executar o trabalho RESTORE LOG no servidor de espera usando xp_sqlmaint procedimento estendido neste ponto, o resultado é:
Banco de dados de origem - teste
Banco de dados de destino - teste
[Microsoft SQL-DMO (SQLState ODBC: 42000)]
Erro 3101: Acesso exclusivo [Microsoft] [ODBC SQL Server Driver] [SQL Server] não foi possível obter porque o banco de dados está em uso.
[Microsoft][ODBC SQL Server Driver][SQL Server]RESTORE LOG está finalizando de forma anormal.
Arquivos carregados 0
NULO
Carregamento concluído para plano SERVER1\INST1.test_logshipping

Servidor: Mensagem 22029, nível 16, estado 1, linha 0
sqlmaint.exe falhou.

Causa

Se o envio de log é configurado entre dois servidores, e você precisará colocar online o servidor secundário ou em espera, você pode executar o procedimento sp_change_secondary_role armazenados no servidor de espera para colocar online o servidor secundário ou em espera. Se você executar o procedimento sp_change_secondary_role armazenado com os parâmetros padrão, o procedimento armazenado executa essas tarefas:

  • Configura o banco de dados em espera para o modo usuário único.
  • Copia quaisquer arquivos extras que talvez precise ser copiado.
  • Desativa o trabalho de cópia no servidor em espera.
  • Restaura os logs de transação pendente.
  • Abre o banco de dados on-line no servidor secundário.
  • Executa alguns faxina no log de remessa plano tabelas no banco de dados msdb , porque essas informações agora precisam ser atualizado.
Se o procedimento sp_change_secondary_role armazenado for passado um valor de @ Encerrar = 1 (que também é o valor de entrada padrão para o parâmetro @ Finalizar ), o item 1 na seqüência anterior usa um
ALTER DATABASE dbname SET SINGLE_USER
comando para alterar o estado do banco de dados e garantir que nenhum usuário está conectado enquanto a operação RESTORE é tentada. Faz com no entanto, a instrução ALTER DATABASE que ela tenha um bloqueio de banco de dados compartilhado que permanece em vigor até que a conexão seja encerrado. Itens 2 e 4 são executadas usando xp_sqlmaint estendido procedimento, que abre uma conexão separada com o servidor, para que essas etapas usam uma id de processo do servidor ( spid ) que seja diferente do spid da conexão sp_change_secondary_role original. Como resultado, o bloqueio do banco de dados compartilhado que é mantido pelos blocos de spid procedimento armazenado a tarefa RESTORE LOG que xp_sqlmaint tenta para concluir. Portanto, o procedimento sp_change_secondary_role falhar com uma mensagem de erro 3101.

Como Contornar

Para evitar esse erro, use um dos seguintes soluções:
  • Certifique-se que não há nenhum log de transação pendente antes de executar o procedimento sp_change_secondary_role armazenados. Executando manualmente o trabalho RESTORE no servidor secundário antes de executar sp_change_secondary_role garante que sejam não logs de transação pendente.

    - ou -
  • Você poderia passar o valor de zero para o @ Encerrar parâmetro (@ terminate = 0) enquanto você executa o procedimento sp_change_secondary_role armazenados. No entanto, o usuário deve verificar que não existem usuários conectados ao banco de dados antes do procedimento armazenado é executado para garantir que o RESTORE LOG funcione com êxito.

Situação

A Microsoft confirmou que este é um problema no SQL Server 2000.

Mais Informações

sp_change_secondary_role é um procedimento armazenado do sistema que você executar no servidor em espera quando você deseja colocar o servidor espera on-line.

REFERÊNCIAS

Manuais online do SQL Server; tópico: "Como configurar e executar um log de alteração da função (Transact-SQL) de envio"

Propriedades

ID do artigo: 294397 - Última revisão: sexta-feira, 25 de junho de 2004 - Revisão: 3.3
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Enterprise Edition
  • Microsoft SQL Server 2000 Developer Edition
Palavras-chave: 
kbmt kbbug kbpending KB294397 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 294397

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com