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[merge-replication](dba)

Martin Hope
Eric Farr
Asked: 2022-05-12 11:33:27 +0800 CST

Sincronize dados comuns em vários bancos de dados MySQL

  • 1

Minha situação

Eu tenho bancos de dados MySQL, cada um com o mesmo esquema (estrutura de tabela e relacionamentos exatamente iguais).

insira a descrição da imagem aqui

Os dados do banco de dados Green são compartilhados pelos outros três. Eu tenho um processo noturno que encontra alterações no banco de dados Green e as envia para os outros três bancos de dados.

Pense no banco de dados Green como dados de referência atualizados por uma equipe separada, mas há muitos deles e mudam todos os dias.

insira a descrição da imagem aqui

O resultado final é que cada um dos bancos de dados Blue, Red e Purple é uma mistura de registros atualizáveis ​​exclusivos para ele e os registros do banco de dados Green que podem ser referenciados, mas não modificados.

insira a descrição da imagem aqui

O problema

O processo de sincronização personalizado é confuso e não confiável de maneiras que não são importantes para a questão.

Minha pergunta

Existe uma maneira melhor de combinar os dados compartilhados (verdes) com outros bancos de dados? Eu gostaria de ter um impacto mínimo na camada de acesso a dados do aplicativo projetada para os dados intercalados que são possíveis pelo processo de sincronização noturna.

Ideia considerada

Eu pensei em deixar os dados do Green em seu próprio esquema (no mesmo servidor MySQL) e criar uma view, (para consultas) para cada tabela em meus outros bancos de dados para dar a ilusão das tabelas originais mescladas:

CREATE VIEW blue.vw_table001 AS
SELECT * FROM blue.table001 UNION 
SELECT * FROM blue.table001;

Isso me permitiria simplesmente substituir meu mapeamento Hibername para as tabelas originais por mapeamentos para a visualização correspondente. Em seguida, as gravações fariam referência às tabelas reais como fazem hoje.

No entanto, isso cria dois problemas...

  1. Eu teria que eliminar todas as chaves estrangeiras porque os registros no banco de dados Blue podem referenciar registros no banco de dados Green.
  2. Me disseram que o desempenho de combinar os dados dessa maneira não será bom. Pode ser importante saber que existem algumas consultas complexas que se unem em várias tabelas que agora seriam unidas em exibições.

Pensamentos finais

Embora seja bom não replicar os dados Green nos outros três (e pode haver muitos mais de três algum dia), estou bem com isso, desde que o mecanismo seja relativamente simples e confiável (minha solução java é bastante complicada e propenso a erros).

Além disso, você pode estar se perguntando sobre colisões de chave primária entre registros criados no banco de dados Green e cada um dos outros três. Nossa lógica de quase sincronização registra o ID original dos registros Green em uma coluna especial e, em seguida, atribui um ID localmente exclusivo aos registros.

mysql merge-replication
  • 1 respostas
  • 60 Views
Martin Hope
Savneet Kaur
Asked: 2020-07-30 03:42:32 +0800 CST

Problema de replicação de mesclagem do SQL - problema em que o trabalho de backup e manutenção que está sendo executado até a manhã e a maioria dos trabalhos do servidor estão presos

  • 0

Temos um ambiente de replicação de mesclagem que inclui

Publicador: Servidor1 onde apenas um banco de dados de 125 GB em replicação e também Distribuidor também é configurado no mesmo servidor hospedado em ambiente HyperV.

Assinantes: Temos aproximadamente 280 servidores com configuração de Distribuidor (assinatura push).

OBSERVAÇÃO: temos um ambiente com muitas alterações de DML no dia, portanto, realizamos muitas verificações diariamente em todos os servidores por meio de tarefas de manutenção e backup que incluem a etapa 1 : verificar a integridade do banco de dados completo etapa 2: Reconstruir/reorganizar o índice etapa 3: Fazer backup/verificar step4: limpeza de trabalhos de backup antigos step5: limpeza do histórico de trabalhos antigos

