Eu tenho uma tabela enorme, digamos 500.000 linhas. Quero copiá-lo (esquema e dados) de um servidor para outro. Este não é um upsert ou qualquer tipo de atualização; É uma cópia e colagem direta e única. Quais são as abordagens idiomáticas para isso?
Eu tentei:
- Restaurar um backup de um servidor para outro. Isso é impraticável porque o SQL Server notoriamente não pode restaurar tabelas de um backup; Ele só pode restaurar bancos de dados. E meu banco de dados é enorme!
- Usando SSMS para criar scripts dos dados da tabela como uma sequência de instruções INSERT. Isto é impraticável, pois as inserções devem ser feitas linha por linha agonizante. Eu suspeito que isso também faz coisas horríveis no log de transações, mas ninguém me atacou por isso ainda (estou executando esse script agora, vai levar horas).
SELECT INTO
para clonar a tabela nesse banco de dados.O que tenho usado muito é o Native
SQL Server Import and Export Wizard
.Escolha uma fonte de dados: Microsoft OLE DB Provider para SQL Server.
Nome do servidor: servidor de origem.
Escolha um destino: Provedor Microsoft OLE DB para SQL Server.
Nome do servidor: servidor de destino.
Especifique a cópia ou consulta da tabela: copie dados de uma ou mais tabelas ou visualizações.
Observe que isso copiará a tabela como um Heap (colunas e dados estão lá, mas nenhum índice), você precisará criar scripts e criar índices, restrições etc. na tabela de destino manualmente (o que não é difícil se não houver muitos deles) .
Uma opção é usar copy-dbadbtabledata do módulo https://docs.dbatools.io/powershell .
você também pode adicionar parâmetros se a tabela ainda não existir no destino (-AutoCreateTable) ou se existir e contiver dados (-truncate).
Outra opção seria usar o BCP .
Outra opção é uma ferramenta como o SQL Examiner Suite . Não é gratuito, mas tem sido uma ferramenta muito útil para mim ao longo do tempo:
É muito útil para destacar as diferenças e sincronizar as alterações automaticamente. Ele pode ser agendado e executado através da linha de comando, podendo também gerar scripts de sincronização para uso posterior.
Observação: não sou afiliado a este software de forma alguma, exceto como um usuário satisfeito.
O texto acima é útil para sincronizações únicas, mas se você precisar de dados automatizados contínuos e sincronizações de esquema, há outros recursos nativos do SQL Server que posso mencionar.
SQLServer Integration Services (SSIS) também é uma forma eficiente que uso para mover dados de e para servidores. Ele tem os seguintes benefícios adicionais: Agendamento rápido Implantação independente de bancos de dados de origem/destino Aproveitar réplicas legíveis, se disponíveis Tratamento de erros Painel de monitoramento Pronto para fluxo de dados/pipeline complexos
Cumprimentos