Exportação/importação por tabela no SQL Server (bcp, sqlpackage)
SQL ServerNível: IntermediárioDuração: 20–60 minNão é backup, e sim movimentação lógica de dados: exportar tabelas com o bcp e carregá-las em outro banco de dados (formato nativo ou de caracteres, arquivo de formato, batch, TABLOCK, coluna de identidade, UTF-8), gravar o resultado de uma consulta em arquivo CSV/texto (queryout), mover esquema + dados com o sqlpackage (.bacpac Export/Import, ex.: migração para o Azure SQL Database) e somente esquema (.dacpac Extract, Script, Publish). Inclui a instalação do mssql-tools18 e do sqlpackage no Linux. Ao final, você terá no destino tabelas com contagens de linhas conferidas com a origem ou um arquivo pronto para ser compartilhado.
Se for mover o banco de dados inteiro para um SQL Server da mesma versão ou mais recente, backup/restore é mais rápido e consistente: Backup e restauração do SQL Server.
Topologia: 1 servidor (os comandos são executados no SQL Server ou em um servidor de gerenciamento)
Cenários
- Mover tabelas: bcp out → bcp in — Copiar uma ou várias tabelas para outro banco de dados SQL Server; as tabelas devem existir previamente no destino.
- Gravar o resultado de uma consulta em arquivo: bcp queryout (CSV/texto) — Gravar o resultado de uma consulta em um arquivo CSV/texto a ser entregue a outro sistema (Excel, ETL, relatório).
- Esquema + dados: sqlpackage Export / Import (.bacpac) — Mover esquema e dados em um único arquivo; especialmente para migração para o Azure SQL Database ou bancos de dados pequenos/médios.
- Somente esquema: sqlpackage Extract / Script / Publish (.dacpac) — Extrair apenas o esquema, compará-lo com o destino e gerar um script de alterações ou implantar o esquema vazio em um novo ambiente.
Antes de começar
- A ferramenta certa foi escolhida: - bcp (nativo): mover uma ou várias tabelas grandes de SQL Server para SQL Server; o mais rápido. As tabelas de destino devem existir previamente. - bcp (caracteres) / queryout: entregar texto/CSV a outros sistemas (ETL, relatórios, Excel). - .bacpac (Export/Import): mover esquema + dados em um único arquivo; especialmente para migração para o Azure SQL Database. É lento em bancos de dados grandes (centenas de GB); nesse caso, prefira backup/restore ou bcp. - .dacpac (Extract): somente esquema (tabelas, views, procedures); comparação de esquema e implantação de esquema vazio em um novo ambiente.
- … tem permissão de leitura na origem (SELECT nas tabelas; para Export/Extract, recomenda-se db_owner) e de escrita no destino (INSERT + ALTER TABLE para bcp in; dbcreator ou db_owner para Import/Publish). Informe a senha antes do script: read -rsp 'Senha: ' SQLCMDPASSWORD; export SQLCMDPASSWORD e sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh.
- O PowerShell foi aberto como administrador (Iniciar → "PowerShell" → botão direito → Run as administrator). …A conta Windows que abriu o PowerShell tem…O login … tem… permissão de leitura na origem e de escrita no destino (INSERT + ALTER TABLE para bcp in; dbcreator ou db_owner para Import/Publish).
- O servidor de comandos acessa por TCP o SQL Server de origem (…)… e o de destino (…)….
- O servidor de comandos acessa por TCP o SQL Server de origem (…)… e o de destino (…)…; bcp e sqlcmd estão no PATH (vêm com a instalação do SQL Server ou com o "Microsoft Command Line Utilities for SQL Server").
- O disco do diretório de exportação (…) tem espaço livre equivalente ao tamanho dos dados a transferir (o arquivo nativo tem aproximadamente o tamanho dos dados da tabela; o arquivo de caracteres pode ser maior; o .bacpac é comprimido).
- A unidade do diretório de exportação (…) tem espaço livre equivalente ao tamanho dos dados a transferir.
- No banco de dados de destino (…), as tabelas foram criadas com a mesma estrutura (o bcp não cria tabelas). A forma fácil de mover o esquema é a opção Somente esquema (.dacpac) deste guia. Em cargas grandes, os índices nonclustered e os triggers da tabela de destino podem ser desabilitados, e as foreign keys verificadas depois.
- Não há escritas na origem durante a exportação (a aplicação foi parada) ou é usada como origem uma cópia do banco de dados (restaurada de um backup COPY_ONLY ou um database snapshot). O bcp e o sqlpackage Export não são transacionalmente consistentes: tabelas que mudam durante a exportação podem ficar inconsistentes entre si.
Fases do guia
- Ferramentas e preparação — Instalar as ferramentas sqlcmd e bcp (mssql-tools18) · Instalar o sqlpackage · Verificar as ferramentas bcp e sqlcmd · Instalar o sqlpackage · Criar o diretório de exportação · Criar o diretório de exportação
- Movimentação de tabelas (bcp out / in) — Registrar a contagem de linhas e o tamanho das tabelas de origem · Gerar os arquivos de formato · Gerar os arquivos de formato · Exportar as tabelas (bcp out) · Exportar as tabelas (bcp out) · Verificar as tabelas de destino …
- Exportação do resultado de consulta (queryout) — Gravar o resultado da consulta em arquivo (bcp queryout) · Gravar o resultado da consulta em arquivo (bcp queryout)
- Esquema + dados (.bacpac) — Exportar o banco de dados como .bacpac (Export) · Exportar o banco de dados como .bacpac (Export) · Criar o banco de dados de destino (se não existir) · Carregar o .bacpac no destino (Import) · Carregar o .bacpac no destino (Import) · Verificar as tabelas e as contagens de linhas no banco de dados de destino
- Somente esquema (.dacpac) — Extrair o esquema como .dacpac (Extract) · Extrair o esquema como .dacpac (Extract) · Criar o banco de dados de destino (se não existir) · Gerar o script de alterações em relação ao destino (Script) · Gerar o script de alterações em relação ao destino (Script) · Aplicar o esquema no destino (Publish) …
- Depois — Limpar os arquivos de exportação · Limpar os arquivos de exportação