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 / 279906
Accepted
Georgi Koemdzhiev
Georgi Koemdzhiev
Asked: 2020-11-19 08:27:25 +0800 CST2020-11-19 08:27:25 +0800 CST 2020-11-19 08:27:25 +0800 CST

Como configurar a replicação contínua de banco de dados do servidor MS SQL local para o PostgreSQL no AWS RDS sem reconfigurar a máquina de origem?

  • 772

Estou procurando uma maneira de configurar a replicação contínua de dados entre um Microsoft SQL Server local para o AWS RDS PostgreSQL. A tabela de origem é atualizada uma vez a cada 24 horas . O desafio aqui é que eu não tenho nenhum controle sobre o banco de dados de origem (on-prem). Tudo o que tenho é um usuário de banco de dados que posso usar para consultar o banco de dados. Em poucas palavras, estou procurando os seguintes requisitos:

  • A máquina de origem não deve ser modificada de forma alguma (ou seja, aplicando configurações à máquina de origem)
  • Barato (não requer um servidor de migração para funcionar 24 horas por dia, 7 dias por semana) e fácil de gerenciar (configure uma vez e esqueça)
  • Idealmente, a solução deve migrar apenas as alterações feitas na tabela de banco de dados de origem, como adicionar/remover registros. Em outras palavras, evite esvaziar a tabela de destino e preenchê-la novamente com os registros da tabela de origem (é isso que o AWS DMS " Full-Load " faria)

Eu estava analisando a replicação contínua do AWS DMS, mas ela exige alterações na máquina de origem, então tive que descartar essa solução (consulte Usar um banco de dados do Microsoft SQL Server como origem para o AWS DMS ). Além disso, essa solução exigiria uma " Instância de replicação " para ser executada 24 horas por dia, 7 dias por semana.

Há mais alguma coisa que eu deveria estar olhando que satisfaça os requisitos acima? Ou minha única opção seria ir com a migração "Full-Load" do AWS DMS, que seria uma solução potencialmente cara, desde a frequência de atualizações na tabela do banco de dados de origem?

Agradeço qualquer opinião sobre o problema, por favor.

sql-server postgresql
  • 1 1 respostas
  • 1605 Views

