2016-09-26 6 views
2

я должен использовать BCP инструмента командной строки для экспорта данных из базы данных SQL сервера в файл в красном Сервер Hat. Я (по-видимому) с использованием действительных утверждений, но bcp не производит каких-либо результатов/результатов. Однако при выполнении операторов с отсутствующими или недопустимыми параметрами отображается соответствующая ошибка. Я искал причину этой проблемы (например, дефектная установка, неправильное использование bcp, отсутствие разрешений или любой другой известный конфликт) и как исправить это.BCP ни дает результаты, ни выводит что-либо при использовании действительных заявлений, но это не бросать ошибки при передаче недопустимых параметров


BCP заявление: использование

bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password 

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] 

BCP:

BCP - Bulk Copy Program for Microsoft SQL Server. 
Copyright (C) Microsoft Corporation. All Rights Reserved. 
Version: 11.0.2270.0 

версия 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) 

Распределение:

Red Hat Enterprise Linux 6.7 (KornShell). 

недопустимые заявления с соответствующим сообщением об ошибке (примеры).

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'. 

РЕЗЮМЕ.

Цель состоит в том, чтобы создать файл данных, используя следующий синтаксис (или аналогичный):

bcp fully_qualified_table_name out ./data.txt -c -S server -U user -P password 

Факты таковы:

  • При запуске действительного BCP заявление нет ничего в окне (без вывода) и не создается файл данных.
  • Я не могу использовать опцию -T (доверенное соединение с помощью встроенной системы безопасности) для BCP так что я должен указать сервера, имя пользователя и пароль.
  • Пробовал queryout вариант на очень простом столике уже, но все еще не повезло.
  • Учетные данные действительны, я успешно их протестировал, используя sqlcmd следующим образом: sqlcmd -S server -U user -P password -Q 'SELECT * FROM really_small_table'.
  • В BCP заявления по «Недействительные заявления с соответствующим сообщением об ошибке (примеры)» раздел этого вопроса являются лишь примерами недопустимых высказываний, чтобы показать, что BCP на самом деле что-то делает, но дает ожидаемые результаты.
+0

Доступен ли ваш пользователь для записи в папку, в которую вы хотите записать выходной файл? Это нормально, чтобы получить ошибки для плохих учетных данных, поскольку BCP сначала пытается подключиться к SQL-серверу, поэтому, если это не удается, он не попытается сделать что-либо еще. –

+0

Привет @IonutTulai, разрешения правильные. –

ответ

0

Надеюсь, вы уже решили свою проблему, но у меня была аналогичная проблема с настройкой PyODBC для Python 3.4 на RedHat 7.1. Я пытался подключиться к Microsoft SQL Server 2016. Надеюсь, это поможет кому-то другому.

Настоящей проблемой для меня была конфигурация ODBC/FreeTDS. Вот шаги установки, которые я взял, и возможное решение.

  1. Я начал с установки Microsoft's ODBC driver for redhat. Это, вероятно, не требуется, но я перечисляю его здесь, так как я никогда не удалял его из своей машины redhat из страха разрыва ODBC.
  2. Установка ODBC и развития ODBC файлы: yum install unixODBC-devel.x86_64
  3. Установка FreeTDS: yum install freetds.x86_64
  4. Обновление файлов конфигурации. Этапы 1-3 заняли около 10 минут. Я потратил очень неудачный день на различные конфигурации, и обычно мне удалось подключиться через tsql (инструмент отладки FreeTDS, подробнее об этом ниже), но никогда не через Python. Я в конце концов наткнулся на this blog, который указал мне на правильный драйвер через ldconfig -p | grep libtdsodbc (я считаю, что это указывает на драйвер FreeTDS, поэтому почему драйверу Microsoft, вероятно, не нужно).

Конечная конфигурация, которую я закончил с выглядит следующим образом:

файл /etc/odbc.ini (примечание: я должен был создать этот файл как процесс установки/FreeTDS ODBC не создавал его для меня.)

[SQLServer] 
Description = TDS driver (Sybase/MS SQL) 
Driver  = SQLServer 
Servername = your_sql_hostname 
TDS Version = 0.95 
Database = your_database_name (not to be confused with instance name) 
Port  = 1433 

/etc/odbcinst.ini

[ODBC] 
# Enables ODBC debugging output. Helpful to see where things stop working. 
Trace = yes 
TraceFile = /etc/odbcinst.trace 

[SQLServer] 
Description=TDS driver (Sybase/MS SQL) 
Driver=/lib64/libtdsodbc.so.0 
Driver64=/lib64/libtdsodbc.so.0 
UsageCount=1 

Советы по устранению неполадок

tsql - инструмент для отладки/тестирования, который поставляется с FreeTDS. Это твой друг. Я смог использовать его на ранней стадии, чтобы убедиться, что сетевая сторона вещей правильная (т. Е. Брандмауэры блокируют доступ, имена хостов и т. Д.).

Используйте tsql -H your_sql_hostname -L, чтобы получить имена экземпляров и порты с вашего SQL-сервера. Обратите внимание, что вы используете порт 1433 (который является портом обнаружения экземпляра MS SQL) в вашей конфигурации ODBC выше, а не в этих номерах портов.

ServerName your_sql_hostname 
InstanceName instance_1_name 
IsClustered No 
Version  13.0.x.x 
tcp   5555 

ServerName your_sql_hostname 
InstanceName instance_2_name 
IsClustered No 
Version  13.0.x.x 
tcp   6666 

Используйте порт из предыдущей команды TSQL так:

tsql -H your_sql_hostname -p your_sql_instance_port -D your_database_name -U your_username -P your_password

Вы должны получить приглашение. Попробуйте запросить некоторые данные из вашей базы данных (обратите внимание, что вам нужно набрать GO на отдельной строке, чтобы фактически запустить ваш запрос).Если это работает, но вы по-прежнему не можете подключиться через Python/other-app, это обычно означает, что ODBC/FreeTDS установлены правильно, и нет проблем с сетью, но ваша конфигурация ODBC неверна.

1> SELECT TOP 1 * FROM your_table 
2> GO 
{a row will be returned here} 
1> # prompt returns, use `exit` to get out 

 Смежные вопросы

  • Нет связанных вопросов^_^