web-dev-qa-db-ja.com

BCPは、有効なステートメントを使用すると結果を表示せず、何も出力しませんが、無効なパラメーターを渡すとエラーをスローします

bcpコマンドラインツールを使用して、SQL ServerデータベースからRedHatサーバー内のファイルにデータをエクスポートする必要があります。私は(明らかに)有効なステートメントを使用していますが、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ステートメントを実行すると、ウィンドウには何も表示されず(出力なし)、データファイルは作成されません。
  • bcpにオプション-T(統合セキュリティを使用した信頼できる接続)を使用できないため、サーバー、ユーザー、およびパスワードを指定する必要があります。
  • 非常に単純な小さなテーブルでqueryoutオプションをすでに試しましたが、それでもうまくいきません。
  • 資格情報は有効です。次のようにsqlcmdを使用してテストに成功しました:sqlcmd -S server -U user -P password -Q 'SELECT * FROM really_small_table'
  • この質問の「それぞれのエラーメッセージ(例)を含む無効なステートメント」セクションの下のbcpステートメントは、それを示すための無効なステートメントの単なる例ですbcp実際には何かを実行しますが、期待される結果が得られます。
3
CamelCamelius

私がDebianプラットフォームで見つけたのは、Microsoft ODBCインストールプロセスがlibodbc.so/usr/lib64に入れたことです。これはライブラリとbcpはそれを見つけることができません。しかし、必要なライブラリが見つからないと言う代わりに、単に終了します。

Debianのソリューション。あなたの状況は似ているはずです。

  1. インストール手順でlibodbc.soが配置されている場所を見つけます。

    find / -type f -name libodbc.so
    
  2. そのディレクトリを新しいファイル/etc/ld.so.conf.d/odbc.confに追加します。私は名前を発明しました、そして私のシステムでは/etc/ld.so.conf.d/etc/ld.so.confから含まれています:

    # Required but not documented by MS ODBC installation for SQL Server
    /usr/lib64
    
  3. ldconfigを実行して、ライブラリの場所のリストを更新します

  4. bcpコマンドを再試行してください

手順2と3を実行するには、rootである必要があります。SQLServerライブラリをインストールできたことを考えると、これは大したことではないと思います。

1
roaima