無料で利用できる Db2 Community Edition for Linux インストールガイド

以前、IBM developer Works というサイトで「DB2 Express-C クイックインストール」というタイトルで無料版 IBM Db2 のインストールガイドを掲載していたのですが、developerWorksの閉鎖と共にアクセスできなくなってしまっていました。そこで改めて無料で利用できる IBM Db2 Community Edition for Linuxのインストールガイドを書きました。使用するDb2 Community Editionはv11.5.8.0です。なおDb2 Community Editionの概要・制限やダウンロード方法についてはこちらを参照してください。

ファイアーウオールとSE Linux

Db2 for LinuxはインストールをサポートされるOSがドキュメントに記載されていますので、そこに記載があるOS(ディストリビューション)を使用することをお勧めします。詳細はこちらに説明を書いています。本稿ではUbuntu 20.04を使用します。(※2023年11月26日追記:事執筆時にはUbuntu 22.04が未サポートだったため本稿では20.04を利用していますが、Db2 11.5.9リリースに合わせてUbuntu 22.04.01(以降)がサポート対象になったため、今後はサポートがより長く残っているUbuntu 22.04に導入する事がお勧めです)

Db2はクライアントからネットワーク接続して使用しますので、Db2の通信に使用するポート番号はインバウンド通信を許可しておく必要があります。Db2への通信ポートはデフォルトでは25000番が利用されますので(補足:v11.5.5までのデフォルトは50000番でした)、OSのファイアーウオールや、Amazon EC2であればセキュリティグループでクライアントからのインバウンド通信を許可するようにしておいてください。

また、Community Editionの利用においては意識する必要はありませんが、FCMという通信のために20000番~20005番のポートが使用されます。

また、Redhat Enterprise Server Linux もしくはその互換OSの場合、標準でSELinuxが有効になっています。Db2をSE Linux環境で利用する場合は、こちらのドキュメントにあるようにdb2chgpathコマンドでの設定変更が必要になります。もしくは、開発用途等でSELinuxが必要ない場合はSELinuxをOFFにするのでも良いでしょう。

Db2で使用するユーザーとグループを決める

Db2では、導入する際にインスタンス所有者のユーザー、ユーザー定義関数(UDF)を利用する際に使用される分離(Fenced)ユーザー、管理サーバー用のユーザーの3つのユーザーが必要になります。同様にグループも必要です。1つのユーザーを使いまわす事もできますが、個別のユーザーとして管理することが推奨されています。

ユーザー名は任意ですが、この資料では、IBMのドキュメントにならって以下の名前でOS上にユーザーとグループを作ることにします(作成は後のステップで実行します)。

IBM Db2 11.5 ドキュメントから引用

3種類のインストール方法

