CentOS上でPerlのDBIを使ってSQL Serverに接続する手順




  1. Perl




  2. データベース



  3. here

 CentOS上でPerlDBIを使って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とはODBCUnix上での実装のひとつです。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 ServerPerlから接続する

 次にDBIモジュールをを使用してスクリプトから接続できれば成功です。

use strict;
use warnings;

use DBI;

my $dbi = DBI->connect('dbi:ODBC:sqlserver', 'kimoto', 'pipipi')
  or die $!;