Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Instância Gerenciada de SQL do Azure
Solucionar problemas de erros de replicação pode ser frustrante sem uma compreensão básica de como a replicação transacional funciona. A primeira etapa para se criar uma publicação é fazer com que o Agente de Instantâneo crie o instantâneo e salvá-lo na pasta de instantâneos. Em seguida, o Agente de Distribuição aplica o instantâneo ao assinante.
Esse processo cria a publicação e a coloca no estado sincronizando. A sincronização funciona em três fases:
As transações ocorrerem em objetos que são replicados e marcados como "para replicação" no log de transações.
O Agente de Leitor de Log examina o log de transações e procura por transações marcadas como "para replicação". Essas transações são então salvas no banco de dados de distribuição.
O Agente de Distribuição examina o banco de dados de distribuição usando o thread de leitura. Em seguida, usando o thread de gravação, esse agente se conecta ao assinante para aplicar essas alterações ao assinante.
Erros podem ocorrer em qualquer etapa desse processo. Localizar os erros pode ser o aspecto mais difícil da solução de problemas de sincronização. Felizmente, o uso do Replication Monitor facilita esse processo.
Observação
A finalidade deste guia de solução de problemas é ensinar a metodologia para essa atividade. Ele foi projetado não para resolver o erro específico, mas para fornecer diretrizes gerais sobre como localizar erros com a replicação. Alguns exemplos específicos são fornecidos, mas a resolução para eles pode variar dependendo do ambiente. Os erros de exemplo são baseados no Tutorial: Configurar a replicação entre dois servidores totalmente conectados (transacional).
Metodologia de solução de problemas
Perguntas a fazer
- Em que ponto do processo de sincronização a replicação está falhando?
- Qual agente está sofrendo um erro?
- Quando foi a última vez em que a replicação teve êxito? Alguma coisa foi alterada desde então?
Etapas a serem realizadas
Use o Replication Monitor para identificar em que ponto a replicação está encontrando o erro (qual agente?):
- Se os erros estão ocorrendo na seção do Publicador para o Distribuidor, o problema é com o Agente de Leitor de Log.
- Se os erros estão ocorrendo na seção do Distribuidor para o Assinante, o problema é com o Agente de Distribuição.
Examine o histórico de trabalhos do agente no Monitor de Atividade do Trabalho para identificar os detalhes do erro. Se o histórico de trabalhos não estiver mostrando detalhes suficientes, você poderá habilitar o log detalhado nesse agente específico.
Tente determinar uma solução para o erro.
Localizar erros com o Agente de Instantâneo
O Agente de Instantâneo gera o instantâneo e grava-o na pasta de instantâneos especificada.
Exiba o status do Agente de Instantâneo:
No Pesquisador de Objetos, expanda o nó Publicação Local em Replicação.
Clique com o botão direito do mouse na publicação AdvWorksProductTrans>Exibir o Status do Agente de Instantâneo.
Se um erro for relatado no status do Agente de Instantâneo, mais detalhes poderão ser encontrados no histórico de trabalhos do Agente de Instantâneo:
Expanda SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade do Trabalho.
Classifique por Categoria e identifique o Agente de Instantâneo pela categoria REPL-Snapshot.
Clique com o botão direito do mouse no Agente de Instantâneo e selecione Exibir Histórico.
No histórico do Agente de Instantâneo, selecione a entrada de log relevante. Isso geralmente é uma linha ou duas antes da entrada que está relatando o erro. (Um X vermelho indica erros.) Examine o texto da mensagem na caixa abaixo dos logs:
The replication agent had encountered an exception. Exception Message: Access to path '\\node1\repldata.....' is denied.
Se as permissões do Windows não estiverem configuradas corretamente para sua pasta de instantâneo, você verá um erro de "acesso negado" para o Agente de Instantâneo. Você precisa verificar as permissões para a pasta em que o instantâneo está armazenado e verificar se a conta usada para executar o Snapshot Agent tem permissões para acessar o compartilhamento.
Localizar erros com o Agente de Leitor de Log
O Agente de Leitor de Log se conecta ao banco de dados publicador e verifica o log de transações em busca de todas as transações marcadas como "para replicação". Em seguida, ele adiciona essas transações ao banco de dados de distribuição.
Conecte-se ao publicador no SQL Server Management Studio. Expanda o nó de servidor, clique com o botão direito do mouse na pasta Replicação e, em seguida, selecione Iniciar o Replication Monitor:
O Monitor de replicação abrirá:
O X vermelho indica que a publicação não está sincronizando. Expanda Meus Publicadores no lado esquerdo e, em seguida, expanda o servidor do publicador relevante.
Selecione a publicação AdvWorksProductTrans à esquerda e, em seguida, procure o X vermelho em uma das guias para identificar onde está o problema. Nesse caso, o X vermelho está na guia Agentes, indicando que um dos agentes está apresentando um erro:
Selecione a guia Agentes para identificar qual agente está encontrando o erro:
Esta exibição mostra dois agentes, o Agente de Instantâneo e o Agente de Leitor de Log. Aquele que está encontrando um erro tem um X vermelho. Nesse caso, é o Agente de Leitor de Log.
Clique duas vezes na linha que está relatando o erro para abrir o histórico do Agente de Leitor de Log. Esse histórico fornece mais informações sobre o erro:
Status: 0, code: 20011, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'. The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'. Status: 0, code: 15517, text: 'Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission.'. Status: 0, code: 22037, text: 'The process could not execute 'sp_replcmds' on 'NODE1\SQL2016'.'.O erro normalmente ocorre quando o proprietário do banco de dados do publicador não está definido corretamente. Isso pode ocorrer quando um banco de dados é restaurado. Para verificar isso:
Expanda Bancos de Dados no Pesquisador de Objetos.
Clique com o botão direito do mouse em AdventureWorks2025>Propriedades.
Verifique se existe um proprietário na página Arquivos. Se essa caixa estiver vazia, esta será a causa provável do problema.
Se o proprietário estiver em branco na página Arquivos, abra uma janela Nova Consulta dentro do contexto do banco de dados
AdventureWorks2025. Execute o seguinte código T-SQL:-- set the owner of the database to 'sa' or a specific user account, without the brackets. EXECUTE sp_changedbowner '<useraccount>'; -- example for sa: exec sp_changedbowner 'sa' -- example for user account: exec sp_changedbowner 'sqlrepro\administrator'Talvez você precise reiniciar o Agente de Leitor de Log:
Expanda o nó do SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade do Trabalho.
Classifique por Categoria e identifique o Agente de Leitor de Log pela categoria REPL-LogReader.
Clique com o botão direito do mouse no trabalho do Agente de Leitor de Log e selecione Iniciar Trabalho na Etapa.
Valide se agora a publicação está sincronizando abrindo o Replication Monitor novamente. Se ainda ele ainda não estiver aberto, ele poderá ser encontrado clicando com o botão direito do mouse em Replicação no Pesquisador de Objetos.
Selecione a publicação AdvWorksProductTrans, selecione a guia Agentes e clique duas vezes no Agente de Leitor de Log para abrir o histórico do agente. Agora você deverá ver que o Agente de Leitor de Log está em execução e replicando comandos ou que ele mostra a mensagem "nenhuma transação replicada":
Encontrar erros com o Agente de Distribuição
O Agente de Distribuição localiza os dados no banco de dados de distribuição e, em seguida, aplica-os ao assinante.
Conecte-se ao publicador no SQL Server Management Studio. Expanda o nó de servidor, clique com o botão direito do mouse na pasta Replicação e, em seguida, selecione Iniciar o Replication Monitor.
Em Replication Monitor, selecione a publicação AdvWorksProductTrans e a guia Todas as Assinaturas. Clique com o botão direito do mouse na assinatura e selecione Ver Detalhes:
A caixa de diálogo Histórico do Distribuidor para Assinante é aberta e esclarece qual é o erro que o agente está apresentando:
Error messages: Agent 'NODE1\SQL2016-AdventureWorks2022-AdvWorksProductTrans-NODE2\SQL2016-7' is retrying after an error. 89 retries attempted. See agent job history in the Jobs folder for more details.O erro indica que o Agente de Distribuição está tentando novamente. Para obter mais informações, verifique o histórico de trabalhos do Agente de Distribuição:
Expanda SQL Server Agent em Pesquisador de Objetos >Monitor de Atividade do Trabalho.
Classifique os trabalhos por Categoria.
Identifique o Agente de Distribuição pela categoria REPL-Distribution. Clique com o botão direito do mouse no agente e selecione Exibir Histórico.
Selecione uma das entradas de erro e exiba o texto de erro na parte inferior da janela:
Message: Unable to start execution of step 2 (reason: Error authenticating proxy NODE1\repl_distribution, system error: The user name or password is incorrect.)Esse erro é uma indicação de que a senha usada pelo Agente de Distribuição está incorreta. Para resolvê-lo:
Expanda o nó Replicação no Pesquisador de Objetos.
Clique com o botão direito do mouse na assinatura >Propriedades.
Selecione as reticências (...) ao lado de Conta de Processo do Agente e modifique a senha.
Verifique o Replication Monitor novamente clicando com o botão direito do mouse em Replicação no Pesquisador de Objetos. Um X vermelho em Todas as Assinaturas indica que o Agente de Distribuição ainda está encontrando um erro.
Abra o histórico de Distribuição ao Assinante clicando com o botão direito do mouse na assinatura em Replication Monitor>Exibir Detalhes. Aqui, o erro agora é diferente:
Connecting to Subscriber 'NODE2\SQL2016' Agent message code 20084. The process could not connect to Subscriber 'NODE2\SQL2016'. Number: 18456 Message: Login failed for user 'NODE2\repl_distribution'.Esse erro indica que o Agente de Distribuição não pôde se conectar ao assinante porque o logon falhou para o usuário NODE2\repl_distribution. Para investigar melhor, conecte-se ao assinante e abra o log de erros do SQL Server atual no nó Gerenciamento do Pesquisador de Objetos:
Se você está vendo esse erro, o logon está ausente no assinante. Para resolver esse erro, consulte Requisitos de função de segurança para replicação.
Depois que o erro de logon for resolvido, verifique o Replication Monitor novamente. Se todos os problemas foram resolvidos, você deverá ver uma seta verde ao lado do Nome da Publicação e o status Em execução em Todas as Assinaturas.
Clique com o botão direito do mouse na assinatura para abrir o histórico do Distribuidor para Assinante mais uma vez para verificar o êxito. Se essa for a primeira vez que o Agente de Distribuição é executado, você verá que o instantâneo foi copiado em massa para o assinante:
Localizar erros com o Merge Agent
O agente de mesclagem pode levar muito tempo para replicar as alterações. Para determinar qual etapa do processo de sincronização de replicação de mesclagem leva mais tempo, use o sinalizador de rastreamento 101 junto com o log do agente de mesclagem. Para fazer isso, use os parâmetros a seguir para os parâmetros do agente de mesclagem e, em seguida, reinicie o agente:
-T 101
-output
-outputverboselevel
Observação
Se você precisar gravar estatísticas na tabela <distribution-server>..msmerge_history, use o flag de rastreamento 102.
Um exemplo de saída do agente de mesclagem após a conclusão da sincronização da replicação de mesclagem é o seguinte:
**************************************************************
CONNECTION TIMES --> time took to establish the connection to the servers. Publisher (all connections) 156 msec Subscriber (all connections) 32 msec Distributor 93 msec
**************************************************************
UPLOAD COUNTERS --> upload phase (changes from the Sub to the Pub) stats MakeGeneration Time = 343 msec. InsertGenHistory Time = 31 msec. UpdateGenHistory Time = 0 msec. ProxiedMetadata Time = 0 msec.
**************************************************************
DOWNLOAD COUNTERS --> download phase (changes from the Pub to the Sub) stats MakeGeneration Time = 219 msec. InsertGenHistory Time = 0 msec. UpdateGenHistory Time = 0 msec.
**************************************************************
RETENTION-BASED CLEANUP STATISTICS --> sp_mergemetadataretentioncleanup proc stats Publisher: Cleanup Time 281 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_tombstone rows cleaned up 0 Subscriber: Cleanup Time 187 msec MSmerge_genhistory rows cleaned up 0 MSmerge_contents rows cleaned up 0 MSmerge_rowtrack rows cleaned up 0 MSmerge_tombstone rows cleaned up 0
**************************************************************
RETRY STATISTICS Retry Time (Upload) 0 msec. Retry Time (Download) 0 msec. Total changes retried 0 Number of Iterations through rows needing retry 0 Total number of changes that failed despite retry 0
**************************************************************
PROXY METADATA QUEUE COUNTERS Queue Full: Number of Waits: 0, Total Wait Time: 0 msec
**************************************************************
Distributor-side History Logging Time = 219 msec. Number of Distributor-side History Messages Logged = 11 Subscriber-side History Logging Time = 295 msec. Number of Subscriber-side History Messages Logged = 11
**************************************************************
2013-05-28 17:24:11.820 OLE DB Subscriber '<SQL Server name>\sql2008r2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.822 OLE DB Publisher '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) 2013-05-28 17:24:11.824 OLE DB Distributor '<SQL Server name>\SQL2008R2': DBCC SQLPERF (NETSTATS) NETWORK STATISTICS Server Reads Writes Bytes Read Bytes Written Publisher 74 74 19112 37526 Subscriber 73 73 19032 36931 Distributor 75 75 19192 38121
**************************************************************
NETWORK STATUS Network Connection: The computer has one or more LAN cards that are active. Network link speed: Destination Incoming Outgoing Publisher Unreachable Unreachable Subscriber Unreachable Unreachable Distributor Unreachable Unreachable
**************************************************************
Habilitar o log detalhado em qualquer agente
Você pode usar o log detalhado para ver informações mais detalhadas sobre erros que ocorrem com qualquer agente na topologia de replicação. As etapas são as mesmas para cada agente. Apenas verifique se você está selecionando o agente correto no Monitor de Atividade do Trabalho.
Observação
Os agentes podem estar no fornecedor ou no assinante, dependendo de se tratar de uma assinatura pull ou push. Se o agente não estiver disponível no servidor que você está investigando, verifique o outro servidor.
Decida onde você deseja que o log detalhado seja salvo e verifique se a pasta existe. Este exemplo usa c:\temp.
Expanda o nó do SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade do Trabalho.
Classifique por Categoria e identifique o agente de interesse. Este exemplo usa o Agente de Leitor de Log. Clique com o botão direito do mouse no agente de interesse >Propriedades.
Selecione a página Etapas e, em seguida, realce a etapa Executar agente. Selecione Editar.
Na caixa Comando, inicie uma nova linha, digite o texto a seguir e selecione OK:
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3Você pode modificar o local e o nível de detalhes de acordo com sua preferência.
Ao adicionar o parâmetro de saída detalhado, os seguintes problemas poderão fazer com que o agente falhe ou que o arquivo de saída fique ausente:
Há um problema de formatação onde o traço se tornou um hífen.
O local não existe no disco, ou a conta que está executando o agente não tem permissão para gravar no local especificado.
Há um espaço ausente entre o último parâmetro e o parâmetro
-Output.Diferentes agentes dão suporte a diferentes níveis de detalhamento. Se você habilitar o log detalhado mas seu agente falhar ao iniciar, tente diminuir o nível de detalhes especificado por 1.
Reinicie o Agente de Leitor de Log clicando com o botão direito do mouse no agente >Parar o Trabalho na Etapa. Atualize selecionando o ícone Atualização da barra de ferramentas. Clique com o botão direito do mouse no agente >Iniciar Trabalho na Etapa.
Examine a saída no disco.
Para desabilitar o log detalhado, siga as mesmas etapas anteriores para remover toda a linha
-Outputque você adicionou anteriormente.
Conteúdo relacionado
Obter ajuda
- Ideias para SQL: Tem sugestões para melhorar o SQL Server?
- Microsoft Q&A (SQL Server)
- DBA Stack Exchange (marcação sql-server): Fazer perguntas sobre o SQL Server
- Stack Overflow (marcação sql-server): respostas a perguntas sobre desenvolvimento de SQL
- Informações e termos de licença do Microsoft SQL Server
- Opções de suporte para usuários empresariais
- Ajuda e comentários adicionais sobre o SQL Server
Contribua com a documentação do SQL
Você sabia que pode editar conteúdo do SQL por conta própria? Ao fazer isso, além de melhorar nossa documentação, você também será creditado como um colaborador da página.
Para obter mais informações, consulte Editar a documentação do Microsoft Learn.