perl DB2クライアント設定(express10.5)

PerlからDB2へ接続するクライアント環境構築手順を説明します。

# 0. 環境
- OS: CentOS 6.5
- シェル：bash (zsh)

# 1. DB2のソースコードの取得

下記のサイトからソースコードをダウンロードします。

http://www-01.ibm.com/software/data/db2/express-c/download.html

リンクからソースコードをダウンロードします。
今回は下記のソースコードを使用しました。

v10.5fp1_linuxia32_expc.tar.gz

# 2. 手順

- 適当なディレクトリを作業用に作成。
- ソースを移動・解凍
- 設定ファイルの編集
- インストールコマンドの実行

```
# 作業ディレクトリの作成
mkdir software
# ダウンロードしたソースを移動
mv v10.5fp1_linuxia32_expc.tar.gz ./software
# 作業ディレクトリに移動
cd software
# ソースコードの解凍
tar zxvf v10.5fp1_linuxia32_expc.tar.gz
# 展開先へ移動
cd expc
# rspファイルの作成
emacs db2expc.rsp
#下記のコマンドでインストールします。
#(実行プログラムはexpcディレクトリ以下にあります。)
sudo ./db2setup -r db2expc.rsp
#クライアント環境の作成
# yasuはクライアントを実行するユーザー名なので、環境に合わせて編集
sudo /opt/ibm/db2/V10.5/instance/db2icrt -u yasu yasu
# 一時的に環境変数を設定(bash)
export DB2_HOME=/home/yasu/sqlib)
# インストール
sudo ./db2setup -r db2expc.rsp
# クライアント環境を構築 yasu は自分のユーザ名に変更
sudo /opt/ibm/db2/V10.5/instance/db2icrt -u yasu yasu
```

この時点では、$DB2_HOME等の環境変数は設定されません。
環境変数を読み込ませてからPerlモジュールのインストールをして下さい。
（exec bash, 再度ログインするなどして）

db2expc.rspファイル
この内容を後で設定ファイルとして使用します。

```lang:db2expc.rsp
LIC_AGREEMENT = ACCEPT
PROD = EXPRESS_C
FILE = /opt/ibm/db2/V10.5
INSTALL_TYPE = CUSTOM
COMP = APPLICATION_DEVELOPMENT_TOOLS
COMP = DB2_SAMPLE_DATABASE
INTERACTIVE = YES
```

Perlモジュールのダウンロード

1. cpanm DBI

DB2への接続には上記モジュールが必要です。

2. cpanm DBD::DB2

DBD::DB2モジュールをインストールすることで、終了です。

```perl:connect_db2.pl
use strict;
use warnings;
use DBI;

my $DSN = 'DATABASE=DB名;HOSTNAME=127.0.0.1;PORT=50000;PROTOCOL=TCPIP;UID=ログイン名;PWD=パスワード';

my $dbh = DBI->connect('dbi:DB2:'.$DSN,'ユーザ名','パスワード') or die "can't connect\n";

```
 

# アンインストール

実行するコマンド (sqllibのあるホームディレクトリで実行してください。）

インスタンスの削除コマンド $user/sqllibディレクト
リが削除されます。
削除コマンドに読み込ませる設定ファイルのサンプルをコピーします。
編集権限を付与します

```
# yasu: インストールで使用したユーザー名
sudo ./opt/ibm/db2/V10.5/instance/db2idrop yasu
cp /opt/ibm/db2/V10.5/install/db2un.rsp ./
chmod +w db2un.rsp
#19行目のコメントを解除します。ALLのある行
emacs db2un.rsp
# 削除コマンドを実行します。成功すると/opt/ibm/db2/V10.5ディレクトリが削除されます。
sudo /opt/ibm/db2/V10.5/install/db2_deinstall -r db2un.rsp

# ディレクトリと設定ファイルの削除
sudo rm -rf /opt/ibm
rm db2un.rsp
``` 

# zshで使用する場合

.profileにはsqllib/db2profileを読み込む記述があります。
これはzshの場合では下記のようなエラーが表示されます。

```
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
AddRemoveString:12: command not found: awk
AddRemoveString:14: command not found: sed
_current_epoch:1: command not found: date
_current_epoch:1: bad math expression: operand expected at `/ 60 / 60 ...'
``` 

解決策は、.profileのDB2の設定を削除してからdb2関連の環境変数を.zshrcで記述します。

```
if [ -d "$HOME/sqllib" ] ; then
    export DB2INSTANCE=yasu
    export IBM_DB_LIB=/home/yasu/sqllib/lib
    export IBM_DB_DIR=/home/yasu/sqllib
    export DB2_HOME=/home/yasu/sqllib
    export IBM_DB_INCLUDE=/home/yasu/sqllib/include
    export DB2LIB=/home/yasu/sqllib/lib
fi
```

# データベースの作成

```shell-session
cd ~/

./sqllib/bin/db2

db2 => connect to yasu

db2 => create table test (id int, name varchar(32))

db2 => insert into test values (1, 'hoge')

db2 => select * from test

```