SiteCheckr新着情報
twitter timeline [更新]

DB2 Express-Cインストール方法



 IBM製データベースDB2のLinuxへのコマンドラインでのインストール方法です。



 DB2 Express-Cサイト:

 http://www-06.ibm.com/jp/software/data/db2express-c/



 GUIでのインストール手順:

 http://www.ibm.com/developerworks/jp/offers/db2express-c/installlin_v95/



 DB2の日本語での情報:

 http://db2watch.com/



はじめに



 DB2 Express-Cは、IBM製リレーショナルデータベースDB2の一部機能制限版で、ライセンス無償で利用できます。  インストール用のファイルは、上記のサイトからダウンロードできます。(ユーザ登録などが必要です)

 本稿では、DB2 Express-CをLinuxサーバへインストールして、WEB環境で利用する手順を解説します。



インストール手順



OSなどは次のバージョンを利用しました。



ファイルの展開



ダウンロードしたファイルを展開します。

tar xzvf db2exc_952_LNX_x86.tar.gz


コマンドラインインストールの実行



cd expc
sudo ./db2_install


次のようなエラーがでる場合があります。

ERROR:
   The required library file libstdc++.so.5 is not found on the system.
   Check the following web site for the up-to-date system requirements
   of IBM DB2 9.5
   http://www.ibm.com/software/data/db2/udb/sysreqs.html
   http://www.software.ibm.com/data/db2/linux/validate


その場合、次のライブラリのインストールを行ってください。(CentOS5.xでこのエラーになりました)

ライブラリのインストール



libstdc++.so.5をインストールします

sudo yum install compat-libstdc++-33


途中で入力の要求があります。(yとEnterと入力します)

Is this ok [y/N]: y




コマンドラインインストールの再実行



再度インストーラーを起動します。

製品のインストール用のデフォルト・ディレクトリー - /opt/ibm/db2/V9.5

別のディレクトリーを選択してインストールしますか [yes/no] ? no


デフォルトのディレクトリでインストールしますので、noとEnterを入力します。 次にインストールする製品選択の画面が出ます。

DB2 製品をインストールするには、スペースで区切られた
以下のキーワードを 1 つ以上指定してください。

  EXP

製品名を再表示するには "help" と入力してください。

終了するには "quit" と入力してください。


EXPとEnterを入力します。

エラーなどがなければ、10分程度でインストールが完了します。

正常に実行が完了しました。

詳しくは、「/tmp/db2_install.log.27138」にある DB2
インストール・ログを参照してください。


このように表示されればOKです。念のためログを確認しておきましょう。

ヘッダ、ライブラリリンク作成



開発用ヘッダ、ライブラリ類のリンク作成をします。

cd /opt/ibm/db2/V9.5/cfg
sudo ./db2ln


必要なユーザ、グループを作成します。

sudo /usr/sbin/groupadd -g 999 db2iadm1
sudo /usr/sbin/groupadd -g 998 db2fadm1
sudo /usr/sbin/groupadd -g 997 dasadm1

sudo /usr/sbin/useradd -g db2iadm1 -d /home/db2inst1 -m db2inst1
sudo /usr/sbin/useradd -g db2fadm1 -d /home/db2fenc1 -m db2fenc1
sudo /usr/sbin/useradd -g dasadm1 -d /home/dasusr1 -m dasusr1


パスワードを設定します。

sudo passwd db2inst1
sudo passwd db2fenc1
sudo passwd dasusr1


インスタンスを作成します

cd /opt/ibm/db2/V9.5/instance
sudo ./db2icrt -u dasusr1 dasusr1
sudo ./db2icrt -u dasusr1 db2inst1


正常に終了すると次のように表示されます。

BI1070I  Program db2icrt completed successfully.




動作確認



サンプルデータベースを作成します。

sudo su db2inst1
cd /opt/ibm/db2/V9.5/bin
./db2sampl


正常に終了すると次のように表示されます。

  Starting the DB2 instance...
  Creating database "SAMPLE"...
  Connecting to database "SAMPLE"...
  Creating tables and data in schema "DB2INST1"...
  Creating tables with XML columns and XML data in schema "DB2INST1"...
  Stopping the DB2 instance...

  'db2sampl' processing complete.


コマンドラインから動作の確認を行います。まず、インスタンスを起動します。

db2start


正常に終了すると次のように表示されます。

SQL1063N  DB2START processing was successful.


DB2コマンドプロセッサ(clp)を起動します。

db2


次のように入力します。(「db2 => 」はプロンプト)

db2 => connect to sample

  Database Connection Information

 Database server        = DB2/LINUX 9.5.2
 SQL authorization ID   = DB2INST1
 Local database alias   = SAMPLE

db2 => select * from staff where dept = 20

