Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Solucionando problemas de replicação do SQL Server


No artigo anterior, Configurando e Configurando a Replicação do SQL Server, discutimos detalhadamente, o conceito de Replicação do SQL Server, seus componentes, tipos e como configurar a Replicação Transacional do SQL passo a passo. É altamente recomendável ler o artigo anterior e entender o conceito de replicação e seus componentes antes de ler este artigo. Neste artigo, veremos como solucionar problemas de um site de replicação do SQL Server existente.

Visão geral da solução de problemas


O principal objetivo da Replicação do SQL Server é manter os dados no Publicador e no Assinante sincronizados. No cenário feliz, se uma transação for executada e confirmada no banco de dados de publicação, ela será copiada para o banco de dados de distribuição e, em seguida, sincronizada e aplicada a todos os Assinantes conectados a esse Publicador. Se ocorrer um problema em qualquer etapa desse processo, as alterações do Publicador não estarão disponíveis no lado do Assinante. Nesse caso, precisamos solucionar e corrigir esse problema o mais rápido possível antes de terminar com um site de Replicação SQL expirado que deve ser sincronizado novamente do zero ou um banco de dados com seu arquivo de log de transações fica sem espaço livre, pausando todas as transações do banco de dados .

Identificar em qual etapa a sincronização de replicação está falhando e alocar uma mensagem de erro indicativa que leva à correção do problema é a parte mais desafiadora do processo de solução de problemas de replicação do SQL Server. Além disso, verificar o horário da última sincronização e quais alterações executadas nesse horário/após esse horário podem causar essa falha também pode ajudar na solução de problemas da falha de sincronização de replicação.

Compreender a função do agente de replicação do SQL Server ajudará a identificar em qual etapa a sincronização falhará. Lembre-se de que há três agentes de replicação comuns entre a maioria dos tipos de replicação do SQL Server. O Agente de instantâneo é responsável por criar o instantâneo de sincronização inicial. O Agente do leitor de log é responsável por ler as alterações do arquivo de log de transações do banco de dados e copiá-lo para o banco de dados de distribuição e, finalmente, a Distribuição agente responsável por sincronizar as alterações para os Assinantes.

Neste artigo, aproveitaremos o Replication Monitor e Monitor de atividade de trabalho janelas para monitorar o status da Replicação do SQL Server e obter informações sobre qualquer erro de falha de sincronização.

Cenários de solução de problemas


A maneira melhor e direta de entender como solucionar os problemas de replicação do SQL Server é fornecer cenários práticos e mostrar como corrigir esse problema específico. Vamos começar a discutir os cenários um por um.

Problema de serviço do SQL Server Agent


O serviço SQL Server Agent desempenha uma função vital no processo de sincronização de replicação do SQL Server. Isso se deve ao fato de que cada agente de replicação será executado em um trabalho do agente SQL.

Sendo um administrador de banco de dados proativo, você precisa verificar o status do site de replicação SQL diariamente. Para verificar o status do site de replicação, clique com o botão direito do mouse na publicação, no nó Replicação -> Publicações locais, e escolha Iniciar o monitor de replicação opção, como mostrado abaixo:



Na janela do Replication Monitor, você pode ver uma mensagem de aviso, mostrando que a replicação irá expirar em breve ou já expirou, sem ver nenhuma mensagem de erro indicativa, conforme abaixo:



Se a janela do Monitor de replicação não nos fornecer informações úteis sobre por que o site de replicação está expirando em breve, a próxima etapa é verificar o Monitor de atividade de trabalho no nó do SQL Server Agent. Visitando o nó do SQL Server Agent, você verá diretamente que o SQL Server Agent Service não está em execução (no círculo vermelho ao lado). Se o SQL Server Agent Service não estiver em execução, isso significa que todos os trabalhos criados nessa instância não estão funcionando, incluindo os trabalhos do agente de replicação. Como resultado, o site de replicação geral não está funcionando.

Para corrigir esse problema, precisamos iniciar o serviço SQL Server Agent diretamente do SQL Server Management Studio ou usando o SQL Server Configuration Manager (recomendado), conforme mostrado abaixo:



Depois de iniciar o serviço SQL Server Agent, verifique o Replication Monitor novamente e certifique-se de que o status do Assinante seja Executando e todas as transações pendentes são sincronizadas com o Assinante com sucesso. Você pode verificar essas etapas uma a uma, verificando se os registros são copiados da seção Publicador para Distribuidor:



Em seguida, sincronizado do Distribuidor para o Assinante com sucesso, conforme abaixo:



