AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 339345
Accepted
Hannah Vernon
Hannah Vernon
Asked: 2024-05-09 00:28:16 +0800 CST2024-05-09 00:28:16 +0800 CST 2024-05-09 00:28:16 +0800 CST

Executar sp_repldone em um nó secundário de um grupo de disponibilidade com @reset = 1 não funciona

  • 772

Eu tenho um grupo de disponibilidade do SQL Server 2019 de dois nós com um banco de dados que possui CDC habilitado para várias tabelas. O CDC é usado para rastrear transações que não foram capturadas para população em um data warehouse.

O Grupo de Disponibilidade é configurado com failover de várias sub-redes, com secundários legíveis.

O aplicativo replica as transações capturadas via CDC usando sp_repltrans para obter uma lista de transações, que então lê por meio da função não documentada fn_dump_dblog. Depois que uma transação for capturada e integrada ao data warehouse, o aplicativo marcará a transação como replicada por meio de sp_repldone . Nós o configuramos para ApplicationIntent=ReadOnlyconectar-se automaticamente ao nó secundário legível do Grupo de Disponibilidade.

O processo de captura/integração parece estar funcionando bem e se recupera bem durante um failover do Grupo de Disponibilidade, alternando automaticamente para o outro nó conforme necessário para manter uma conexão com um secundário legível. As transações estão sendo capturadas no data warehouse.

Depois que as transações são replicadas no data warehouse, o aplicativo é executado sp_repldoneno secundário, o que parece ter sido bem-sucedido, mas a transação nunca é marcada como replicada no primário, fazendo com que o log de transações seja relatado REPLICATIONna log_reuse_wait_desccoluna de sys.databases.

O aplicativo chama sp_repldoneassim:

EXEC sys.sp_repldone
        @xactid = NULL
      , @xact_seqno = NULL
      , @numtrans= 0
      , @time= 0
      , @reset= 1;

O acima foi capturado por meio de Extended Events sp_statement_completed. A sessão de captura de Eventos Estendidos também está configurada para capturar eventos de erro e nenhum está sendo relatado.

Se eu executar manualmente sp_repltranspara obter uma lista de transações não replicadas e, em seguida, executar sp_repldoneessa lista no secundário, parece ter êxito sem problemas, mas o primário ainda acredita que as transações não foram replicadas. ou seja, a execução sp_repltransno primário ainda mostra transações aguardando replicação.

Não vejo nada nos documentos de sp_repldone indicando que ele pode ou não ser executado a partir de um secundário legível; na verdade, eu acho que retornaria um erro se não pudesse marcar as transações como replicadas, mas talvez haja um bug na implementação. É certo que esta configuração provavelmente não é tão comum. Se configurarmos o processo de captura/integração para anexar ao nó primário, removendo ApplicationIntent=ReadOnly, a execução sp_repldoneno primário funcionará corretamente e todas as transações serão marcadas como replicadas, permitindo a reutilização do log de transações.

Há algo que precisa ser alterado para que isso funcione no secundário legível?


Relatei o comportamento por meio do site de Feedback do Azure aqui .

sql-server
  • 1 1 respostas
  • 75 Views

1 respostas

  • Voted
  1. Best Answer
    David Browne - Microsoft
    2024-05-09T05:09:58+08:002024-05-09T05:09:58+08:00

    Como pano de fundo, presumo que esta seja uma solução CDC personalizada e que as tarefas regulares do CDC não estejam em execução para preencher as tabelas de alterações e executar sp_repldone e, portanto, você deve executar sp_repldone para permitir que o espaço do arquivo de log seja reutilizado após os backups de log. Para a maioria dos cenários, seria mais simples usar a Replicação Transacional para preencher o banco de dados de destino ou usar a solução CDC integrada e ler os dados alterados da réplica do banco de dados primário ou secundário.

    sp_repldone "Atualiza o registro que identifica a última transação distribuída do servidor.", que fica armazenado no banco de dados. Portanto, definitivamente não pode funcionar em uma réplica somente leitura e provavelmente não está documentado o que faz quando você tenta.

    E "Uma réplica secundária não pode atuar como editor ou republicador de replicação, mas a replicação deve ser configurada para que a secundária possa assumir o controle após um failover" Configurar a replicação com grupos de disponibilidade Always On

    Portanto, este também não é um cenário compatível com replicação transacional integrada. E a incapacidade de marcar com êxito as transações como replicadas no segundo dia pode ser o motivo pelo qual não há suporte.

    Pode funcionar bem ler as transações do secundário e conectar-se ao primário para executar sp_repldone, mas você precisará testar.

    • 5

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve