

# Usar o utilitário BCP do Linux para importar e exportar dados
<a name="SQLServer.Procedural.Importing.BCP.Linux"></a>

O utilitário BCP (Bulk Copy Program) oferece uma maneira eficiente de transferir grandes quantidades de dados entre a instância de banco de dados do RDS para SQL Server e os arquivos de dados. Você pode usar o BCP em ambientes Linux para realizar operações de dados em massa, o que o torna útil para migração de dados, processos de ETL e transferências regulares de dados.

O BCP permite a importação de dados de arquivos para tabelas do SQL Server e a exportação de dados de tabelas do SQL Server para arquivos. Isso é particularmente eficaz para transferir dados estruturados em vários formatos, inclusive arquivos de texto delimitados.

## Pré-requisitos
<a name="SQLServer.Procedural.Importing.BCP.Linux.Prerequisites"></a>

Antes de usar o BCP com uma instância de banco de dados do RDS para SQL Server usando o Linux, verifique se você tem o seguinte:
+ Um ambiente Linux com conectividade de rede à instância de banco de dados do RDS para SQL Server.
+ Ferramentas de linha de comandos do Microsoft SQL Server instaladas no sistema Linux, como:
  + sqlcmd: ferramenta de consulta de linha de comandos do SQL Server
  + bcp: utilitário Bulk Copy Program
+ Credenciais válidas para a instância de banco de dados do RDS para SQL Server.
+ Acesso à rede configurado por meio de grupos de segurança para permitir conexões na porta do SQL Server (normalmente 1433).
+ Permissões de banco de dados apropriadas para as operações que você deseja realizar.

## Instalar ferramentas de linha de comandos do SQL Server no Linux
<a name="SQLServer.Procedural.Importing.BCP.Linux.Installing"></a>

