CentOSからSQL Serverへ接続する

自分のブログでも書いてますが、こちらにも書いてみます。

ちょっと機会があったので備忘録的にメモしておきます。

環境はこんなかんじ

yumインストールでも良いのですが、今回はunixODBC, FreeTDSはソースでビルドしてみます。

unixODBCをインストール

SQL Serverと接続するためにunixODBCをインストールします。
インストールは unixodbcのサイトからtarballをダウンロードして/usr/local配下にインストールします。

$ curl -O ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.1.tar.gz
$ tar xvfz unixODBC-2.3.1.tar.gz
$ cd unixODBC-2.3.1
$ ./configure --prefix=/usr/local/`basename $PWD`
$ make
# make install

FreeTDSをインストール

TDSとはTabular Data Streamの略でSQL Server間でデータのやり取りをするアプリケーションレイヤのプロトコルのようです。
TDSについてはTreasureDataの太田さんがまとめていたので参照していただけると良いと思います。

FreeTDSLinux/UnixシステムでTDS通信が行えるようになるライブラリです。

$ curl -O ftp://ftp.astron.com/pub/freetds/stable/freetds-stable.tgz
$ tar xvfz freetds-stable.tgz
$ cd freetds-0.91
$ ./configure \
--prefix=/usr/local/`basename $PWD` \
--enable-shared \
--enable-static \
--enable-odbc-wide \
--with-tdsver=8.0 \
--with-unixodbc=/usr/local/unixODBC-2.3.1
$ make
# make install

FreeTDSとunixODBCのコンフィグを設定

freetds.conf

FreeTDSの設定を記載します。
/etc/freetds/freetds.conf に以下の情報を記載して保存します。

[SqlServer]
host = <DatabaseのIP>
port = <Databaseのポート: Default=1433>
tds version = 8.0
client charset = UTF-8
odbcinst.ini

unixODBCの設定はodbcinst.ini, odbc.ini ファイルで設定します。

odbcinst.ini にはドライバの情報を記載します。

以下の情報で /etc/odbcinst.ini に保存します。

[FreeTDS]
Description = FreeTDS Driver
Driver = /usr/local/freetds-0.91/lib/libtdsodbc.so
Setup = /usr/local/freetds-0.91/lib/libtdsodbc.so
FileUsage = 1
CPTimeout = 5
CPReuse = 5
odbc.ini

odbc.iniにはDatabaseへの接続情報を記載します。

以下の情報で /etc/odbc.ini に保存します。

[SQLServer]
Servername  = <freetds.confで指定したDBのラベル(ここではSqlServer)>
Driver = <odbcinst.iniで指定したDriverのラベル(ここではFreeTDS)>
Database = <接続するdatabase名>

環境変数設定

これが設定されていないと動作しません。
~/.bashrc などに以下を追記しておいても良いですね。

export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
export FREETDSCONF=/etc/freetds/freetds.conf

接続確認

あとは低レイヤーから順に接続確認してみます。

tsql

FreeTDSを使って接続確認します。

/usr/local/freetds-0.91/bin/tsql \
-S <freetds.confに書いたDBのラベル(ここではSqlServer)> \
-D <Database名> \
-U <接続ユーザ名> \
-P <パスワード>

以下の表示が出たら成功。

locale is "ja_JP.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
Default database being set to <Database名>
1>
isql

次はunixODBCを使って接続確認します。

/usr/local/unixODBC/bin/isql <odbc.iniのラベル> <接続ユーザ名> <パスワード>

以下の表示が出れば成功。

+---------------------------------------+
| Connected! |
| |
| sql-statement |
| help [tablename] |
| quit |
| |
+---------------------------------------+
SQL>

次回はこれを使ってRubyからSQL Serverへ接続してみます。