このドキュメントでは、Perl からEmpress データベースをアクセスするためのセットアップ方法 および簡単なアクセステストについて説明します。
Empress Version 8.62 を Perl から利用するためには、ODBCマネージャ (unixODBC) Perl DBD ODBCインターフェイス、Perl DBI インターフェイスを必要とします。 Empress の固有の定義が含まれているものは Perl DBD インターフェイスで、 インターネット上で公開されている Perl DBD インターフェイスは、Empress をサポートしています。
|
[ 注意 ]
Empress の以前のversion v8.20 および v6.10 では、Empress の DBD インターフェイスとして、 「入門Perl DBI」(株式会社オライリー・ジャパン2001/08出版)の中で紹介されている Empress 専用のDBD「DBD::Empress と DBD:: EmpressNet」を独自に提供していましたが、 v8.60 以上では専用のDBDインターフェイスを使用せず、一般に公開されている Perl DBD::ODBC を使用します。 専用のDBDを使用しない理由として、以下のことが挙げられます。
これらのことから専用のドライバより、一般的なODBCドライバを利用するほうが、 多くの利点があります。 現在のversion v8.62では、以前の専用 DBD (DBD::Empress と DBD:: EmpressNet)を使用することは できません。また、「入門Perl DBI」の「DBD::Empress と DBD:: EmpressNet」に記述されている内容は 以前のversion に対応する記述ですのでご注意願います。 |
Perl から Empress をアクセスするためには、以下のソフトウェアが必要になります。 適当なダウンロードサイトから取得してください。 (Perl は既にインストールされていることを前提としています。)
Linux/Unix 汎用ODBC ドライバマネージャとして、DBD for ODBC が対応している unixODBCを使用します。
現在(2004/07) の最新バージョンはunixODBC-2.2.9 です。 unixODBC は、http://www.unixodbc.org からダウンロードできます。
Perl DBI用 の ODBC ドライバです。
現在(2004/07) の最新バージョンはDBD-ODBC-1.09 です。 DBD-ODBCは、 http://www.cpan.org/authors/id/J/JU/JURL/ からダウンロードできます。
Perl の標準データベースインターフェイスです。
現在(2004/07) の最新バージョンは DBI-1.43 です。 Perl DBIは、http://www.cpan.org/authors/id/T/TI/TIMB/ からダウンロードできます。
以降でそれぞれのモジュールのインストールの説明をしますが、 先にこのドキュメントを記述するためにインストールをおこなったマシン環境を示します。
unixODBC をインストールします。後にインストールする Perl DBD-ODBC がunixODBCの 環境を参照するため、最初にインストールしてください。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. unixOBDC のインストール例
% cd /usr/local/src
% tar xfz /tmp/unixODBC-2.2.9.tar.gz
% cd unixODBC-2.2.9
% ./configure
% make
% su
# make install
デフォルトでは /usr/local 以下にインストールされます。
また、./configure でエラーになる場合は、エラー内容にもよりますが、
以下のオプションを試してみてください。
% ./configure --enable-gui=no --enable-drivers=no
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールします。
ex. Perl DBI のインストール例
% cd /usr/local/src/perl
% tar xvfz /tmp/DBI-1.43.tar.gz
% cd DBI-1.43
% perl Makefile.PL
% make
% make test
# su
# make install
Perl DBD-ODBC のインストールは、先に unixODBC をインストールする必要があります。
また、環境変数 ODBCHOME をMakefile.PLでチェックしているため、 インストール前に設定してから作業します。環境変数 ODBCHOME に設定する値は、 unixODBC 環境がインストールされたディレクトリを指定します。 例ではunixODBCをデフォルトでインストールしたので "/usr/local"を設定します。
ソースパッケージを展開し、READMEファイルに書かれている手順に従いインストールしますが、 1点、make 後のテストにおいて、unixODBC マネージャに対し、実際のEmpress ODBCドライバを 呼び出すテストをおこなうため、EmpressのODBCサーバーの設定、テスト環境変数、 ODBC環境変数、およびODBC環境ファイルの設定が必要になります。 そのため、ここでのインストール例ではテストを省略します。 (テストを行う場合は、次の章を参考にODBCの設定おこない DBD::ODBC のテスト環境変数 DBI_DSN, DBI_USER, DBI_PASSを設定します。)
ex. Perl DBD-ODBCのインストール例
% export ODBCHOME=/usr/local
% cd /usr/local/src/perl
% tar xvfz DBD-ODBC-1.09.tar.gz
% cd DBD-ODBC-1.09
% perl Makefile.PL
% make
# su
# make install
※ perl Makefile.PL を実行したときに以下のメッセージが出力されますが、
Makefile が作成されれば問題ありませんので無視します。
----
Useless use of private variable in void context at Makefile.PL line 430.
Configuring DBD::ODBC ...
>>> Remember to actually *READ* the README file!
And re-read it if you have any problems.
Multiple copies of Driver.xst found in: /usr/lib/perl5/site_perl/5.8.0/i386-linu
x-thread-multi/auto/DBI /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/auto/DBI at Makefile.PL line 60
Using DBI 1.43 (for perl 5.008 on i386-linux-thread-multi) installed in /usr/lib
/perl5/site_perl/5.8.0/i386-linux-thread-multi/auto/DBI
Using ODBC in /usr/local
Use of uninitialized value in substitution (s///) at Makefile.PL line 154.
Umm, this looks like a unixodbc type of driver manager.
We expect to find the sql.h, sqlext.h and (which were
supplied with unixODBC) in $ODBCHOME/include directory alongside
the /usr/local/lib/libodbc.so library. in $ODBCHOME/lib
Warning: LD_LIBRARY_PATH doesn't include /usr/local
Injecting selected odbc driver into cc command
Injecting selected odbc driver into cc command
Multiple copies of Driver.xst found in: /usr/lib/perl5/site_perl/5.8.0/i386-linu
x-thread-multi/auto/DBI /usr/lib/perl5/vendor_perl/5.8.0/i386-linux-thread-multi
/auto/DBI at Makefile.PL line 461
Using DBI 1.43 (for perl 5.008 on i386-linux-thread-multi) installed in /usr/lib
/perl5/site_perl/5.8.0/i386-linux-thread-multi/auto/DBI
Writing Makefile for DBD::ODBC
The DBD::ODBC tests will use these values for the database connection:
DBI_DSN= e.g. dbi:ODBC:demo
DBI_USER=
DBI_PASS=
Warning: not all required environment variables are set.
以上でインストールは完了です。
ODBC を利用するためには、ODBCの環境設定ファイル(odbcinst.ini と odbc.ini) および環境変数 (ODBCHOME と MSODBCINIFILEの設定が必要です。
unixODBC マネージャからEmpress ODBC ドライバを呼び出すために、 Empress ODBCドライバの情報を odbcinst.ini ファイルに登録します。 odbcinst.iniファイルは、デフォルトでは$ODBCHOME/etc/odbcinst.ini (例の環境では/usr/local/etc/odbcinst.ini)にあります。 以下に設定例を示します。
ex. odbcinst.ini のEmpress ODBC ドライバの設定例
#---------
[Empress]
Description = Empress ODBC Driver
Driver = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
Setup = /home/empress/Empress/v8.62/installation/shlib/libempodbccl.so
FileUsage = 1
#---------
'[ ]' で囲まれた中にドライバ名として "Empress"を指定します。 それ以降にEmpressドライバの情報を記述します。 Description は説明(コメント)、 DriverにはEmpress ODBC ドライバのシェアードライブラリのパスを指定します。 ($EMPRESSPATH/shlib/libempodbccl.so) SetupもDriverと同じシェアードライブラリファイルのパスを指定します。 FileUsageには "1" を設定します。
|
[ 参考 ]
"odbcinst.ini"のパラメータについてのunixODBCのマニュアルの記述を要約すると "setup" は、新たにDSNを追加するためのODBCConfig(GUIツール)の「追加」ボタンを 押したときに使用されるライブラリでODBCConfig(GUIツール)を使用していない環境 では重要ではありません。最も重要なパラメータは "driver"で、 SQLConnectまたは SQLDriverConnectがコールされた時にドライバマネージャは動的に 指定されたライブラリをロードします。その指定が間違っている場合は動作しません。 "fileusage"は、odbcinst プログラムによって追加されます。テキストエディタを使って 編集した場合は、自分自身で追加する必要があります。 |
odbc.iniファイルは、ODBCデータソース(DNS)を定義します。 このファイルは、デフォルトでは$ODBCHOME/etc/odbc.ini (例の環境では/usr/local/etc/odbc.ini)にあり、 unixODBC および Empress ODBCドライバの両方が参照します。 以下に設定例を示します。
ex. odbc.ini のODBC データソースの設定例
#---------
[testdb]
Description = Test to Empress
Driver = Empress
Database = /home/empress/testdb
Server = 192.168.3.183
Port = 6322
#---------
'[ ]' で囲まれた中にデータソース名を記述し、それ以降にデータソースの定義を記述します。 これらのパラメータは、Description, Driver を除いて Empress ODBC ドライバが参照する パラメータになります。 Description は、説明(コメント)です。Database はアクセスするデータベースのパス、 Server は、ODBC サーバーのアドレスまたはホスト名、Port はODBCサーバーのポート番号を 指定します。 Driver は unixODBC が使用し、値はodbcinst.ini で設定したEmpressドライバの名前と 関連付けられます。
unixODBC が必要な環境変数として、ODBCHOME があります。 設定する値はunixODBC がインストールされた ディレクトリを設定します。
ex. 環境変数 ODBCHOMEの設定例
例では unixODBC は /usr/local 以下にインストールされています。
% export ODBCHOME=/usr/local
Empress ODBC ドライバが必要な環境変数としてMSODBCINIFILE があります。 設定する値は、odbc.iniファイルへのパスを指定します。
ex. 環境変数 MSODBCINIFILE の設定例
例では odbc.iniファイルは /usr/local/etc/odbc.ini にあります。
% export MSODBCINIFILE=/usr/local/etc/odbc.ini
|
[ 参考 ]
(1) 例では、Empress が使用可能なユーザーでの設定例になります。 そのため、既にEmpressを使用するために必要な環境変数 EMPRESSPATH と LD_LIBRRY_PATH (Empressシェアードライブラリへのパス) が設定済みということが前提となっています。 Empressを使用する環境を設定していないユーザーでのODBCの設定の場合は、 EMPRESSPATH と LD_LIBRRY_PATHを設定してください。
ex. 環境変数 EMPRESSPATH と LD_LIBRRY_PATH の設定例
例では Empress は /home/empress/Empress/v8.62/installation
以下にインストールされているとします。
% export EMPRESSPATH=/home/empress/Empress/v8.62/installation
% export LD_LIBRRY_PATH=$EMPRESSPATH/shlib
(2) unixODBC のインストール時にprefixを指定した場合、シェアードライブラリの 環境変数 LD_LIBRARY_PATHの指定が必要になります。 |
テストとしてサンプルプログラムを実行して、Empressのデータベースにアクセスしてみます。
サンプルプログラムを実行する前にEmpress ODBC サーバーが動作しているかを確認します。 Empress サーバー管理者でログインし、以下のコマンドで確認します。 (Empress サーバーの詳細は「コネクティビティ(ODBC)サーバーの利用について」を参照してください。) また、サンプルプログラムからODBCサーバーにアクセスするためのユーザーと パスワードをEmpressサーバーのパスワードファイルに設定されていない場合は、 こちらも合わせて設定してください。
ex. Empress サーバーの確認
# empsvadm empodbcsv info
ログイン:empress
パスワード:XXXXXXX
サーバ名: empodbcsv
サーバタイプ: odbc
スプール PID : 359
管理ポート: 6321
サービスポート:6322
#サービスサーバ最少/最大/起動中: 3/257/3
サーバ ID PID #クライアント
--------- ---------- -------------
4 363 0
3 362 0
2 361 0
1 360 1
-------------
総クライアント: 1
クライアント ID PID 開始 名前
--------------- ---------- -------- --------------------
1000001* 358 18:14:12 empress(empress@localhost)
#
ex. ユーザーの登録
# emppassword empodbcsv add empress
新 Empress パスワード:XXXXXXX
新 Empress パスワード再入力:XXXXXXX
Done.
#
※ アクセスするEmpress ODBC サーバーは、Perl ODBC環境をインストールしたマシン以外でも構いません。
Empress ODBC サーバーが起動されているマシン上にサンプルで使用するデータベースを作成します。 単純なテーブルを作成し、データを挿入します。
ex. サンプルデータベースの作成
% empmkdb testdb
% empsql testdb
EMPRESS V8.62
(c) Copyright Empress Software Inc. 1983, 2003
1* create t1 (no, name nlschar);
2* display t1 all;
*** Table: t1 ***
Attributes:
no integer
name nlscharacter(25,1,0)
Creator: empress
Lock Level: RECORD
Table #: 15
Records: 0
Record size: 28
3* insert into t1 values (1, 'あああ');
4* insert into t1 values (2, 'いいい');
5* select * from t1;
no name
1 あああ
2 いいい
6* exit
%
以下は、Perl DBI のサンプルプログラムです。
ex. サンプルプログラム -- odbc.pl
#!/usr/bin/perl -w
# odbc.pl
use strict;
use DBI;
my ($dbh, $sth, @row);
$dbh = DBI->connect( 'dbi:ODBC:testdb',
'empress',
'emp123', {
PrintError => 0,
RaiseError => 1 } );
$sth = $dbh->prepare( "select * from t1");
$sth->execute();
while ( @row = $sth->fetchrow_array()) {
print "Row: @row\n";
}
$sth->finish();
$dbh->disconnect();
exit;
このサンプルで確認が必要な箇所は、DBI->connect のパラメータ(DNS、ユーザー、パスワード) になります。 DNS の'dbi:ODBC:'までは DBD ODBC インターフェイスを使用することを意味しますので固定です。 最後の"testdb"は odbc.ini ファイルに設定したデータソース名になります。 ユーザーとパスワードは、Empress ODBC サーバーのパスワードファイルに登録した ユーザー・パスワードを指定します。
サンプルプログラム(odbc.pl) を実行します。
ex. サンプルプログラムの実行
ファイルに実行権がない場合、付加してください。
%chmod 755 ./odbc.pl
% ./odbc.pl
Row: 1 ああああ
Row: 2 いいいい
%
上記のように表示されれば、Empress ODBC サーバーに接続され、 サンプルデータベースからのデータ取得ができています。
以下に無理にエラーにさせた例を示しますので、エラーが表示した場合の参考にしてください。
環境変数 MSODBCINIFILE が設定されていない場合
DBI connect('testdb','empress',...) failed: [unixODBC][Empress Software][ODBC LI
B/DLL] データソース名が見つからず、デフォルトのドライバーが指定されていない (SQL
-IM002)(DBD: db_login/SQLConnect err=-1) at ./odbc.pl line 9
また、MSODBCINIFILEが設定されていてパスが間違っている場合は
「ODBC.INI ファイルがみつかりません。」というエラーになります。
ODBCサーバーが立ち上がっていないか、あるいはodbc.ini の Server の値が間違っている場合
DBI connect('testdb','empress',...) failed: [unixODBC][Empress Software][ODBC LI
B/DLL] サーバ 'empodbcsv' の接続がオープンされません。;オープン反応タイムアウト
(SQL-08001)(DBD: db_login/SQLConnect err=-1) at ./odbc.pl line 9
odbc.ini の Database の値で指定されているデータベースが存在しない場合、あるいは間違っている場合
DBI connect('testdb','empress',...) failed: [unixODBC][Empress Software][ODBC LI
B/DLL] 無効なデータベースです。 (SQL-3D000)(DBD: dbd_db_login/SQLSetConnectOptio
n err=-1) at ./odbc.pl line 9
プログラム内で指定されたデータソース名がodbc.ini に存在しない場合
DBI connect('testdb','empress',...) failed: [unixODBC][Driver Manager]Data sourc
e name not found, and no default driver specified (SQL-IM002)(DBD: db_login/SQLC
onnect err=-1) at ./odbc.pl line 9