Db2 for Linuxのインストールには、3種類の方法が用意されています。

  1. db2_install コマンド(CLI)- Db2プロダクトのインストールと最低限必要な設定だけが行われ、インスタンス所有者ユーザーの作成等は行われません。そのため本コマンドを実行後に別途ユーザー作成や設定を行う必要があります。
  2. db2setup -r コマンド(CLI) – レスポンスファイルという、インストール内容を記載した設定ファイルを読み込ませることで、インストール作業を自動化することが可能です。レスポンスファイルは、ダウンロードしたインストールイメージの./server_dec/db2/linuxamd64/samples/*.rspとして用意されています。
  3. db2setup コマンド(GUI)- Db2セットアップウィザードというGUIを起動してインストールを行います。GUIが利用できる環境であれば、この方法が簡単です。

本稿では、シンプルで何が起こっているか分かりやすい、db2_installを使用してインストールします。

Db2の稼働に必要になるOSパッケージの導入

Db2を導入する前に、必要になる関連パッケージを導入します。OSにログインし、suやsudo su – 等でrootユーザーとして以下の作業を実行します。

まず、ダウンロードしたDb2 for linuxのイメージファイル(v11.5.8_linuxx64_server_dec.tar.gz 等)を展開して、./server_dec/ディレクトリに入ります。

# tar zxvf v11.5.8_linuxx64_server_dec.tar.gz
# cd ./server_dec/

現在の環境でDbインストールの前提条件かを確認するためのコマンドとして、db2prereqcheckコマンドが用意されています。今回はバージョン11.5.8.0の前提条件を確認するので、以下のように実行します。

# ./db2prereqcheck -v 11.5.8.0

出力を確認すると、Ubuntu 20.04の場合、以下のWarningが出ています。

Validating "ksh symbolic link" ...
   WARNING : Requirement not matched.
ERROR:
   The 'strings' utility that is used to detect prerequisite libraries
   is not present on this system.  Please use your package or software
   manager to install the GNU Binary Utilities.

kshとstringsユーティリティが不足しているというものです。これはDb2単体で利用する場合は必要ありませんが、Tivoli System Automation for Multiplatforms(高可用性構成の管理ソフト)を使う場合には必要になります。

kshの不足を解消するために、以下のコマンドで導入します。

# apt update 
# apt install ksh93 binutils (※Ubuntu 22.04の場合はksh93u+mを指定)

これで前提準備がそろいました。他ディストリビューションの場合はWarningが出るパッケージが異なるかもしれませんが、不足を指摘されたパッケージをaptやdnfコマンドで導入することでWarningを解消します。(補足:すべてのWarningを解消しないとDb2が導入できないという事ではありません。利用する機能によっては不要なパッケージもあるためです)

なおdb2prereqchkを実行した際に、以下のようにlibpamやlibstdc++のWarningが出る場合がありますが、64bit環境でこのWarningが出ても無視できるとIBMのマニュアルに記載がありますので、これは気にする必要はありません

Validating "/lib/i386-linux-gnu/libpam.so*" ...
   DBT3514W  The db2prereqcheck utility failed to find the following 32-bit library file: "/lib/i386-linux-gnu/libpam.so*".
   WARNING : Requirement not matched.
Validating "C++ Library version " ...
   Required minimum C++ library: "libstdc++.so.6"
   Standard C++ library is located in the following directory: "/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.28".
DBT3512W  The db2prereqcheck utility failed to determine the currently-installed version of the C++ standard library, libstdc++.
   Requirement matched.

Db2プロダクトのインストールと確認

引き続きrootで作業をします。以下のようにdb2_installコマンドを実行してDb2プロダクトを導入します。コマンドのオプションの説明はこちらにあります。-bはインストールパスを、-pはプロダクトの種類を(今回はDb2サーバーの導入なのでSERVER)、-f NOTSAMPは、Tivoli System Automation for Multiplatforms を導入しないことを、そして-yは db2/license ディレクトリーにある使用許諾契約書を読んで内容に同意したことを示します。

./db2_install -b /opt/ibm/db2/V11.5 -p SERVER -f NOTSAMP -y

数分程度でプロダクトが導入されます。エラーが出た場合は、/tmp以下にあるログファイルに詳細情報が出力されます。導入後はdb2lsコマンドで導入バージョンを確認できます。

# db2ls

Install Path Level Fix Pack Special Install Number Install Date Installer UID

/opt/ibm/db2/V11.5               11.5.8.0        0                            

また、db2licm -lコマンドで導入したエディションを確認できます。以下のようにCommunity Editionが導入されています。

# /opt/ibm/db2/V11.5/adm/db2licm -l
Product name:                     "DB2 Community Edition"
License type:                     "Community"
Expiry date:                      "Permanent"
Product identifier:               "db2dec"
Version information:              "11.5"
Max amount of memory (GB):        "16"
Max number of cores:              "4"
Features:
IBM DB2 Performance Management Offering:              "Not licensed"

Db2インストール後の設定

先に決めておいたように、3つのユーザーとグループを作成します。

# groupadd -g 1999 db2iadm1
# groupadd -g 1998 db2fsdm1
# groupadd -g 1997 dasadm1

# useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 db2inst1
# useradd -u 1003 -g db2fsdm1 -m -d /home/db2fenc1 db2fenc1
# useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 dasusr1

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

# passwd db2inst1
# passwd db2fenc1
# passwd dasusr1

ユーザーの準備ができたので、インスタンス所有者ユーザーとFencedユーザーを指定して、db2icrtコマンドでDb2インスタンスを作成します。

# /opt/ibm/db2/V11.5/instance/db2icrt -u db2fenc1 db2inst1

インスタンス作成後に/etc/servicesにある、db2inst1インスタンスのポート番号を確認すると、以下のように追記されているはずです。DB2_db2inst1… という名前の20000番~20005番はFCMという通信用のポートですが、今回は意識する必要はありません。db2c_db2inst1と定義されている25000番がクライアントからDb2インスタンスに接続する際のポート番号になります。つまり、db2inst1インスタンスは25000番をListenします。

# Local services
DB2_db2inst1	20000/tcp
DB2_db2inst1_1	20001/tcp
DB2_db2inst1_2	20002/tcp
DB2_db2inst1_3	20003/tcp
DB2_db2inst1_4	20004/tcp
DB2_db2inst1_END	20005/tcp
db2c_db2inst1	25000/tcp

インスタンスの起動とサンプルデータベースの作成

Db2インスタンスを操作するには、インスタンス所有者(この例ではdb2inst1)で行う必要があります。そのため、ここからの操作はdb2inst1ユーザーにスイッチしてコマンドを実行します。db2levelはインスタンスが使用しているDb2プロダクトのバージョン確認、db2setはDb2のプロファイルレジストリーを確認するコマンドです。db2set -allの結果にDB2COMM=TCPIPがあることを確認してください。これが無いとTCP/IP通信を行いません。もし無い場合はdb2setコマンドで設定が可能です。

# sudo su - db2inst1

$ bash  ※(bashを実行しているのは環境変数を読み込むため)

$ db2level
DB21085I  This instance or install (instance name, where applicable:
"db2inst1") uses "64" bits and DB2 code release "SQL11058" with level
identifier "0609010F".
Informational tokens are "DB2 v11.5.8.0", "s2209201700", "DYN2209201700AMD64",
and Fix Pack "0".
Product is installed at "/opt/ibm/db2/V11.5".

$ db2set -all
[i] DB2COMM=TCPIP
[g] DB2SYSTEM=(ホスト名がここに入る)

環境が問題無い事を確認したら、db2startでインスタンスを起動し、念のため通信ポートをLISTENしているかを確認します。

$ db2start

$ netstat -l | grep db2
tcp        0      0 0.0.0.0:db2c_db2inst1   0.0.0.0:*               LISTEN

サンプルのデータベースを作成して、接続することで動作確認を行います。サンプルデータベースはdb2samplコマンドで作成可能です。

$ db2sampl

$ db2 connect to SAMPLE

Database Connection Information

Database server        = DB2/LINUXX8664 11.5.8.0
SQL authorization ID   = DB2INST1
Local database alias   = SAMPLE

$ db2 list tables

Table/View                      Schema          Type  Creation time

---

ACT                             DB2INST1        T     2023-04-15-08.34.49.376320
ADEFUSR                         DB2INST1        S     2023-04-15-08.34.50.846737
CATALOG                         DB2INST1        T     2023-04-15-08.34.53.359063
CL_SCHED                        DB2INST1        T     2023-04-15-08.34.47.595523
CUSTOMER                        DB2INST1        T     2023-04-15-08.34.52.777339
DEPARTMENT                      DB2INST1        T     2023-04-15-08.34.47.748587
                                  :
$ db2 "SELECT * FROM CUSTOMER"

$ db2 terminate

(補足)リモートサーバ上のDb2に接続する場合の設定はこちらに記載があります

Db2インスタンスが自動起動するように設定する(オプション)

もし、OS起動時にDb2インスタンスも自動起動するように設定する場合は、こちらのサポートドキュメントの記述に倣い、以下の設定を行います。

※rootユーザーで

# /opt/ibm/db2/V11.5/bin/db2fmcu -u -p /opt/ibm/db2/V11.5/bin/db2fmcd

※再度db2inst1ユーザーにスイッチして

$ db2iauto -on db2inst1

正しく設定できたかは、db2setコマンド、もしくはdb2gregコマンドで確認が可能です。

$ db2set DB2AUTOSTART   

$ db2greg -getinstrec instancename=db2inst1 | grep -i StartAtBoot

これでインストールは完了です。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です