ID     NAME      DEPT   JOB   YEARS  SALARY    COMM
------ --------- ------ ----- ------ --------- ---------
    10 Sanders       20 Mgr        7  98357.50         -
    20 Pernal        20 Sales      8  78171.25    612.45
    80 James         20 Clerk      -  43504.60    128.20
   190 Sneider       20 Clerk      8  34252.75    126.50

  4 record(s) selected.


ためしに漢字を使って更新してみます。

db2 => update staff set NAME='栗原' where ID=10

DB20000I  The SQL command completed successfully.

db2 => select * from staff where dept = 20

ID     NAME      DEPT   JOB   YEARS  SALARY    COMM
------ --------- ------ ----- ------ --------- ---------
    10 栗原          20 Mgr        7  98357.50         -
    20 Pernal        20 Sales      8  78171.25    612.45
    80 James         20 Clerk      -  43504.60    128.20
   190 Sneider       20 Clerk      8  34252.75    126.50

  4 record(s) selected.

db2 => connect reset

DB20000I  The SQL command completed successfully.

db2 => quit

DB20000I  The QUIT command completed successfully.




サンプルデータベース削除する場合は、次のようにします。

cd /opt/ibm/db2/V9.5/bin
db2 drop database sample




PHPへの組み込み



PHPからDB2を使用できるようにします。

PHPを展開したディレクトリで、次のようにconfigureを実行します。

./configure  --enable-mbstring --enable-mbregex \
--with-apxs2=/usr/local/apache2/bin/apxs \
--prefix=/usr/local/php-5.2.9 --with-mysql=/usr/local/mysql \
--with-pgsql=/usr/local/pgsql --with-gd --with-zlib \
--with-xmlrpc --with-jpeg-dir=/usr --with-png-dir=/usr \
--enable-gd-native-ttf --with-freetype-dir=/usr \
--with-curl=/usr/local --enable-soap --enable-calendar \
--with-ibm-db2


Apacheが「/usr/local/apache2」にインストールされている必要があります。 また、このままの設定では、ライブラリなどがなくてエラーがでる場合があります。 私のサーバは、ApacheやPHPやデータベースなどは、バージョンアップする際に、新旧のバージョンを並存できるように、バージョンをつけたディレクトリにインストールし、汎用的な名前でシンボリックリンクを作成して使用しています。 このため、ご自身の環境に合わせて書き換えてご利用ください。

「./db2ln」を行っていない場合は、次のようにディレクトリを指定してください。

--with-ibm-db2=/opt/ibm/db2/V9.5


configureが終わったら、コンパイル、インストールを行います。

make
sudo make install


Apacheの起動スクリプトにDB2関連の設定を追加します。

sudo vi /usr/local/apache2/bin/apachectl


先頭部分を次のようにします。(この場合漢字コードはUTF-8です)

#!/bin/sh
#DB2
. /home/db2inst1/sqllib/db2profile
LANG=ja_JP.utf-8
export LANG




Apacheを再起動します。

sudo /usr/local/apache2/bin/apachectl restart


PHPからのDB2アクセスを行う場合、「db2inst1」ユーザで、「db2start」が実行されている必要があります。

PHPからアクセスできるか、テストを行います。

次の内容を、ドキュメントルートに、db2test1.phpとして作成します。 パスワードは、インストール時に設定した、db2inst1ユーザのパスワードとします。

<?php
$dbname="sample";
$username="db2inst1";
$password="test1234";
$db = odbc_connect($dbname, $username, $password);
if ($db) {
        echo "connect to " . $dbname . "-OK<br>";
$sql = "select * from staff where dept=20";
$result = odbc_exec($db, $sql);
if ($result) {
        odbc_result_all($result);
        odbc_free_result($result);
}
        odbc_close($db);
} else {
        echo "connect error<br>";
}
?>




ブラウザからつぎのURLを開きます。(サーバのIPアドレスは、実際のサーバのものに変更してください)

http://192.168.1.6/db2test1.php




ブラウザに次のように表示されれば、正しく動作しています。

connect to sample-OK
ID NAME DEPT JOB YEARS SALARY COMM 
10 栗原 20 Mgr  7 98357.50 NULL 
20 Pernal 20 Sales 8 78171.25 612.45 
80 James 20 Clerk NULL 43504.60 128.20 
190 Sneider 20 Clerk 8 34252.75 126.50 




EUCにおけるIBM拡張文字の問題



Apacheの漢字コードをEUCにすると、IBM拡張文字が正しく出力されなくなります。 IBM拡張漢字とは、「」や「ア」です。 なお、最終的にEUCで出力したい場合、PHP側で「EUC」の代わりに「CP51932」を指定することで、正しく変換することが出来ます。

mb_convert_encoding($str, "CP51932", "sjis-win");


この例は、SJISのIBM拡張漢字をEUCで出力する場合の変換例です。


トップへ