..png)
eu tenho que usarBCPferramenta de linha de comando para exportar dados de umservidor SQLbanco de dados para um arquivo em um servidor Red Hat. Estou (aparentemente) usando declarações válidas, masBCPnão está produzindo nenhum tipo de produção/resultado. Porém, quando executo instruções com parâmetros ausentes ou inválidos, ele exibe o respectivo erro. Estou procurando o motivo deste problema (por exemplo, instalação defeituosa, mau uso doBCP, falta de permissões ou qualquer outro conflito conhecido) e como corrigi-lo.
declaração do 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).
Declarações inválidas com 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'.
RESUMO.
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 um válidoBCPinstrução, 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) paraBCPentão eu tenho que especificar oservidor, usuário e senha. - Já tentei
queryout
a opção em uma pequena mesa muito simples, mas ainda sem sorte. - As credenciais são válidas, testei-as com sucesso usando
sqlcmd
o seguinte:sqlcmd -S server -U user -P password -Q 'SELECT * FROM really_small_table'
. - OBCPdeclarações sob"Declarações inválidas com respectiva mensagem de erro (exemplos)"seção desta questão são apenas exemplos de declarações inválidas para mostrar queBCPrealmente faz alguma coisa, mas dá os resultados esperados.
Responder1
O que descobri na minha plataforma Debian é que o processo de instalação do Microsoft ODBC colocado libodbc.so
no arquivo /usr/lib64
. Este não é um local esperado para bibliotecas e bcp
não é possível encontrá-lo. Mas em vez de dizer que não consegue encontrar a biblioteca necessária, ele simplesmente sai.
Solução para Debian. Sua situação deve ser semelhante.
Descubra onde o procedimento de instalação foi colocado
libodbc.so
:find / -type f -name libodbc.so
Adicione seu diretório a um novo arquivo
/etc/ld.so.conf.d/odbc.conf
. Eu inventei o nome e no meu sistema/etc/ld.so.conf.d
está incluído/etc/ld.so.conf
:# Required but not documented by MS ODBC installation for SQL Server /usr/lib64
Execute
ldconfig
para atualizar a lista de locais de bibliotecaTente novamente o
bcp
comando
Você precisará ser root para executar as etapas 2 e 3. Presumo que isso não seja grande coisa, já que você conseguiu instalar as bibliotecas do SQL Server.