Declarações inválidas com respectiva mensagem de erro (exemplos).

Declarações inválidas com respectiva mensagem de erro (exemplos).

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 queryouta opção em uma pequena mesa muito simples, mas ainda sem sorte.
  • As credenciais são válidas, testei-as com sucesso usando sqlcmdo 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.sono arquivo /usr/lib64. Este não é um local esperado para bibliotecas e bcpnã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.

  1. Descubra onde o procedimento de instalação foi colocado libodbc.so:

    find / -type f -name libodbc.so
    
  2. 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.destá incluído /etc/ld.so.conf:

    # Required but not documented by MS ODBC installation for SQL Server
    /usr/lib64
    
  3. Execute ldconfigpara atualizar a lista de locais de biblioteca

  4. Tente novamente o bcpcomando

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.

informação relacionada