Além disso, esse trabalho é concluído em 4-5 horas diariamente, mas varia às vezes de servidor para servidor.

O Snapshot Agent é executado diariamente às 00:05 AM

PROBLEMA:

Desde domingo à noite, estamos tendo esse problema em que o trabalho de backup e manutenção que está sendo executado até a manhã e a maioria dos trabalhos do servidor estão presos no step1 dbcc checkdb ('meu banco de dados') (e os clientes também estão reclamando que o aplicativo está travando, não pode login, muito lento)

Ao verificar, meu spid de backup está aguardando o tipo de espera OLEDB e não temos conexões de servidor vinculadas configuradas no Publisher e outros assinantes, exceto alguns que são nossos servidores da sede de onde fazemos nossas principais importações / pequenas atualizações / se precisarmos enviar todas as alterações do banco de dados.

Ao verificar a consulta abaixo, posso ver que a porcentagem está se movendo para o meu dbcc spid id, mas realmente não me diz por que está preso nesta etapa?

select session_id
, percent_complete 
from sys.dm_exec_requests 
where percent_complete > 0

E realmente não importa a que horas eu executo este trabalho ou uma única etapa, ou seja, dbcc checkdb, ele não foi concluído.

Verifique também com nossa equipe do Windows se nenhuma atualização foi lançada no fim de semana e nenhuma alteração foi feita no lado do aplicativo.

Alguma sugestão do que pode ser o problema?

sql-server-2008 merge-replication
  • 1 respostas
  • 44 Views
Martin Hope
Dratskapoo
Asked: 2017-09-27 06:00:38 +0800 CST

MsMerge_genhistory tem muitas linhas com pubid = null

  • 0

Eu tenho uma replicação de mesclagem e estou preocupado que a limpeza dos metadados possa não ser suficiente. Eu tenho um período de retenção de 60 dias e posso ver que o metadatacleanup-job remove linhas em msmege_genhistory que são mais antigas, mas apenas para linhas que possuem o guid correto em pubid. a maioria das linhas, cerca de 1,6 milhão, tem o valor NULL em pubid e não consigo descobrir o porquê. alguém sabe por que há tantos valores nulos?

null merge-replication
  • 1 respostas
  • 382 Views
Martin Hope
Jersey
Asked: 2017-05-24 05:33:29 +0800 CST

Replicação de mesclagem do SQL 2008 R2 - Limpando alterações de esquema ignoradas

  • 1

Um desenvolvedor fez uma alteração em nosso banco de dados de produção que está usando replicação de mesclagem para uma tabela (atividade). Essa tabela tem uma restrição estrangeira que aponta para uma tabela que não faz parte da replicação e não existe no banco de dados replicado. Isso quebrou a replicação. Para colocar a replicação em funcionamento, usei o procedimento sp_markpendingschemachange para ignorar as alterações de esquema. Isso funcionou, mas agora fiquei com os registros ainda na tabela sysmergeschemaarticles, apenas marcados como ignorados. Neste ponto, quero me livrar dos registros para que sejam executados no futuro.

Minha solução é executar um instantâneo (em um horário menos ocupado), assumindo que isso limpará a tabela sysmergeschemaarticles de quaisquer alterações ddl, mas não encontrou nenhuma documentação de suporte para oferecer suporte a isso. Alguém tem uma experiência com este tipo de situação que possa apoiar esta solução ou propor uma nova melhor?

Obrigado!

sql-server-2008-r2 merge-replication
  • 1 respostas
  • 52 Views
Martin Hope
Mike Zalansky
Asked: 2016-09-02 13:07:03 +0800 CST

2 servidores idênticos/SQL Servers processando transações com replicação de mesclagem

  • 1

Pergunta inteira editada para maior clareza.

