Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Managed Instance
A solução de 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 na criação de uma publicação é fazer com que o Snapshot Agent crie o snapshot e salve-o na pasta do snapshot. Em seguida, o Distribution Agent aplica o snapshot ao assinante.
Este processo cria a publicação e coloca-a no estado de sincronização . A sincronização funciona em três fases:
As transações ocorrem em objetos que são replicados e são marcados como "para replicação" no log de transações.
O Log Reader Agent verifica o log de transações e procura transações marcadas como "para replicação". Essas transações são salvas no banco de dados de distribuição.
O Distribution Agent verifica o banco de dados de distribuição usando o thread do leitor. Em seguida, usando o thread do gravador, esse agente se conecta ao assinante para aplicar essas alterações ao assinante.
Erros podem ocorrer em qualquer etapa deste processo. Encontrar esses erros pode ser o aspeto mais desafiador da solução de problemas de sincronização. Felizmente, o uso do Replication Monitor facilita esse processo.
Observação
O objetivo deste guia de solução de problemas é ensinar a metodologia de solução de problemas. Ele foi projetado não para resolver seu erro específico, mas para fornecer orientação geral na localização de erros com 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 Tutorial: Configurar a replicação entre dois servidores totalmente conectados (transacionais).
Metodologia de solução de problemas
Perguntas a fazer
- Onde no processo de sincronização a replicação está falhando?
- Qual agente está apresentando um erro?
- Quando foi a última vez que a replicação funcionou com êxito? Mudou alguma coisa desde então?
Passos a dar
Use o Replication Monitor para identificar em que ponto a replicação está encontrando o erro (qual agente?):
- Se estiverem ocorrendo erros na seção Publicador para Distribuidor , o problema é com o Log Reader Agent.
- Se estiverem a ocorrer erros na secção Distribuidor para Subscritor , o problema é com o Agente de Distribuição.
Examine o histórico de trabalho desse agente no Monitor de Atividade de Trabalho para identificar detalhes do erro. Se o histórico de trabalhos não estiver mostrando detalhes suficientes, você poderá habilitar o registro detalhado nesse agente específico.
Tente determinar uma solução para o erro.
Localizar erros com o Snapshot Agent
O Snapshot Agent gera o snapshot e grava-o na pasta de snapshot especificada.
Veja o status do seu Snapshot Agent:
No Explorador de Objetos, expanda o nó Publicação Local em Replicação.
Clique com o botão direito do rato na sua publicação AdvWorksProductTrans>Ver Estado do Agente de Instantâneos.
Se um erro for relatado no status do Snapshot Agent, você poderá encontrar mais detalhes no histórico de trabalhos do Snapshot Agent:
Expanda SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade de Trabalho.
Classifique por categoria e identifique o agente de instantâneo pela categoria REPL-Snapshot.
Clique com o botão direito do mouse no Snapshot Agent e selecione Exibir histórico.
No histórico do Snapshot Agent, selecione a entrada de log relevante. Normalmente, trata-se de uma ou duas linhas antes da entrada que está a comunicar o erro. (Um X vermelho indica erros.) Reveja o texto da mensagem na caixa abaixo dos registos:
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 a pasta de instantâneo, você verá um erro "acesso negado" para o Snapshot Agent. Você precisa verificar as permissões para a pasta onde o snapshot está armazenado e certificar-se de que a conta usada para executar o Snapshot Agent tem permissões para acessar o compartilhamento.
Localizar erros com o Log Reader Agent
O Log Reader Agent se conecta ao banco de dados do editor e verifica o log de transações em busca de transações marcadas como "para replicação". Em seguida, adiciona essas transações ao banco de dados de distribuição.
Conecte-se ao editor no SQL Server Management Studio. Expanda o nó do servidor, clique com o botão direito na pasta Replicação e selecione Iniciar o Monitor de Replicação:
O Replication Monitor abre:
O X vermelho indica que a publicação não está sincronizada. Expanda Meus Editores no lado esquerdo e, em seguida, expanda o servidor de editor relevante.
Selecione a publicação AdvWorksProductTrans à esquerda e procure o X vermelho em uma das guias para identificar onde está o problema. Nesse caso, o X vermelho está na guia Agentes , portanto, um dos agentes está encontrando um erro:
Selecione a guia Agentes para identificar qual agente está encontrando o erro:
Esta exibição mostra-lhe dois agentes, o agente de instantâneos e o agente leitor de registos. Aquele que está encontrando um erro tem o X vermelho. Neste caso, é o Log Reader Agent.
Clique duas vezes na linha que está relatando o erro para abrir o histórico do agente para o Log Reader Agent. Este 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 editor não está definido corretamente. Isso pode acontecer quando um banco de dados é restaurado. Para verificar esta situação:
Expanda Bancos de Dados no Pesquisador de Objetos.
Clique com o botão direito em AdventureWorks2025>Propriedades.
Verifique se existe um proprietário na página Arquivos . Se esta caixa estiver em branco, esta é a causa provável do seu problema.
Se o proprietário estiver em branco na página Arquivos, abra uma janela Nova Consulta no contexto da base 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 seja necessário reiniciar o Log Reader Agent:
Expanda o nó SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade de Trabalho.
Classifique por categoria e identifique o Log Reader Agent pela categoria REPL-LogReader .
Clique com o botão direito do rato no trabalho do Log Reader Agent e selecione Iniciar Trabalho no Passo.
Valide se sua publicação está sincronizando abrindo o Replication Monitor novamente. Se ainda não estiver aberto, você poderá encontrá-lo 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 Log Reader Agent para abrir o histórico do agente. Agora você deve ver que o Log Reader Agent está em execução e está replicando comandos ou não tem "nenhuma transação replicada":
Localizar erros com o Distribution Agent
O Agente de Distribuição localiza os dados no banco de dados de distribuição e, em seguida, os aplica ao assinante.
Conecte-se ao editor no SQL Server Management Studio. Expanda o nó do servidor, clique com o botão direito do mouse na pasta Replicação e selecione Iniciar o Replication Monitor.
No Replication Monitor, selecione a publicação AdvWorksProductTrans e selecione a guia Todas as assinaturas . Clique com o botão direito do rato na subscrição e selecione Ver Detalhes:
A caixa de diálogo Histórico do Distribuidor para Assinante é aberta e esclarece qual erro o agente está encontrando:
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 Distribution Agent está tentando novamente. Para obter mais informações, verifique o histórico de trabalhos do Agente de Distribuição:
Expanda SQL Server Agent no Explorador de Objetos >Monitor de Atividade de 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 visualize o texto do 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.)Este erro indica que a senha que o agente de distribuição usado está incorreta. Para resolvê-lo:
Expanda o nó Replicação no Explorador de Objetos.
Clique com o botão direito do rato nas > da subscrição.
Selecione as reticências (...) ao lado de Conta de processo do agente e altere a palavra-passe.
Verifique o Monitor de Replicação novamente, clicando com o botão direito do mouse em Replicação no Pesquisador de Objetos. Um X vermelho em Todas as Subscrições indica que o Agente de Distribuição ainda está a encontrar um erro.
Abra o Histórico de Distribuição para o Assinante clicando com o botão direito do mouse na assinatura em Replication Monitor e depois selecione >. 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 Distribution Agent não pôde se conectar ao assinante, porque o login falhou para o usuário NODE2\repl_distribution. Para investigar mais, conecte-se ao assinante e abra o log de erros atual do SQL Server no nó Gerenciamento no Pesquisador de Objetos:
Se você estiver vendo esse erro, o login está faltando no assinante. Para resolver esse erro, consulte Requisitos de função de segurança para replicação.
Depois que o erro de login for resolvido, verifique o Replication Monitor novamente. Se todos os problemas tiverem sido resolvidos, deverá ver uma seta verde junto a Nome da Publicação e um estado em Execução em Todas as Subscrições.
Clique com o botão direito do rato na subscrição para abrir novamente o histórico do Distribuidor para Subscritor e verificar o sucesso. Se esta for a primeira vez que estiver a executar o Distribution Agent, verá que o snapshot foi copiado em bloco 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 juntamente com o log do agente de mesclagem. Para tal, utilize os parâmetros seguintes para os parâmetros do agente de intercalação e, em seguida, reinicie o agente:
-T 101
-output
-outputverboselevel
Observação
Se tiver que escrever estatísticas na tabela <distribution-server>..msmerge_history, use o indicador de rastreamento 102.
Uma saída de exemplo do agente de mesclagem após a conclusão da sincronização da replicação de mesclagem é a 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
**************************************************************
Habilite o registro detalhado em qualquer agente
Pode utilizar o registo verboso para ver informações mais detalhadas sobre os erros que ocorrem com qualquer agente na topologia de replicação. As etapas são as mesmas para cada agente. Apenas certifique-se de que está a selecionar o agente correto no Monitor de Atividade de Trabalho.
Observação
Os agentes podem estar no editor ou no assinante, dependendo se é 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 deseja que o log detalhado seja salvo e verifique se a pasta existe. Este exemplo usa c:\temp.
Expanda o nó SQL Server Agent no Pesquisador de Objetos e abra o Monitor de Atividade de Trabalho.
Ordene por Categoria e identifique o agente de interesse. Este exemplo usa o Log Reader Agent. Clique com o botão direito do rato no agente de interesse >e selecione Propriedades.
Selecione a página Etapas e realce a etapa Executar agente . Selecione Editar.
Na caixa Comando, inicie uma nova linha, digite o seguinte texto e selecione OK:
-Output C:\Temp\OUTPUTFILE.txt -Outputverboselevel 3Você pode modificar a localização e o nível de detalhamento de acordo com as suas preferências.
Ao adicionar o parâmetro de saída detalhado, os seguintes problemas podem fazer com que seu agente falhe ou que o arquivo de saída esteja ausente:
Há um problema de formatação em que 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 faltando entre o último parâmetro e o
-Outputparâmetro.Diferentes agentes suportam diferentes níveis de verbosidade. Se você habilitar o registro detalhado, mas o agente não conseguir iniciar, tente diminuir o nível de detalhamento especificado em 1.
Reinicie o Log Reader Agent clicando com o botão direito do mouse no agente >Stop Job at Step. Atualize selecionando o ícone Atualizar na barra de ferramentas. Clique com o botão direito do mouse no agente >Start Job at Step.
Reveja o conteúdo no disco.
Para desativar o registro detalhado, siga as mesmas etapas anteriores para remover a linha
-Outputque 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 (tag sql-server): Faça perguntas sobre o SQL Server
- Stack Overflow (tag sql-server): respostas a perguntas de desenvolvimento SQL
- Termos e informações de licença do Microsoft SQL Server
- Opções de suporte para utilizadores empresariais
- Ajuda e comentários adicionais do SQL Server
Contribuir para a documentação do SQL
Você sabia que você mesmo pode editar conteúdo SQL? Se o fizer, não só ajudará a melhorar a nossa documentação, como também será creditado como contribuidor da página.
Para obter mais informações, consulte Editar a documentação do Microsoft Learn.