Eu tenho que usar a ferramenta de linha de comando bcp para exportar dados de um banco de dados SQL Server para um arquivo em um servidor Red Hat.
Eu estou (aparentemente) usando instruções válidas, mas bcp não está produzindo nenhum tipo de saída / resultados.
No entanto, quando executo instruções com parâmetros ausentes ou inválidos, ele exibe o respectivo erro.
Eu estou procurando o motivo deste problema (por exemplo, instalação defeituosa, mau uso de bcp , falta de permissões ou qualquer outro conflito conhecido) e como corrigi-lo.
declaração de bcp:
bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password
uso do bcp:
usage: /opt/microsoft/bin/bcp {dbtable | query} {in | out | queryout | format} datafile
[-m maxerrors] [-f formatfile] [-e errfile]
[-F firstrow] [-L lastrow] [-b batchsize]
[-n native type] [-c character type] [-w wide character type]
[-N keep non-text native] [-q quoted identifier]
[-t field terminator] [-r row terminator]
[-a packetsize] [-K application intent]
[-S server name or DSN if -D provided] [-D treat -S as DSN]
[-U username] [-P password]
[-T trusted connection] [-v version] [-R regional enable]
[-k keep null values] [-E keep identity values]
[-h "load hints"] [-d database name]
versão do bcp:
BCP - Bulk Copy Program for Microsoft SQL Server.
Copyright (C) Microsoft Corporation. All Rights Reserved.
Version: 11.0.2270.0
Versão do SQL Server ( SELECT @@VERSION
):
Microsoft SQL Server 2012 - 11.0.5058.0 (X64)
May 14 2014 18:34:29
Copyright (c) Microsoft Corporation
Enterprise Edition: Core-based Licensing (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
Distribuição:
Red Hat Enterprise Linux 6.7 (KornShell).
Instruções inválidas com a respectiva mensagem de erro (exemplos).
bcp THAT_TUB_ACE.oh_nerd.table_name out ./data.txt -c -S sr._bear -U you_sr. -P pass_sword
SQLState = S1T00, NativeError = 0
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]Login timeout expired
SQLState = 08001, NativeError = 11001
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online.
SQLState = 08001, NativeError = 11001
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server]TCP Provider: Error code 0x2AF9
...
bcp fully_qualified_table_name ./data.txt -c -S valid_server -U valid_user -P bad_word
bcp fully_qualified_table_name out ./data.txt -c -S valid_server -U valid_user -P bad_word
SQLState = 28000, NativeError = 18456
Error = [unixODBC][Microsoft][ODBC Driver 11 for SQL Server][SQL Server]Login failed for user 'valid_user'.
SUMMARY.
O objetivo é gerar um arquivo de dados usando a seguinte sintaxe (ou similar):
bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password
Os fatos são:
- Ao executar uma instrução bcp válida, não há nada na janela (nenhuma saída) e nenhum arquivo de dados é criado.
- Não consigo usar a opção
-T
(conexão confiável usando segurança integrada) para bcp , portanto, preciso especificar o servidor, usuário e senha .
- Tentei a opção
queryout
em uma pequena mesa muito simples, mas ainda sem sorte.
- As credenciais são válidas. Testei-as com sucesso usando
sqlcmd
da seguinte forma: sqlcmd -S server -U user -P password -Q 'SELECT * FROM really_small_table'
.
- As declarações bcp em "Declarações inválidas com a respectiva mensagem de erro (exemplos)" seção desta pergunta são apenas exemplos de instruções inválidas para mostrar que bcp realmente faz algo, mas dando os resultados esperados.