Cenário: Ter 2 SQL Servers idênticos em servidores separados, processando transações de diferentes aplicativos simultaneamente enquanto são completamente sincronizados (exemplo: servidor 1 de aplicativos móveis e servidor 2 de aplicativos da web).

Vamos usar o Always On para fazer failover de um servidor para o outro para manutenção e vice-versa. No entanto, quando a manutenção for concluída, os dois servidores estarão novamente online processando transações de nossos vários aplicativos e sincronizados.

Tentar resolver uma solicitação de um cliente para estar online, mesmo durante a manutenção, com 2 servidores sincronizados, cada um processando transações de aplicativos diferentes.

Qual é a melhor abordagem para mantê-los sincronizados? Estava inclinado para a replicação de mesclagem.

insira a descrição da imagem aqui

Versão atual. SQL Server 2012 SP3-CU4

Obrigado

sql-server-2012 merge-replication
  • 2 respostas
  • 175 Views
Martin Hope
Charles Clayton
Asked: 2015-04-14 14:30:30 +0800 CST

Script para mesclar e replicar dois arquivos de banco de dados MDF?

  • 1

Eu tenho um programa em um computador e em um tablet. O programa usa o SQL Server Express para interagir com um banco de dados local (as mesmas informações em ambos) de um .MDFarquivo. Portanto, se eu conectar o tablet ao PC, tenho dois .MDFarquivos que desejo sincronizar.

Quero que ambos os usuários possam fazer alterações na versão em seus dispositivos, então quero obter os dois .MDFarquivos e executar um script que os mescle.

O banco de dados tem uma chave primária GUID e uma DateTimede quando foi alterado pela última vez, portanto, se houver conflitos, eu usaria apenas a versão mais recente.

Como devo fazer isso?

Ou, alternativamente, se estou fazendo isso da maneira errada, você poderia recomendar uma maneira alternativa de manter os bancos de dados dessas duas máquinas sincronizados sem uma conexão com a Internet?

Desde já, obrigado.

sql-server merge-replication
  • 4 respostas
  • 1629 Views
Martin Hope
Worldexe
Asked: 2015-03-12 14:26:59 +0800 CST

A replicação de mesclagem do SQL Server 2012 bloqueia outras inserções/atualizações durante a sincronização

  • 3

Eu tenho uma configuração de replicação de mesclagem entre dois bancos de dados do SQL Server 2012 por meio do método Pull.

Existem várias replicações de mesclagem afetando diferentes conjuntos de tabelas (3 conjuntos de 2 a 5 tabelas cada, na verdade). Não há chaves estrangeiras ligando-as entre ou para outras tabelas nos bancos de dados.

Tanto o assinante quanto o publicador estão alterando os dados nas tabelas replicadas. Normalmente, são mais de 800 mil inserções por dia de 12 horas no editor e cerca de 300 mil no assinante; quase nenhuma atualização.

Além disso, tenho a filtragem simples habilitada - uma bit NULLcoluna é verificada por ser NULL para quase todas as tabelas mescladas; sem joins em filtros. O banco de dados principal tem cerca de 80G de dados nessas tabelas, o assinante tem cerca de 30G devido à filtragem. Existem índices em todas as colunas de filtro. As tabelas são replicadas como estão, sem colunas seletivas.

Os intervalos de chave primária são aumentados para 10 milhões na maioria das tabelas (para ter certeza de que não serão substituídos com frequência).

A replicação de esquema está habilitada, mas nenhuma alteração de esquema ocorre.

Os períodos de retenção de replicação de mesclagem são definidos para 2 dias (resultando em 3 dias de dados armazenados - cerca de aproximadamente 3 milhões de linhas na MSmerge_contentstabela).

Tarefa de replicação agendada para iniciar a cada 15 minutos.

