Perl入門ゼミ

テキスト処理、Linuxサーバー管理、Web開発ならPerl
  1. Perl
  2. データベース
  3. here

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 $!;
Giblog