(追記 2015.01.05)
記事タイトルでは対象バージョンを 10.1 にしていますが、2015/01/05 現在は同じ手順でバージョン 10.5 が導入されるようです。


IBM 製リレーショナルデータベースである DB2 を CentOS に導入する手順を紹介します。
2014020100

DB2 は IBM 製のリレーショナルデータベースのサーバーおよび管理システムです。1980 年にリリースされた System 38 に組み込まれており、これが SQL を初めて採用した製品、と言われています(DB2 という単体製品としては 1983 年リリース)。リレーショナルデータベースとしての機能を持ちながら、XML DB 機能が統合されていたり、最新バージョンではビッグデータの統計処理に対応するための列ストア機能にも対応しています。

DB2 は本来有償の商用製品ですが、サポートが無いことも含めた特定の条件下であれば無料でダウンロードして利用することができます(商用利用も可)。その条件で提供されるエディションが Express-C と呼ばれています。無償版用のエディション名が与えられていますが、モジュールそのものに商用版との違いはありません。結構お得感のある製品と言えます。この詳しい条件については後述の「DB2 Express-C 10.1 for Linux クイックインストール」リンク先を参照してください。


インストール&セットアップの手順を紹介する上で最初にいくつかお断りを。まず現時点で DB2 の最新バージョンは 10.5 です。以下に Express-C 版(サポート無しの無償版)の導入手順を紹介しますが、Express-C でも 10.5 を入手すること自体は可能ですが、10.5 版のインストーラは独自のもので、よく言えば「インストーラーが最初に色々やってくれて便利」なんですが、悪く言うと「普段オープンソース製品を使っている人からすると独自すぎ&最初に色々すっ飛ばされると理解できない部分がある」のでした。というわけもあって、rpm で導入できるバージョン 10.1 を対象に紹介します。

また、IBM は公式には CentOS 上での DB2 の動作を保証していません(RHEL は対象):
DB2 Express-C 10.1 for Linux クイックインストール

私自身で試した範囲では RHEL 向けの手順をそのまま利用することで CentOS でも導入できて動作することを確認していますが、とりあえず注意が必要です。


では導入手順の紹介です。上記でも少し触れましたが DB2 は(現時点では)yum でサクっと導入できるものではありません。まずはインストールモジュールをダウンロードする必要があります。そしてその前提として IBM ID というユーザーIDが必要になります。登録自体は無料です。IBM ID を所有していない場合はダウンロード前に(誘導されて)作成することになります。

DB2 バージョン10.1の場合、"DB2 Express-C Team Blog" から直接リンクがあるのでこちらからダウンロードするのが手っ取り早いです。
http://www.db2teamblog.com/2010/11/rpm-and-deb-packages-for-db2-express-c.html

2014020101


上記サイト内の "Get RPM and DEB packages for DB2 Express-C" と書かれたリンクをたどると、DB2 バージョン 10.1 の、Linux 向けインストールパッケージ(RPM版とDEB版)が、32bit/64bit 用に用意されています。自分の環境にあったものをダウンロードしましょう。とりあえず今回は CentOS 用ということで RPM 版をダウンロードしますが、Ubuntu に導入するのであれば DEB 版を選択してください。
2014020102


ダウンロードが完了すると(RPM 64bit 版であれば) IBM-DB2-EXPC-latest.x86_64.rpm という300MB前後のファイルが見つかるはずです("lastest"バージョンではない気もするけど・・・)。これがインストーラーです。こいつを sftp などを使ってインストール対象の CentOS に転送しておきます。

で、RPM を使ってインストール・・・の前にしておくことあります。DB2 はインストール時に hostname コマンドで取得できるホスト名の IP アドレス解決ができるようになっている必要があるのでした。というわけでまずは hostname を確認と。。
# hostname
test.localhost.com (例です)
# 


このホスト名の IP アドレスが解決できるようになっていないといけないのでした。上記例であればこんな感じで確認します:
# ping test.localhost.com
ping: unknown host test.localhost.com
# 


IP アドレスの解決ができていないのであれば /etc/hosts を編集しておきましょう:
# vi /etc/hosts

XXX.XXX.XXX.XXX test.localhost.com (↑ホストのIPアドレス 127.0.0.1 でも可)


ここまでできれば RPM でインストールできます:
# rpm -ivh IBM-DB2-EXPC-latest.x86_64.rpm