Para usar o BCP no Linux, você precisa instalar as ferramentas de linha de comandos do Microsoft SQL Server. Para obter instruções detalhadas sobre instalação para sua distribuição Linux específica, consulte a seguinte documentação da Microsoft:
+ [Install sqlcmd and bcp the SQL Server command-line tools on Linux](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-setup-tools)
+ [bcp utility](https://docs.microsoft.com/en-us/sql/tools/bcp-utility): referência completa para o utilitário BCP

Após a instalação, confirme se as ferramentas estão disponíveis em seu PATH executando:

```
bcp -v
sqlcmd -?
```

## Exportar dados do RDS para SQL Server
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting"></a>

Você pode usar o BCP para exportar dados da instância de banco de dados do RDS para SQL Server para arquivos no sistema Linux. Isso é útil para criar backups, analisar dados ou preparar dados para migração.

### Sintaxe básica de exportação
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Basic"></a>

A sintaxe básica para exportar dados usando o BCP é:

```
bcp database.schema.table out output_file -S server_name -U username -P password [options]
```

Em que:
+ `database.schema.table`: o nome totalmente qualificado da tabela.
+ `output_file`: o caminho e o nome do arquivo de saída.
+ `server_name`: o endpoint do RDS para SQL Server.
+ `username`: o nome de usuário do banco de dados.
+ `password`: a senha do banco de dados.

### Exemplo de exportação
<a name="SQLServer.Procedural.Importing.BCP.Linux.Exporting.Example"></a>

O seguinte exemplo exporta dados de uma tabela denominada `customers` no banco de dados `sales`:

```
bcp sales.dbo.customers out /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n"
```

Esse comando:
+ Exporta dados da tabela `customers`.
+ Salva a saída de `/home/user/customers.txt`.
+ Usa o formato de caracteres (`-c`).
+ Usa pipe (\$1) como delimitador de campo (`-t "|"`).
+ Usa nova linha como delimitador de linha (`-r "\n"`).

## Importar dados para o RDS para SQL Server
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing"></a>

Você pode usar o BCP para exportar dados de arquivos em seu sistema Linux para sua instância de banco de dados do RDS para SQL Server. Isso é útil para migração de dados, carregamento de dados de teste ou atualizações regulares de dados.

### Sintaxe básica de importação
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Basic"></a>

A sintaxe básica para exportar dados usando o BCP é:

```
bcp database.schema.table in input_file -S server_name -U username -P password [options]
```

Em que:
+ `database.schema.table`: o nome totalmente qualificado da tabela de destino.
+ `input_file`: o caminho e o nome do arquivo de entrada.
+ `server_name`: o endpoint do RDS para SQL Server.
+ `username`: o nome de usuário do banco de dados.
+ `password`: a senha do banco de dados.

### Exemplo de importação
<a name="SQLServer.Procedural.Importing.BCP.Linux.Importing.Example"></a>

O seguinte exemplo importa dados de um arquivo para uma tabela denominada `customers`:

```
bcp sales.dbo.customers in /home/user/customers.txt \
    -S mydb.cluster-abc123.us-east-1.rds.amazonaws.com \
    -U admin \
    -P mypassword \
    -c \
    -t "|" \
    -r "\n" \
    -b 1000
```

Esse comando:
+ Importa dados para a tabela `customers`.
+ Lê os dados do `/home/user/customers.txt`
+ Usa o formato de caracteres (`-c`).
+ Usa pipe (\$1) como delimitador de campo (`-t "|"`).
+ Usa nova linha como delimitador de linha (`-r "\n"`).
+ Processa dados em lotes de mil linhas (`-b 1000`).

## Opções comuns do BCP
<a name="SQLServer.Procedural.Importing.BCP.Linux.Options"></a>

O BCP oferece várias opções para controlar a formatação de dados e o comportamento de transferência. A seguinte tabela descreve as opções comumente usadas:


| Opção | Descrição | 
| --- | --- | 
| -c | Usa o tipo de dados de caracteres para todas as colunas. | 
| -n | Usa tipos de dados de banco de dados nativos. | 
| -t | Especifica o delimitador de campo (o padrão é tab). | 
| -r | Especifica o delimitador de linha (o padrão é nova linha). | 
| -b | Especifica o tamanho do lote para operações em massa. | 
| -F | Especifica a primeira linha a ser exportada ou importada. | 
| -L | Especifica a última linha a ser exportada ou importada. | 
| -e | Especifica um arquivo de erro para capturar linhas rejeitadas. | 
| -f | Especifica um arquivo de formato para formatação de dados. | 
| -q | Usa identificadores entre aspas para nomes de objeto. | 

## Práticas recomendadas e considerações
<a name="SQLServer.Procedural.Importing.BCP.Linux.BestPractices"></a>

Ao usar o BCP com o RDS para SQL Server no Linux, considere as seguintes práticas recomendadas:
+ **Use o processamento em lote**: para grandes conjuntos de dados, use a opção `-b` para processar dados em lote. Isso melhora o desempenho e permite uma recuperação de erros mais apropriada.
+ **Lide com erros adequadamente**: use a opção `-e` para capturar informações de erros e linhas rejeitadas em um arquivo separado para análise.
+ **Escolha os formatos de dados apropriados**: use o formato de caracteres (`-c`) para compatibilidade entre plataformas ou o formato nativo (`-n`) para melhorar desempenho quando a origem e o destino forem o SQL Server.
+ **Proteja suas credenciais**: evite colocar senhas diretamente nas linhas de comandos. Considere a possibilidade de usar variáveis de ambiente ou arquivos de configuração com as permissões apropriadas.
+ **Teste com conjuntos de dados pequenos**: antes de processar grandes quantidades de dados, teste seus comandos do BCP com conjuntos de dados menores para verificar a formatação e a conectividade.
+ **Monitore a conectividade de rede**: garanta conexões de rede estáveis, especialmente para grandes transferências de dados. Considere a possibilidade de usar ferramentas como `screen` ou `tmux` para operações de longa duração.
+ **Valide a integridade dos dados**: após a transferência de dados, verifique as contagens de linhas e os dados de amostra para garantir que a operação foi concluída com êxito.

## Solução de problemas comuns do
<a name="SQLServer.Procedural.Importing.BCP.Linux.Troubleshooting"></a>

A seguinte tabela descreve os problemas comuns que você pode encontrar ao usar o BCP no Linux e as respectivas soluções:


| Problema | Solução | 
| --- | --- | 
| Tempo limite de conexão ou erros de rede | Verifique seu endpoint do Amazon RDS, as configurações do grupo de segurança e a conectividade de rede. Confirme se a porta do SQL Server (normalmente 1433) pode ser acessada pelo seu sistema Linux. | 
| Falhas de autenticação | Anote seu nome de usuário e senha. Verifique se o usuário do banco de dados tem as permissões apropriadas para as operações que você está executando. | 
| Erros de formato de dados | Verifique seus delimitadores de campo e linha. Confirme se o formato dos dados corresponde ao que o BCP espera. Use arquivos de formato para estruturas de dados complexas. | 
| Erros de permissão negada | Verifique se o usuário do banco de dados tem permissões INSERT para importações ou permissões SELECT para exportações nas tabelas de destino. | 
| Problemas de tratamento de arquivos grandes | Use o processamento em lote com a opção -b. Considere a possibilidade de dividir arquivos grandes em partes menores para melhorar o desempenho e a recuperação de erros. | 
| Problemas de codificação de caracteres | Garanta que seus arquivos de dados usem uma codificação de caracteres compatível. Use a opção -c para o formato de caracteres ou especifique as páginas de código apropriadas. | 