1 respostas

  • Voted
  1. Best Answer
    J.D.
    2020-11-19T17:27:40+08:002020-11-19T17:27:40+08:00

    Este é um processo de pensamento muito rudimentar sobre uma coisa que você poderia fazer (e tenho certeza de que há maneiras de ajustar essa ideia, que continuarei atualizando conforme penso nelas), mas você pode aproveitar algumas das coisas que o MS SQL Server e AWS oferecem para atender a maioria das suas necessidades.

    Em ordem de eventos, estas são as etapas que você pode seguir:

    1. Aumente a escala de um Microsoft SQL Server adicional possivelmente usando o SQL Server Express Edition : esse servidor abrigará um trabalho que manipulará a extração dos dados do seu MS SQL Server primário e a comparação com sua instância do AWS PostgreSQL, para gerar as alterações.

      Existem muitas limitações com o SQL Server Express Edition, então você terá que ler sobre ele, mas é uma edição gratuita do Microsoft SQL Server, então ele marca a caixa de seleção barata se você puder aproveitá-la. Se você não puder, uma alternativa um tanto barata seria usar o SQL Server Standard Edition em um servidor de dois núcleos. Certifique-se de instalar o componente Integration Services durante a instalação do SQL Server (independentemente da edição escolhida).

      Você pode optar por dimensionar isso na AWS, uma VM ou como achar melhor. (Na AWS, você pode criar um trabalho que ative e desative esse servidor conforme necessário.)

    2. Crie um projeto do SQL Server Integration Services : isso será compilado em um pacote SSIS que ficará no servidor de trabalho do servidor acima. No projeto SSIS, você poderá se conectar ao Microsoft SQL Server primário, extrair os dados da tabela de origem e, em seguida, extrair a cópia de destino da tabela em sua instância do AWS PostgreSQL e comparar os dois conjuntos de dados para mudanças. Como você implementa seu comparador depende de você, mas uma coisa no Microsoft SQL Server que pode ser útil é uma função chamada HASHBYTES(). Você pode fazer o hash de toda a linha e comparar o hash com as linhas com hash da instância do AWS PostgreSQL. (Não tenho certeza se há uma função equivalente no PostgreSQL, mas se não houver, você pode importar os dados da tabela do PostgreSQL para o servidor de tarefas do MS SQL primeiro e depois comparar os dois conjuntos de dados com HASHBYTES.) as linhas resultantes que foram alteradas para um destino. Infelizmente, não acho que você poderá enviá-los diretamente para sua instância do AWS PostgreSQL, portanto, a próxima etapa será uma etapa intermediária.

    3. Adicione uma etapa ao seu projeto SSIS para gerar as linhas que foram alteradas para outra tabela de preparo em seu servidor de trabalho ou para um arquivo bruto como um CSV. (Isso cabe a você decidir como implementar, pois uma tabela de preparo significa que você precisará aproveitar um processo mais complexo na AWS para extrair os dados. Acho que um CSV é a rota mais simples, você só precisa garantir você configura um compartilhamento de arquivo para o arquivo a ser salvo.)

    4. Implante o projeto SSIS como um pacote em seu servidor de trabalho Microsoft SQL. Em seguida, use o SQL Agent para agendar um trabalho executado diariamente para executar o pacote SSIS.

    5. Crie um bucket do S3 (ou solução de armazenamento alternativa da AWS) em sua nuvem AWS para onde o arquivo bruto da etapa 3 será copiado.

    6. Crie um trabalho agendado que migrará seu arquivo bruto da etapa 3 para o bucket do S3 na etapa 5. Novamente, isso depende de você e pode ser realizado de várias maneiras, como nos exemplos a seguir:

    • Serviço gerenciado SFTP da AWS
    • API REST da AWS
    • AWS SDK usando sua linguagem de programação preferida
    • AWS CLI ou qualquer outra alternativa que eles ofereçam
    • Uma solução alternativa não AWS (programaticamente, etc)
    1. Aproveite o SDK da AWS ou os serviços alternativos que eles fornecem para criar um trabalho da AWS que carrega os dados do arquivo que você importou para o bucket do S3 em sua instância do PostgreSQL. Eu recomendaria importá-lo para uma tabela de teste separada no PostgreSQL primeiro (mas isso depende de você como você acaba implementando-o). (Você pode rolar a etapa 6 para o mesmo trabalho criado para esta etapa.) Consulte este documento da AWS para obter mais informações: Importar dados para o PostgreSQL no Amazon RDS

    2. Após importar os dados acima para uma tabela de teste no PostgreSQL, você pode (no mesmo trabalho ou em um novo trabalho), excluir da sua tabela de destino os registros com as mesmas chaves primárias dos registros em sua tabela de teste. Em seguida, insira os registros de sua tabela de preparo na tabela de destino. (Embora isso esteja tecnicamente fazendo um DELETE / INSERT nos registros que foram atualizados, ainda é melhor do que truncar a tabela inteira e inserir tudo, então acho que deve ser suficiente sua exigência de não fazer um carregamento completo.)

    Implementar esse processo vai ser muito trabalhoso (mais do que foi necessário para ler :), então você pode considerar apenas pagar uma empresa parceira da AWS para implementar uma solução para você se for muito tempo para implementar, mas isso cabe a você decidir.

    Uma outra coisa que pode ser útil estar ciente no Microsoft SQL Server é o Change Data Capture (CDC) . Este é um processo no SQL Server que registra as alterações nas tabelas (basicamente mantém uma tabela de log de transações de cada tabela em seu banco de dados). Pode ser útil em conjunto ou no lugar do SSIS e é o principal componente do Microsoft SQL Server que o DMS pronto para uso da AWS usa para migrar dados do SQL Server.

    Outro componente semelhante no Microsoft SQL Server é chamado de Tabelas Temporais , que possui funcionalidade semelhante ao Change Data Capture (mas provavelmente é menos usado).

    Se você tiver alguma dúvida, ficarei feliz em elaborar qualquer uma das etapas da minha solução aproximada acima.

    • 1

relate perguntas

  • Os procedimentos armazenados impedem a injeção de SQL?

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

  • Sequências Biológicas do UniProt no PostgreSQL

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

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

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