正常に終了すると /opt/ibm/db2/V10.1/ 以下に IBM DB2 が導入されているはずです。


ここからが RPM 版インストーラを使った場合の仕様(?)なのですが、通常の専用インストーラを使ってインストールした場合は、インストールと同時に管理に必要な各種ユーザー/グループも作成してくれたり、インスタンスを作ったり、その中にサンプルのデータベースも作ってくれたり、その中身も初めから入れておいたりしてくれます。要はインストールが完了した段階で動作確認程度の利用まではできるようになっています。一方 RPM 版の場合はそれらを別途手動で行う必要があるのです。まあ他のオープンソース RDB を使っていると後者の方が一般的だと思うのですが、要はこの段階ではまだ DB2 というサーバーモジュールがインストールされただけで、起動させるための初期設定もできていない状態だということです。


では DB2 サーバーを起動して、データベースを1つ作成して接続するところまでの手順を以下に紹介します。

DB2 サーバーを運用する上では3つの管理ユーザー/グループを用意して、指定しておく必要があります。まずインスタンス所有者としての管理ユーザー、次にユーザー定義関数やストアドプロシージャの実行権限を持った管理ユーザー、そして DB2 管理サーバーの管理ユーザー、およびこれらの所属グループです。今回はこれらのユーザーをそれぞれ db1inst1/db2fenc1/dasusr1 、またそれぞれの所属グループを db2iadm1/db2fadm1/dasadm1 として作成することにします(通常インストーラを使った場合のデフォルト設定と同じです)。


まずは管理用のグループを作成します。以下ではグループIDに997~999を使っていますが、既存環境とバッティングする場合は適当に変えてください:
# groupadd -g 999 db2iadm1
# groupadd -g 998 db2fadm1
# groupadd -g 997 dasadm1

次に管理ユーザーを作成します。以下ではユーザーIDに1002~1004を使っていますが、これも既存環境とバッティングする場合は適当に変えてください:
# useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 db2inst1
# useradd -u 1003 -g db2fadm1 -m -d /home/db2fenc1 db2fenc1
# useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1

そしてこれらの各ユーザーのパスワードを設定しておきます:
# passwd db2inst1
# passwd db2fenc1
# passwd dasusr1

ここまでの作業でやっと DB2 のインスタンスを作成する準備ができました。インスタンスの所有者を db2inst1 に、ユーザー定義関数やストアドプロシージャの管理者を db2fenc1 に指定するには以下のコマンドを実行します:
# /opt/ibm/db2/V10.1/instance/db2icrt -u db2fenc1 db2inst1

インスタンスが出来た所で DB2 サーバーを起動してみましょう。サーバーは root ユーザーでは起動できません。インスタンスオーナーである db2inst1 ユーザーで起動することになります:
# su - db2inst1
$ db2start
SQL1063N  DB2START processing was successful.
$

では起動した DB2 インスタンスに接続します:
$ db2
(c) Copyright IBM Corporation 1993,2007
Command Line Processor for DB2 Client 10.1.1

  :
  :

For more detailed help, refer to the Online Reference Manual.

db2 => 

何はともあれ、まずはデータベースを作成しましょう。コードセットは UTF-8 で、テリトリーコードを JP に設定した testdb というデータベースを作成します:
db2 => create db testdb using codeset utf-8 territory jp
DB20000I  The CREATE DATABASE command completed successfully.
db2 =>
※ちなみにこのコマンドの完了までに長い時間がかかります。コマンド入力し終わったらコーヒー一杯くらいは飲めそう(苦笑)。裏でどんな処理がされているのか分からないのですが、ここが MySQL などと大きく違う点の1つと言えるかもしれません。。

データベースに接続するには connect コマンドを利用します:
db2 => connect to testdb

   Database Connection Information

 Database server       = DB2/LINUXX8664 10.1.1
 SQL authorization ID  = DB2INST1
 Local database alias  = TESTDB

db2 => 

動いたー! d(o^ )


(2014/05/28 追加)
最後にこのサーバーへの外部アクセスを許可するための設定(というかおまじない)を db2inst1 ユーザーで実行します:
$db2set DB2COMM=TCPIP
$db2 update dbm cfg using svcename 50000

そしてこの一行を /etc/services に追加して再起動:
db2c_db2inst1   50000/tcp

(追加ここまで)


ここから先は普通の RDB 同様に、create table なり select なり、一般的な SQL の世界になります。