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 / 90354
Accepted
Val F.
Val F.
Asked: 2015-01-28 16:54:19 +0800 CST2015-01-28 16:54:19 +0800 CST 2015-01-28 16:54:19 +0800 CST

Melhor maneira de migrar um enorme banco de dados SQL Server com baixo tempo de inatividade na rede

  • 772

Definição de problema

Nosso servidor de banco de dados precisa ser transferido para outro datacenter. Ele é executado no Microsoft SQL Server 2012 Enterprise (64 bits) e contém dois bancos de dados de cerca de 2 TB e 1 TB.

Ter pouco ou nenhum tempo de inatividade para isso seria o ideal.

carga de trabalho

Esses bancos de dados são usados ​​para um site .NET e são constantemente atualizados.

Não estar disponível no fim de semana seria aceitável. O banco de dados atualmente em uso permaneceria o único em uso até a mudança para o novo.

Idealmente, essa troca seria feita apenas alterando as entradas de DNS para apontar para o novo servidor de banco de dados, certificando-se de que o banco de dados não esteja sendo atualizado.

Além disso, o tempo gasto por essa operação realmente não importa, desde que a troca de um servidor para outro (tempo de inatividade) seja mantida baixa.

Abordagens consideradas

  • Backup e restauração

    Isso já foi feito no passado, mas envolveu um alto tempo de inatividade, embora fosse feito por meio de uma rede interna, de forma mais eficiente do que pela Internet

  • Envio de logs

    Pelo que entendi, essa abordagem minimizaria o tempo de inatividade configurando um mestre/escravo e transferindo uma cópia exata do banco de dados mestre para seu escravo sendo somente leitura. Como mencionado acima, nenhum acesso ao escravo seria necessário e só precisamos de uma maneira de ter uma réplica do banco de dados mestre sem corrupção de dados.

    Também parece ser bastante eficiente em termos de utilização de recursos e não afetaria muito o desempenho do mestre.

    Posso estar errado sobre essa abordagem, então sinta-se à vontade para me corrigir.

  • Espelhamento de banco de dados

    Não estou muito ciente dessa abordagem, mas parece uma opção válida. Não há necessidade de sincronização em tempo real e o desempenho do mestre é muito importante, portanto, assíncrono seria o caminho a seguir se essa abordagem fosse escolhida.

  • Outras opções?

    Esse servidor é executado diretamente em hardware bare metal, portanto soluções de nível inferior infelizmente não são uma opção. Talvez haja uma maneira melhor de fazer isso?

Restrições

Conforme descrito, esses bancos de dados são muito grandes a ponto de serem difíceis de manter, mas esse é outro problema.

As versões do SQL Server serão as mesmas (Microsoft SQL Server 2012 Enterprise 64 bits).

Ele terá que ser transferido pela rede entre dois datacenters, portanto, provavelmente pela Internet. Ter discos enviados de um site para outro para uma sincronização inicial infelizmente não é uma opção. Ter algum tipo de segurança para a transferência seria o ideal, mas faremos o melhor nesta situação.

Isso deve dar uma boa visão geral de nossas necessidades para esta tarefa e esperamos que alguns de vocês já tenham enfrentado essa situação antes.

sql-server restore
  • 2 2 respostas
  • 17576 Views

2 respostas

  • Voted
  1. Best Answer
    Aaron Bertrand
    2015-01-28T18:18:30+08:002015-01-28T18:18:30+08:00

    O backup e a restauração diretos obviamente estão fora de questão. Eu também não consideraria replicação de qualquer tipo.

    O espelhamento de banco de dados é relativamente simples de configurar, mas requer conectividade em tempo real entre os dois servidores, configuração de parceiros e endpoints, etc. Grupos de disponibilidade podem ser uma opção, mas além das complicações de rede, você também precisa ter os dois servidores como membros do mesmo WSFC - o que significa que ambos devem estar no mesmo domínio. Esta não é uma configuração típica (ou pode até ser feita para funcionar temporariamente) para uma mudança de centro de dados.

    Meu voto seria para o envio de logs. O bom disso é que você pode usar os backups e backups de log que já está fazendo (certo?) E não precisa necessariamente ter conectividade em tempo real entre os dois bancos de dados - eles não precisam saber sobre cada um outros, você não precisa configurar endpoints para espelhamento, parceiros, segurança, etc. Você só precisa de uma maneira de obter arquivos do servidor antigo para um local onde possam ser restaurados no novo servidor. Você pode fazer um backup completo com bastante antecedência, transferi-lo para o novo servidor, restaurá-lo e, em seguida, aplicar (possivelmente diferenças e) backups de log incrementais desse ponto até o momento do corte. O processo é bastante simples, e há muitos tutoriais sobre envio de logs disponíveis online, caso você encontre alguma dificuldade.

    Se o aplicativo da web estiver se movendo com o banco de dados, já que o DNS pode demorar um pouco para se propagar, você pode querer fazer uma troca nas strings de conexão do aplicativo antigo para fazê-los apontar para o IP do novo servidor de banco de dados assim que for gravável , pois - mesmo após a troca, e mesmo que suas configurações de TTL sejam rígidas - os clientes podem continuar acessando os servidores da web antigos. Tudo depende de quanto respeito seus provedores dão aos seus TTLs.

    • 22
  2. Erik Darling
    2015-01-29T18:52:14+08:002015-01-29T18:52:14+08:00

    Recentemente, migrei 15 TB em 6 bancos de dados usando espelhamento. Muito simples e funcionou perfeitamente com apenas alguns segundos de tempo de failover.

    Editar% s:

    Eu tinha dois novos SQL Servers virtualizados. Os bancos de dados vinham de 3 servidores que haviam superado o crescimento e estavam afetando o desempenho dos bancos de dados menores hospedados neles.

    O processo foi muito simples.

    1. Aguarde a conclusão dos backups completos de fim de semana
    2. Restaurar sem recuperação para novos servidores
    3. Quando essas restaurações forem concluídas, pause os backups
    4. Execute uma restauração adicional até o backup de log mais recente dos originais, não deixando nenhuma recuperação
    5. Comece a espelhar em todos os seis
    6. Retomar backups

    Optei por deixá-los no modo assíncrono até que estivéssemos prontos para fazer failover para reduzir a carga na rede etc. O espelhamento tem alguma reputação de causar latência durante a manutenção (índice/estatística) e outras atividades de alto volume, mas não o fiz descobrir que isso é verdade. Eles precisam ser alternados para o modo síncrono antes do failover manual.

    Durante a próxima janela de manutenção, falhei manualmente em cada banco de dados e, após alguns testes de fumaça, desliguei o espelhamento e, por fim, removi os arquivos de dados antigos dos servidores de origem. Uma peculiaridade neste processo é que a falha de um banco de dados espelhado deixa o antigo primário em um estado de recuperação, então, a menos que você se sinta confortável em apenas descartá-los, você precisa trazê-los de volta online e depois desanexar, ou qualquer que seja o seu método preferido de remoção. . Além disso, não configurei uma testemunha para nada disso porque não queria failover automático. Este foi um evento controlado.

    Por favor, deixe-me saber se você gostaria de mais detalhes. Deixei de fora as especificações do servidor e da rede, mas posso fornecer se você quiser.

    Obrigado

    • 18

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