O problema é que, às vezes, quando o trabalho de sincronização entra em ação, ele bloqueia TODAS as inserções/atualizações em TODAS as tabelas em TODAS as replicações de mesclagem neste banco de dados. Parece que ocorre apenas no final do processo de replicação, independentemente da contagem de linhas sincronizadas (para algumas execuções, pode haver apenas 1-2 linhas alteradas/adicionadas) e pode durar de 5 a 10 minutos, o que é inaceitável.

Rastreei qual procedimento está sendo executado naqueles momentos de bloqueio e peguei o relatório de bloqueio usando o SQL Server Profiler e iniciando-o manualmente (parece seguro):

<blocked-process-report monitorLoop="201058">
 <blocked-process>
  <process id="process38d8dd0c8" taskpriority="0" logused="1268" waitresource="OBJECT: 5:690456609:0 " waittime="5002" ownerId="4004024182" transactionname="UPDATE" lasttranstarted="2015-03-11T16:08:39.890" XDES="0x1b253649e8" lockMode="IX" schedulerid="1" kpid="5132" status="suspended" spid="84" sbid="0" ecid="0" priority="0" trancount="1" lastbatchstarted="2015-03-11T16:08:39.880" lastbatchcompleted="2015-03-11T16:08:39.880" lastattention="2015-03-11T15:29:13.240" hostname="COMP-177" hostpid="2976" loginname="user" isolationlevel="read committed (2)" xactid="4004024182" currentdb="5" lockTimeout="4294967295" clientoption1="673316896" clientoption2="128056">
   <executionStack>
    <frame line="46" stmtstart="4398" stmtend="4936" sqlhandle="0x030005008910305b49b9150057a4000000000000000000000000000000000000000000000000000000000000"/>
    <frame line="1" stmtstart="30" sqlhandle="0x020000003f32c4168d189e55398799d8e66489e031b7fa8b0000000000000000000000000000000000000000"/>
    <frame line="1" stmtstart="30" sqlhandle="0x02000000538a8c182d9ff435ad6897538e470878728dfd940000000000000000000000000000000000000000"/>
   </executionStack>
   <inputbuf>
set nocount on;update [replicated_table] set CHECK_CI=&apos;1456&apos;,DATE_CHECK_CI=getdate(),DATE_MODIFY=getdate(),where R_ID=&apos;284598973&apos;
   </inputbuf>
  </process>
 </blocked-process>
 <blocking-process>
  <process status="running" spid="150" sbid="0" ecid="0" priority="-5" trancount="2" lastbatchstarted="2015-03-11T16:08:39.347" lastbatchcompleted="2015-03-11T16:08:21.833" lastattention="1900-01-01T00:00:00.833" clientapp="Microsoft SQL Server Management Studio - Query" hostname="COMP-120" hostpid="9460" loginname="userp" isolationlevel="read committed (2)" xactid="4004019824" currentdb="5" lockTimeout="4294967295" clientoption1="673319008" clientoption2="390168">
   <executionStack>
    <frame line="366" stmtstart="32078" stmtend="32458" sqlhandle="0x0300ff7fa885d0f933812f012ba3000001000000000000000000000000000000000000000000000000000000"/>
    <frame line="1" sqlhandle="0x010005002698da17601c849b1d00000000000000000000000000000000000000000000000000000000000000"/>
   </executionStack>
   <inputbuf>
exec sp_MSmakegeneration   </inputbuf>
  </process>
 </blocking-process>
</blocked-process-report>

sys.sp_MSmakegenerationa execução bloqueia todas as outras atividades. Pelo que entendi - este procedimento está gerando uma lista de linhas a serem replicadas. Entendo que pode ser executado por um tempo - mas por que impede outras inserções/atualizações em TODAS as tabelas habilitadas para mesclagem? Não importa qual publicação é sincronizada - TODAS as tabelas habilitadas para mesclagem (mesmo de outras publicações neste banco de dados) também param de funcionar.

