[Linux] BCP で 2GB 以上のサイズのファイルをインポートするには

横井 羽衣子 (よこい ういこ)
SQL Developer Support Engineer

皆さんごきげんよう。本日は、Microsoft ODBC Driver 11 for SQL Server - RedHat Linux に含まれる BCP についてのお話です。

これまで、以前のバージョンに含まれる BCP では、インポートファイルのサイズが 2GB を超えたファイルについては、分割の上インポートする必要がありました。これに対し先日、11.0.2270.0 がリリースされ、2GB 以上のファイルを一括してインポートすることができるようになりました。

Microsoft® ODBC Driver 11 for SQL Server® - RedHat Linux https://www.microsoft.com/en-us/download/details.aspx?id=36437
Version: 11.0.2270.0 Date published: 1/15/2013

Linux ベースの OS において、BCP で大容量ファイルを取り扱われる際は、上記に差し替えていただき、ご対応ください。

参考 1 : 文字コードにご注意ください

SQL Server は、UTF-16 をサポートしますが、UTF-8 に対応していません。SQL Server は、UTF-8 データをサポートしないためです。SQL Server にデータをインポートとする機能としては、bcp ユーティリティの使用、bulk insert 文の使用、SQL Server Integration Services (SSIS) の使用の 3 つがありますが SQL Server 2008 以降では UTF-8 エンコードをサポートしておらず、上記の手法のいずれにおいて UTF-8 のデータであれば対応はできません。よって、SQL Server での Unicode は UTF-16 であるため、bcp などでデータをインポートしたい場合は、UTF-8 データを UTF-16 データに変換するような処理を行った上で実施いただく必要があります。なお、この際は、UTF-16LE でご対応ください。(リトルエンディアン)

-- 参考
bcp ユーティリティ
SQL Server 2008
https://msdn.microsoft.com/ja-jp/library/ms162802(v=sql.100).aspx

参考 2 : Microsoft ODBC Driver 11 for SQL Server - RedHat Linux をインストールしてみよう

セットアップが英語しかないので、少しまとめてみました。ご参考になればと思います。

1. unixODBC を入手します。unixODBC-2.3.1.tar.gz などが入手可能ですが、これを使うとコンパイルで失敗しますので 2.3.0 を使用しましょう。

ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz

2. インストールできたかは、以下のコマンドで確認ができます。

odbcinst -q -d -n "ODBC Driver 11 for SQL Server"

結果例 :

[ODBC Driver 11 for SQL Server] Description=Microsoft ODBC Driver 11 for SQL Server Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0 Threading=1 UsageCount=1 language=japanese

トレースを有効にしたい場合 : /etc/odbcinst.ini に以下を追加します。odbc_config --odbcinstini コマンドを実行すれば OK です。

[ODBC] Trace = ON Tracefile = /tmp/mstestodbc.log

DSN の登録 : /etc/odbc.ini に追加します。 以下は、192.168.1.1 に対して、MSSQLTest という DSN 名を登録しています。

[MSSQLTest] Driver=ODBC Driver 11 for SQL Server Server=tcp:192.168.1.1

3. 接続テストをしてみます。以下は DSN を使用した構文です。

isql <DSN> <userID> <Password>

以下は SQL 認証も有効にして sa (パスワード Password!) で接続している例です。

isql MSSQLTest sa Password!

参考
ドライバー マネージャーのインストール
https://msdn.microsoft.com/ja-jp/library/hh568449.aspx

Microsoft SQL Server ODBC Driver for Linux のインストール
https://msdn.microsoft.com/ja-jp/library/hh568454.aspx

それではみなさんごきげんよう。