E, por fim, certifique-se de que não haja nenhuma transação não distribuída da última guia, conforme mostrado abaixo:



Depois disso, precisamos garantir que os trabalhos dos agentes de replicação estejam funcionando sem problemas. Os trabalhos do SQL Agent podem ser verificados expandindo o nó do SQL Server Agent no SSMS Object Explorer e visualizando o monitor de atividade do trabalho, em seguida, verifique se o Log Reader Agent e o agente Distributor estão em execução, levando em consideração que o Snapshot Agent funcionará apenas durante o processo de criação de instantâneo, conforme mostrado abaixo:



Você também pode revisar o histórico dos trabalhos dos agentes de replicação e verificar o motivo da falha anterior, clicando com o botão direito do mouse nesse trabalho e escolhendo Exibir histórico opção como abaixo:



Onde você pode encontrar uma mensagem de erro indicativa que ajude a superar esse problema no futuro, conforme abaixo:



Para superar o problema anterior, o modo de inicialização do serviço SQL Server Agent deve ser alterado de Manual para Automático, dessa forma você garantirá que o serviço seja iniciado automaticamente quando o servidor de hospedagem for reinicializado.

Problema de permissão do agente de instantâneo


Suponha que ao verificar o status da Replicação do SQL Server, usando o Replication Monitor, você notou que há uma falha de replicação, do sinal X dentro do círculo vermelho. E o Replication Monitor mostra que a falha é de um dos agentes de replicação, do sinal X dentro do círculo vermelho na parte superior da guia Agentes.

Para identificar essa falha de replicação, devemos navegar na guia Agentes e verificar qual agente está falhando. Na página Agentes, você verá que o Snapshot Agent é o que está com falha. Clique duas vezes no Snapshot Agent e revise a mensagem de erro abaixo:

O agente de replicação não registrou uma mensagem de progresso em 10 minutos. Isso pode indicar um agente que não responde ou alta atividade do sistema. Verifique se os registros estão sendo replicados para o destino e se as conexões com o Assinante, Publicador e Distribuidor ainda estão ativas.

Infelizmente, esta mensagem de erro é genérica e mostra apenas que o Snapshot Agent não está funcionando sem especificar o motivo, como segue:



Em seguida, precisamos procurar informações úteis em outro local, que é o trabalho do Snapshot Agent. Na janela Job Activity Monitor, no nó SQL Server Agent, você pode ver que o trabalho do Snapshot Agent falhou. E a partir desse histórico de trabalho, você pode ver que ele falhou recentemente, devido ao problema de autenticação de proxy. Em outras palavras, as credenciais da conta na qual o Snapshot Agent é executado não estão corretas, conforme mostrado abaixo:



Para corrigir o problema de credencial do Snapshot Agent, clique com o botão direito do mouse na publicação, no nó Replication -> Local Publication, e escolha as Propriedades opção. Na janela Propriedades da publicação, navegue até Segurança do agente página e reinsira as credenciais da conta na qual o Snapshot Agent será executado.

Depois de atualizar as credenciais da conta do Snapshot Agent, inicie o trabalho do Snapshot Agent novamente, na janela Job Activity Monitor, e verifique se o trabalho está funcionando bem, conforme abaixo:



Além disso, verifique se o Snapshot Agent está funcionando bem agora e a mensagem de erro não aparece mais no Replication Monitor, conforme mostrado abaixo:


Problema de permissão de pasta de instantâneo


Suponha que, ao tentar sincronizar o Publicador e o Assinante usando o instantâneo inicial ou ressincronizar o site de replicação de instantâneo usando um novo instantâneo, o processo de criação do instantâneo falhou com a mensagem de erro de acesso abaixo:



Essa mensagem de erro mostra que a conta na qual o Snapshot Agent está sendo executado não tem permissão para acessar a pasta de instantâneo especificada na mensagem de erro.

Para corrigir esse problema, precisamos verificar a conta na qual o Snapshot Agent está sendo executado, na página Agent Security da janela Publication Properties, conforme mostrado abaixo:



Em seguida, navegue na pasta de instantâneo especificada na mensagem de erro e certifique-se de que esta conta de instantâneo tenha permissão mínima de leitura e gravação nessa pasta, execute o Snapshot Agent novamente e verifique se o problema foi corrigido agora e o instantâneo de sincronização foi criado com êxito, conforme abaixo de:


Problema de permissão do assinante


Suponha que, ao verificar o status do site de Replicação do SQL Server, usando o Replication Monitor, você veja que há uma falha com o Assinante, conforme mostrado abaixo:



