Erro: sp_change_secondary_role falha com erro 3101 se existem cópias de segurança do registo de transacções pendentes

Traduções de Artigos Traduções de Artigos
Artigo: 294397 - Ver produtos para os quais este artigo se aplica.
N.º DE BUGS: 352508 (SHILOH)
Expandir tudo | Reduzir tudo

Nesta página

Sintomas

Executar sp_change_secondary_role procedimento armazenado no servidor em modo de espera de um registo de envio par falha com uma mensagem de erro 3101 se ambas as condições seguintes forem verdadeiras:

  • Um valor de 1 é transmitido para o argumento @ Terminar . Note que isto também é o valor predefinido para este parâmetro.
  • Existe pelo menos um registo de transacções pendentes a ser aplicado no servidor em espera.
Se executar a tarefa de REG RESTORE no servidor em modo de suspensão utilizando xp_sqlmaint expandido procedimento nesta altura, a saída é:
Base de dados de origem - teste
Base de dados de destino - teste
[Microsoft SQL-DMO (SQLState ODBC: 42000)]
Erro 3101: [Microsoft] [ODBC SQL Server controlador] [servidor SQL] acesso em modo exclusivo não foi possível obter porque a base de dados.
[Microsoft][Controlador ODBC SQL Server][Servidor SQL]REG RESTORE está a terminar irregularmente.
0 Ficheiros carregados
NULO
Carregamento concluído plano SERVER1\INST1.test_logshipping

Servidor: Erro 22029, nível de 16, estado 1, linha 0
Sqlmaint.exe falhou.

Causa

Se envio do registo está configurado entre dois servidores e tem de colocar online o servidor secundário ou de suspensão, pode executar o procedimento sp_change_secondary_role armazenados no servidor em modo de espera para colocar online o servidor secundário ou de suspensão. Se executar o procedimento sp_change_secondary_role armazenada com os parâmetros predefinidos, o procedimento armazenado executa estas tarefas:

  • Define a base de dados em modo de espera para modo de utilizador único.
  • Copia quaisquer ficheiros adicionais que poderão ter para serem copiados.
  • Desactiva a tarefa de cópia no servidor em espera.
  • Restaura quaisquer registos de transacções pendentes.
  • Apresenta a base de dados online no servidor secundário.
  • Efectua algumas organização no registo de envio plano tabelas na base de dados msdb porque essa informação agora tem de ser actualizado.
Se o procedimento armazenado sp_change_secondary_role é passado um valor de @ terminate = 1 (que também é o valor de entrada predefinido para o parâmetro @ Terminar ), item 1 na sequência anterior utiliza um
ALTER DATABASE dbname SET SINGLE_USER
comandos para alterar o estado da base de dados e assegurar que os utilizadores não estão ligados enquanto a operação de RESTAURO é tentada. No entanto, a instrução ALTER DATABASE causa a tirar um bloqueio de base de dados partilhada permanece em vigor até a ligação termina. Itens 2 e 4 são executadas utilizando xp_sqlmaint expandido procedimento abre uma ligação separada ao servidor, para que estes passos utilizam um id de processo de servidor ( spid ) é diferente de spid da ligação sp_change_secondary_role original. Como resultado, o bloqueio de base de dados partilhada que é mantido por blocos de spid os procedimento armazenado a tarefa de REG RESTORE que xp_sqlmaint tenta concluir. Por conseguinte, o procedimento sp_change_secondary_role falha com uma mensagem de erro 3101.

Como contornar

Para evitar este erro, utilize um dos seguintes soluções:
  • Certifique-se que não sem registos de transacções pendentes antes de executar o procedimento de sp_change_secondary_role armazenados. Executar manualmente a tarefa de RESTAURO no servidor secundário antes de executar sp_change_secondary_role garante que são não registos de transacções pendentes.

    - ou -
  • Pode passar o valor de zero para o @ Terminar parâmetro (@ terminate = 0) enquanto executar o procedimento de sp_change_secondary_role armazenados. No entanto, o utilizador deve verificar que existem não utilizadores ligados à base de dados antes do procedimento armazenado é executado para garantir que o REG RESTORE funciona com êxito.

Ponto Da Situação

Microsoft confirmou que este problema existe no SQL Server 2000.

Mais Informação

sp_change_secondary_role é um procedimento armazenado do sistema que executa no servidor em modo de suspensão quando pretende colocar online o servidor em espera.

REFERÊNCIAS

SQL Server Books Online; tópico: "Como configurar e efectuar um registo de envio de alteração de função (Transact-SQL)"

Propriedades

Artigo: 294397 - Última revisão: 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 revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes 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