O objeto de espera waitresource="OBJECT: 5:690456609:0 "é MSmerge_genhistorytable. Então, de alguma forma, bloqueia naquela mesa, mas por quê?

Tentei capturar o plano de execução real desse procedimento - obtive 14 mil linhas de XML, mas não encontrei nada suspeito lá (nenhuma varredura de tabela óbvia ou outra atividade pesada).

A configuração da replicação é principalmente padrão, exceto para a generation_leveling_thresholdopção aumentada para 10.000 durante a investigação do problema. Não ajudou.

SQL Server 2012 v 11.0.5058.0

O nível de isolamento padrão é definido como READ COMMITTED SNAPSHOT; essas inserções/atualizações são apenas inserções/atualizações simples, sem alterar o nível de isolamento ou iniciar transações explícitas.

Posso sincronizar servidores com sucesso após o dia de trabalho (quando ninguém toca no banco de dados), funciona bem em 20 a 30 minutos (transferindo dados do dia inteiro de uma só vez), mas preciso de sincronização contínua (atraso de 15 a 20 minutos, no entanto).

Pesquisei o problema no Google - há muitos caras com replicação de mesclagem travada devido a muitos dados alterados (começando com 1 milhão de linhas), mas nada semelhante ao meu problema.

sql-server-2012 merge-replication
  • 1 respostas
  • 2799 Views
Martin Hope
reticentKoala
Asked: 2014-07-30 01:34:13 +0800 CST

Reiniciando um editor envolvido na replicação de mesclagem

  • 1

Nosso provedor de hospedagem gostaria de reiniciar o SQL Server que um publicador em uma topologia de replicação de mesclagem.

Não consigo entender claramente as práticas recomendadas para fazer isso nos documentos da Microsoft.

Nossa topologia consiste em aproximadamente 40 assinantes Pull. A sincronização é executada em uma programação a cada 5 minutos por meio de uma tarefa agendada do Windows que executa um aplicativo que chama RMO.

Algumas das minhas preocupações incluem: As transações serão sinalizadas com segurança nos assinantes - imagino que isso possa causar um aumento no log de transações? Qual é um período de tempo razoável para o Editor ficar offline - preciso me preocupar com a expiração?

Se alguém pudesse descrever quais etapas seriam envolvidas no desligamento seguro do Editor, seria de grande ajuda.

Muito Obrigado.

replication merge-replication
  • 1 respostas
  • 350 Views
Martin Hope
MrZander
Asked: 2014-07-18 15:34:47 +0800 CST

Merge Replication - Mesclar os dados iniciais contidos no assinante

  • 0

Eu tenho dois bancos de dados estruturados de forma idêntica em dois servidores separados. Ambos têm dados diferentes dentro deles.

Configurei um deles com replicação de mesclagem como editor e quero que o outro seja assinante.

O problema é que, quando crio a assinatura, o editor envia seu instantâneo para o assinante e limpa todos os dados do banco de dados do assinante antes de iniciar o processo de sincronização.

Como posso preservar os dados em ambos os bancos de dados e configurá-los para que um seja o editor e o outro seja o assinante?

sql-server-2008-r2 merge-replication
  • 1 respostas
  • 62 Views
Martin Hope
MrZander
Asked: 2014-07-08 09:16:01 +0800 CST

Definição de partição de mudança de replicação de mesclagem do SQL Server

  • 0

Estou usando a replicação de mesclagem em alguns servidores SQL Server 2008 R2. Há um servidor e o restante são clientes.

Eu tenho cada um dos clientes em uma partição diferente usando filtros de linha com a HOST_NAME()função.

Isso funciona como esperado, mas não consigo descobrir como alterar esse valor depois de criar a assinatura.

Preciso alterar esse valor para todas as assinaturas e gostaria de evitar descartá-las e recriá-las.

Como posso alterar o HOST_NAME()valor de um assinante sem descartar/recriar?

sql-server merge-replication
  • 1 respostas
  • 438 Views

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