Se você clicar no ícone de erro, verá que a falha ocorreu ao tentar sincronizar as transações do Distribuidor para o Assinante. E pela mensagem de erro, fica claro que o Distribuidor não consegue se conectar à instância do Assinante do SQL Server devido a um problema de permissão, conforme mostrado abaixo:



Para corrigir esse problema, precisamos verificar e atualizar as credenciais usadas para se conectar à instância do Assinante. Para verificar as credenciais, clique com o botão direito do mouse na Assinatura no nó Replicação -> Publicações locais -> o nome da publicação atual e escolha a opção Propriedades. Da Conexão do Assinante campo na janela Propriedades do Assinante, atualize as credenciais da conta que será usada para se conectar à instância do Assinante, conforme mostrado abaixo:



Depois disso, verifique o status da replicação novamente no Replication Monitor e você verá que o problema de conexão do Assinante não está mais disponível e o site de replicação está funcionando normalmente, conforme mostrado abaixo:


Assinante não acessível


Outro problema de falha da Replicação do SQL Server que você pode enfrentar do lado do Assinante é que o Distribuidor não consegue se conectar ao Assinante, mostrando na página Distribuidor para o Assinante que não é capaz de abrir a conexão com o Assinante devido a “Rede Erro de conectividade relacionado … ”, mostrado na janela do Replication Monitor abaixo:



Essa mensagem de erro está indicando que há um problema de conexão entre a instância do Distribuidor e a instância do Assinante. A primeira e direta maneira de verificar esse problema de conectividade é certificar-se de que a instância do Assinante do SQL Server esteja online. Isso pode ser verificado no SQL Server Configuration Manager do lado do Assinante. Em nossa situação, podemos ver que o SQL Server Service no lado do Assinante está parado. Para corrigir esse problema, inicie o SQL Server Service e verifique no Replication Monitor se o site de replicação está sincronizado novamente, conforme mostrado abaixo. Para um problema de conectividade SQL mais avançado, verifique o documento MS de conectividade de solução de problemas:


Problema de permissão do banco de dados do assinante


Suponha que você esteja verificando o status de sincronização da Replicação do SQL Server, usando o Replication Monitor, e verifica-se que a replicação está falhando ao tentar replicar as alterações do Distribuidor para o Assinante. Ao clicar no erro do assinante, você verá que o O Distribuidor consegue alcançar o assinante e se conectar a ele, mas não consegue se conectar ao banco de dados de Assinatura devido à falta de problema de permissão, conforme mostrado abaixo:



Para corrigir esse problema, conecte-se ao Assinante e certifique-se de que a conta usada para se conectar ao banco de dados do Assinante seja membro da função fixa do banco de dados db_Owner, conforme mostrado abaixo:



Depois disso, verifique novamente o Replication Monitor e certifique-se de que o Distribuidor consiga acessar o banco de dados de assinaturas e replicar as alterações, conforme abaixo:


Problema de diferença de dados


Suponha que uma das equipes de desenvolvimento de banco de dados afirme que algumas alterações que são executadas na tabela Shifts no Publicador (SQL1) não são refletidas nos relatórios diários executados na instância do Assinante (SQL2) e ele forneceu o instantâneo abaixo que mostra que as alterações não são replicadas:



A primeira etapa para verificar o problema de sincronização de replicação é abrir o Replication Monitor e descobrir em qual etapa ele está falhando. No Replication Monitor, você pode ver que o Log Reader Agent está falhando, pois as alterações não são replicadas do Distribuidor para o Assinante, mas nenhuma mensagem clara é retornada desse agente, conforme mostrado abaixo:



Como não podemos encontrar uma mensagem de erro significativa no Replication Monitor, verificaremos o histórico do trabalho do Log Reader Agent, usando o Job Activity Monitor, que mostra que as credenciais da conta na qual o Log Reader Agent está sendo executado estão incorretas , como mostrado abaixo:



Para corrigir o problema de credenciais do Log Reader Agent, navegue na página Agent Security da janela Publication Properties e atualize as credenciais do Log Reader Agent com uma válida, conforme abaixo:



Verificando novamente o Replication Monitor, você verá que as alterações são replicadas com sucesso e que os dados são atualizados com as novas alterações de turnos, conforme mostrado abaixo:


Linha não encontrada no assinante


Vejamos a questão por outro lado. Digamos que haja uma alteração realizada na tabela de turnos conforme mostrado abaixo:



