CentOS上でPerlのDBIを使ってSQL Serverに接続する手順
CentOS上でPerlのDBIを使ってSQL Serverに接続する手順です。FreeTDS, UnixODBCというUnix(Linux)のライブラリとPerlのDBD::ODBCモジュールを適切にインストールし設定する必要があります。
(試した環境はCentOS release 5.5 (Final)。この記事はRed Hat Enterprise Linux, Fedoraでも有効であるかもしれません。また他のLinuxディストリビューションでも有効であるかもしれません。SELinuxを無効化しておかないと、インストールがうまくいかないかもしれません。ソースからインストールするのでgccなどの開発ツールは事前にインストールされていることを想定しています。)
接続のイメージを書くと以下のようになります。
DBI - ODBC(通信にFreeTDSプロトコルを使用) - SQL Server
DBIではドライバとしてODBCが必要となります。これに対応するPerlのモジュールがDBD::ODBCです。またDBD::ODBCは、UnixODBCというライブラリを必要としています。UnixODBCというライブラリはSQLサーバーと通信するためにFreeTDSというライブラリを必要とします。
UnixODBCのインストール
UnixODBCとはODBCのUnix上での実装のひとつです。UnixODBCをソースコードからインストールしましょう。依存モジュールが増えるので、オプションでGUIのサポートはなしにしています。makeは時間がかかるのでしばらく待ちましょう。
cd /usr/local/src wget http://www.unixodbc.org/unixODBC-2.3.0.tar.gz tar -xzvf unixODBC-2.3.0.tar.gz cd unixODBC-2.3.0 ./configure --enable-gui=no make make install
このライブラリは「/usr/local/lib」以下にインストールされます。確認してみましょう。
ls /usr/local/lib/libodbc.so
FreeTDSのインストール
FreeTDSとは「Tabular Data Stream」とぴう通信プロトコルを実装したライブラリです。UnixODBCが利用します。
cd /usr/local/src wget http://ibiblio.org/pub/Linux/ALPHA/freetds/stable/freetds-0.82.tar.gz tar -xzvf freetds-0.82.tar.gz cd freetds-0.82 export LD_LIBRARY_PATH=/usr/local/lib export LD_RUN_PATH=/usr/local/lib ./configure --with-unixodbc=/usr/local --with-msdblib make make install
このライブラリは「/usr/local/lib」以下にインストールされます。確認してみましょう。
ls /usr/local/lib/libtdsodbc.so
DBD::ODBCモジュールのインストール
DBD::ODBCモジュールをインストールします。
export ODBCHOME=/usr/local cpan DBD::ODBC
DBD::ODBCはルート権限でインストールする必要がありませんので、cpanmなどを使って個人ディレクトリにインストールするのもよいでしょう。
FreeTDSの設定
FreeTDSの設定ファイルを編集します。FreeTDSの設定ファイルで接続先の情報などを記述します。
vi /usr/local/etc/freetds.conf
[tdssqlserver] host = 192.168.1.19 port = 1433 tds version = 8.0
接続先の情報とTDSのバージョンを指定します。現在は8.0でよいようです。[]の中の名前はUnixODBCで利用される名前になります。
UnixODBCの設定
UnixODBCの設定ファイルを編集します。
vi /usr/local/etc/odbc.ini
[ODBC Data Sources] freetds = FreeTDS ODBC Driver [sqlserver] Driver = /usr/local/lib/libtdsodbc.so Description = Microsoft SQL Server Servername = tdssqlserver Database = dbname
DriverにはFreeTDSのライブラリのパス、ServernameにはFreeTDSの設定ファイルで設定した名前、DesDatabaseには接続先のデータベース名を指定します。
FreeTDSとUnixODBCの設定の確認
まずFreeTDSの設定が正しいかどうかをtsqlというコマンドを起動することで確認してみましょう。
次に設定が正しいかどうかをtsqlとisqlを使用して試してみましょう。
tsql -S tdssqlserver -U kimoto -P pipipi
tsqlでの接続が成功したらFreeTDSの設定が正しいことが確認できます。exitで終了できます。
isql sqlserver kimoto pipipi
isqlでの接続が成功したらUnixODBCの設定が正しいことが確認できます。Enterキーで終了できます。
SQL ServerにPerlから接続する
次にDBIモジュールをを使用してスクリプトから接続できれば成功です。
use strict; use warnings; use DBI; my $dbi = DBI->connect('dbi:ODBC:sqlserver', 'kimoto', 'pipipi') or die $!;