Mas essa alteração não é replicada para o Assinante e o site de Replicação do SQL Server geral falha. A partir do Replication Monitor, você pode ver que está falhando ao tentar fazer a mudança do Distribuidor para o Assinante, e falhou devido ao fato de não conseguir atualizar aquele registro específico com ID igual a 3, pois este registro não está disponível na tabela do banco de dados do Assinante, conforme mostrado abaixo:



Verificando esse registro no lado do Assinante (SQL2), você verá que o registro não está disponível, conforme abaixo:



Para superar esse problema, precisamos inserir esse registro novamente na tabela do banco de dados do Assinante e deixar que o Distribuidor tente atualizá-lo novamente, corrigindo o problema de falha de sincronização de replicação, conforme mostrado abaixo:



O SQL Server nos fornece uma opção para permitir que o site de replicação continue funcionando mesmo que seja encontrado um problema de inconsistência de dados, onde você pode corrigir manualmente esse problema de inconsistência posteriormente. Para fazer isso, no Replication Monitor, clique com o botão direito do mouse no Assinante e escolha Perfil do agente opção, como mostrado abaixo:



Na janela exibida, você pode atualizar o perfil do Log Reader Agent e permitir que ele continue replicando as alterações de dados caso haja um problema de inconsistência de dados, conforme mostrado abaixo:


Problema de assinatura não inicializada


Se o site de replicação ficar sem monitoramento por muito tempo e ocorrer uma falha sem correção por mais de três dias, o site de replicação será expirado e a assinatura será marcada como não inicializada, aguardando para ser reinicializada novamente usando um novo instantâneo . O mesmo cenário pode ser enfrentado ao criar uma nova Assinatura sem inicializá-la, conforme mostrado abaixo:



Para corrigir esse problema, devemos reinicializar essa Assinatura, clicando com o botão direito do mouse na Assinatura no nó Replicação -> Publicações locais e expandindo a Publicação, depois escolha a opção Reinicializar e marque esta Assinatura para Inicialização e prepare-a para receber uma nova instantâneo, como mostrado abaixo:



Se o status da assinatura permanecer não inicializado após a reinicialização, verifique o trabalho do Snapshot Agent, usando a janela Job Activity Monitor, e veja por que está falhando. No histórico do trabalho do Snapshot Agent, você verá que o trabalho falhou devido a um problema que determina o proprietário desse trabalho do agente, conforme mostrado abaixo:



Para superar esse problema, abra o trabalho do Snapshot Agent e altere o proprietário do trabalho para SA ou qualquer usuário administrador válido, e o trabalho será executado com êxito, conforme abaixo:



Agora você verá que o status da Assinatura mudou para Em execução, pois está aguardando o snapshot inicial para iniciar o processo de sincronização, conforme mostrado abaixo:



Para gerar um novo instantâneo, clique com o botão direito do mouse na publicação, no nó Replicação-> Publicações locais, e selecione Exibir status do agente de instantâneo opção.

Na janela aberta, clique no botão Iniciar para iniciar o processo de criação do instantâneo. Quando o snapshot que contém todos os artigos do Publisher for criado com sucesso, abra novamente o Replication Monitor e verifique o status da Assinatura, onde você verá que o snapshot é aplicado ao Assinante e sincronizado com o Publisher, conforme mostrado abaixo:


Problema do proprietário do banco de dados do editor


Suponha também que, ao verificar o status do site de replicação do SQL Server, usando o Replication Monitor, o site de replicação falhou e a falha foi detectada no Log Reader Agent. Verificando a mensagem de erro retornada desse agente, verifica-se que há um problema determinando o atual proprietário do banco de dados da Publicação, conforme mostrado abaixo:



Para corrigir esse problema, precisamos atualizar o proprietário do banco de dados de publicação atual, substituindo-o por um usuário de banco de dados válido, usando o SP_changedbowner procedimento armazenado do sistema, ou simplesmente a partir da janela de propriedades do banco de dados. Depois disso, execute o trabalho do Log Reader Agent novamente, usando a janela Job Activity Monitor, e valide se o problema do agente não está mais disponível, usando o Replication Monitor, conforme mostrado abaixo:


Conclusão


Neste artigo, demonstramos diferentes problemas que você pode enfrentar ao usar o recurso Replicação do SQL Server para copiar dados entre sites diferentes e como corrigir esses problemas.

É altamente recomendável manter o SQL Server Engine atualizado, com os SPs e CUs mais recentes, para que todos os bugs relacionados aos recursos de Replicação do SQL Server sejam corrigidos automaticamente. Por fim, como administrador de banco de dados proativo do SQL Server, fique de olho no site de replicação para corrigir qualquer problema desde o início, antes que ele se torne maior e mais difícil de corrigir.