Windows WSL2でDb2 12.1を動かす

WSL(windows Subsystem for Linux)は、構築手順が簡単で動作も軽いため、Db2 Linux版のちょっとしたテスト環境として使いやすい。
以前に、別の記事[「Windows 11 WSL2でUbuntu, Db2を動かす」](https://qiita.com/kayokok/items/6aaf13c7b65c9c6eb636)で、Windows 11 WSL2+Ubuntu +Db2 V11.5を動かす手順をまとめていた。2024年11月にDb2の新バージョン 12.1が公開されたので、記事を更新する。まだ、元記事も置いておくが、Db2最新バージョンである12.1を導入する場合は、当記事を参照していただきたい。

以下、環境構築手順を説明する。(2024/11/18現在)
Db2が使えるようになるまでの、大まかなステップは以下のとおりである。
[1. Db2の準備](#1-db2の準備)：Db2 12.1の導入モジュールを入手する
[2. WSL2環境の構築](#2-wsl2環境の構築)：WSL2を使用可能にし、Ubuntuの導入、カストマイズを行う
[3. Db2の導入](#3-db2の導入)：1で入手したDb2モジュールをUbuntuに導入する
[4. Db2インスタンスとデータベースの作成](#4-db2インスタンスとデータベースの作成)：Db2のインスタンスおよびSAMPLEデータベースを作成する


# 1. Db2の準備
## (1). Db2 Community Editionのダウンロード
Db2には、有償版(Advanced, Standard および Starter Edition)と、無償版(Community Edition)がある。
無償版はサポートの対象にならない他、使用できるマシンに制限(CPU4コア、メモリ8GB以下)があるが、機能としては有償版と変わらない。
自分で使うには十分のため、Community Editionを導入することにする。

Db2 12.1 Community Editionは、ここからダウンロードできる。
[IBM Db2 Community Edition](https://www.ibm.com/account/reg/us-en/signup?formid=urx-33669)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189034/d2be067f-84fa-9294-b116-c3ce4436888f.png)
ダウンロードするために、IBMid(IBMアカウント)が必要となる。
IBMidは、無償版製品や障害フィックスパックのダウンロードの他、IBM Cloudへのアクセス、IBM製品サポートからの情報入手等広く用いられる、いわばIBMの個人顧客IDのようなものである。時々IBM製品を使うなら、持っていて損はない。
すでにIBMidを持っていればそれを使用、なければ新規に登録して次へ。
名前や、電話番号など聞かれるが、答えて進むとダウンロードページにたどり着く。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189034/091a1eab-1349-2edf-5cf4-f81f489a4fec.png)

今回導入したいのは、64bitのLinux版なので、Linux(x64)のDownloadを選択する。
導入モジュール　`v12.1.0_linuxx64_server_dec.tar.gz`　がダウンロードされる。
ここでは、Windowsの任意のパスに置いておく。この記事では以下のパスを使用する。

```
C:\temp\v12.1.0_linuxx64_server_dec.tar.gz
```

ちなみに、Db2のフィックスパック一覧はここにあるので、Db2の最新バージョン、モディフィケーション、フィックスパックレベルを確認したい場合は、チェックするとよい。
この文書のリンク先からフィックスパックをダウンロードすることもできる。
[Download Db2 Fix Packs by version for DB2 for Linux, UNIX and Windows](https://www.ibm.com/support/pages/node/318421)

## (2). Db2導入前提の確認
Linux環境を構築する前に、Db2の導入前提を確認しておく。
導入前提はここに記載されている。
[System requirements for IBM Db2 for Linux, UNIX, and Windows](https://www.ibm.com/support/pages/system-requirements-ibm-db2-linux-unix-and-windows)
どのバージョン、エディションの前提条件を表示するか選択するようになっているが、今回導入するのはDb2 V12.1なので、Db2 V12.1 Advanced EditionのLinuxを選ぶ。上述のように、Advanced Editionも、Community Editionも機能の差は無く、前提も同じなので、エディション名は気にしなくてよい。
現時点でサポートしているLinuxは、以下とわかる。(導入する前に、必ず確認のこと。)
- Amazon Linux 2023
- RHEL 9.4以上
- SLES 15 SP6以上
- Ubuntu 22.04 LTS

H/W前提としては、メモリ1GB、ディスクは導入モジュールの展開分なども合わせて10GB程度の空きは欲しい。

# 2. WSL2環境の構築
## (1). WSLとUbuntuのインストール
WSL(Windows Subsystem for Linux)を使えば、Windows上に簡単にLinux環境を構築できる。
WSLの導入方法については、以下の文書を見る。
[WSL のインストール](https://docs.microsoft.com/ja-jp/windows/wsl/install)
この文書によると、Windows 10 バージョン2004以降 (ビルド19041以降) では、PowerShellで`wsl --install`コマンドを実行することにより、wslコンポーネントの有効化から、Linux ディストリビューションのインストールの実行まで一気に行うことができる。
導入可能なディストリビューションの一覧は、`wsl --list --online`コマンドで取得する。
PowerShellターミナルで以下のように実行する。
```
PS C:\> wsl --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
既定の分布は ' * ' で表されます。
 'wsl --install -d <Distro>'を使用してインストールします。

  NAME                            FRIENDLY NAME
* Ubuntu                          Ubuntu
  Debian                          Debian GNU/Linux
  kali-linux                      Kali Linux Rolling
  Ubuntu-18.04                    Ubuntu 18.04 LTS
  Ubuntu-20.04                    Ubuntu 20.04 LTS
  Ubuntu-22.04                    Ubuntu 22.04 LTS
  Ubuntu-24.04                    Ubuntu 24.04 LTS
  OracleLinux_7_9                 Oracle Linux 7.9
  OracleLinux_8_7                 Oracle Linux 8.7
  OracleLinux_9_1                 Oracle Linux 9.1
  openSUSE-Leap-15.6              openSUSE Leap 15.6
  SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
  SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
  openSUSE-Tumbleweed             openSUSE Tumbleweed
PS C:\>
```

`wsl --instal -d <Distribution Name>`のように、-dオプションをつけることにより、導入するLinuxディストリビューションを指定できる(デフォルトはUbuntu)。
Db2では、Ubutuのサポートレベルに制約があるため、導入バージョンを Ubuntu 22.04 LTSと明示して導入する。
```
wsl --install -d Ubuntu-22.04
```
管理者権限の確認を要求されるので、適宜確認する。
```
PS C:\> wsl --install -d Ubuntu-22.04
要求された操作には管理者特権が必要です。
インストール中: Linux 用 Windows サブシステム
Linux 用 Windows サブシステム はインストールされました。
インストール中: Ubuntu 22.04 LTS
Ubuntu 22.04 LTS はインストールされました。
要求された操作は正常に終了しました。変更を有効にするには、システムを再起動する必要があります。
PS C:\>

```
導入完了メッセージが出されるので、PCを再起動する。
再起動後、Ubuntuが自動的に起動され、デフォルトユーザーIDとパスワードの登録を求めるプロンプトが出されるので、これに応えてユーザーIDを作成する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189034/00564698-803c-b89e-4578-72c1b7d9a50b.png)

ユーザーID, パスワードを作成すると、以下のようにUbuntuの導入が完了した状態となる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/189034/ce8b4853-1b67-fce1-9ec0-2f0bf44810e3.png)

## (2). Ubuntuパッケージの更新と日本語化
Ubuntuを導入しただけの状態では、ロケールがCなので、Ubutuのパッケージを最新化して、日本語化する。
この記事を参考にさせていただいた。
[WSL2のUbuntu 20.04を日本語化する](https://qiita.com/myalpine/items/fb45b222924b2e61ea9f)

### 手順 1 - パッケージを最新にする
まずパッケージリストを更新する。

```shell-session
sudo apt update
```

リストにしたがって、パッケージを更新する。

```shell-session
sudo apt upgrade
```

### 手順 2 - 日本語パックを導入する

```shell-session
sudo apt -y install language-pack-ja
```

### 手順 3 - ロケールを日本語に設定する

```shell-session
sudo update-locale LANG=ja_JP.UTF-8
```


ここで、Ubuntuの再起動を行う。
Ubuntuのウィンドウを、［Ctrl］＋［D］で終了。Windowsのアプリケーションリストから、「Ubuntu 22.04.5 LTS」を選択して起動する。
コマンドプロンプトで、localeコマンドを実行し、ロケールがja_JPに変更されていることを確認する。

```shell-session
test@DESKTOP-Q470SAE:~$ locale
LANG=ja_JP.UTF-8
LANGUAGE=
LC_CTYPE="ja_JP.UTF-8"
LC_NUMERIC="ja_JP.UTF-8"
LC_TIME="ja_JP.UTF-8"
LC_COLLATE="ja_JP.UTF-8"
LC_MONETARY="ja_JP.UTF-8"
LC_MESSAGES="ja_JP.UTF-8"
LC_PAPER="ja_JP.UTF-8"
LC_NAME="ja_JP.UTF-8"
LC_ADDRESS="ja_JP.UTF-8"
LC_TELEPHONE="ja_JP.UTF-8"
LC_MEASUREMENT="ja_JP.UTF-8"
LC_IDENTIFICATION="ja_JP.UTF-8"
LC_ALL=
```
dateの出力フォーマットを確認する。
```shell-session
test@DESKTOP-Q470SAE:~$ date
2024年 11月 16日 土曜日 17:38:59 JST
test@DESKTOP-Q470SAE:~$
```

WSL2 Ubuntuの時刻がWindowsの時刻とずれていることがある。大きくずれているとエラーの原因となることがあるので、Ubuntuの時刻を、ハードウェアクロックと合わせておく。ただし、この方法ではWindowsの時刻とUbuntuの時刻を解消することはできない。きちんと一致させたい場合は、NTPを導入して同期させるなど工夫が必要らしいが、そのあたりの事情は以下の記事など、WSLの時刻ずれを扱った他の記事を参考にしていただきたい。
参考：[WindowsとWSL2の時刻のずれを修正する](https://qiita.com/moriai/items/f633e01728d8d062adb1)
ここでは、厳密ない一致は求めていないので以下のように実行する。
```
sudo hwclock --hctosys
```


これで、Ubuntu 22.04環境は一応完成。

# 3. Db2の導入
Db2の導入作業は、以下のステップからなる。
1. Db2前提パッケージの確認
2. Db2前提パッケージの導入
3. Db2の導入

## (1). Db2前提パッケージの確認
Db2の前提パッケージをマニュアルの以下のページで確認する。
[インストールに関するその他の注意点 (Linux)](https://www.ibm.com/docs/ja/db2/12.1?topic=servers-linux)
より正確には、導入モジュールに同梱されている、db2prereqcheckツールを使用してチェックを行う。

### 手順 1 - Db2導入モジュールの解凍
db2prereqcheckツール実行のために、導入モジュールを解凍する。
WSLでは、Linuxの中から、WindowsのCドライブを/mnt/cとして参照できる。
最初に、ダウンロードしたDb2 Community Editionの導入モジュールを、
C:\temp\v12.1.0_linuxx64_server_dec.tar.gz
に置いたので、これを、Ubuntu側から解凍する。(例では、/workに解凍。)

```shell-session
mkdir /work
cd /work
tar -zxvf /mnt/c/temp/v12.1.0_linuxx64_server_dec.tar.gz
```
解凍すると、server_decというディレクトリができる。
解凍内容を確認する。
```shell-session
test@DESKTOP-Q470SAE:/work$ ls -l
合計 4
drwxr-xr-x 3 test test 4096 11月  8 20:06 server_dec
test@DESKTOP-Q470SAE:/work$ cd server_dec;ls -l
合計 88
drwxr-xr-x 6 test test  4096 11月  8 20:06 db2
-r-xr-xr-x 1 test test  5207 11月  8 20:06 db2_deinstall
-r-xr-xr-x 1 test test  5077 11月  8 20:06 db2_install
-r--r--r-- 1 test test 16927 11月  8 20:06 db2checkCOL.tar.gz
-r--r--r-- 1 test test  4987 11月  8 20:06 db2checkCOL_readme.txt
-r-xr-xr-x 1 test test  5254 11月  8 20:06 db2ckupgrade
-r-xr-xr-x 1 test test  5041 11月  8 20:06 db2ls
-r-xr-xr-x 1 test test  5059 11月  8 20:06 db2prereqcheck
-r-xr-xr-x 1 test test  5059 11月  8 20:06 db2setup
-r-xr-xr-x 1 test test  5095 11月  8 20:06 installFixPack
```
### 手順 2 - db2prereqcheckの実行
server_decの下にある、db2prereqcheckを実行する。
-vオプションで、検査するDb2のバージョンを指定するが、今回は12.1.0.0となる。
```
test@DESKTOP-Q470SAE:/work/server_dec$ ./db2prereqcheck -v 12.1.0.0	
	
==========================================================================	
	
Sun Nov 17 15:34:41 2024	
DB2 インストールの前提条件を検査しています。バージョン「12.1.0.0」。オペレーティング・システム「Linux」	
	
「カーネル・レベル 」の妥当性検査を実行しています...	
   最小の必須オペレーティング・システム・カーネル・レベル: 「5.14.0」。	
   実際のオペレーティング・システム・カーネル・レベル: 「5.15.167.4」。	
   要件が一致しました。	
	
「Linux ディストリビューション 」の妥当性検査を実行しています...	
   最小必須「UBUNTU」バージョン: 「22.04」	
   実際のバージョン: 「22.04」	
   要件が一致しました。	
	
「ksh symbolic link」の妥当性検査を実行しています...	
   ERROR : 要件が一致しませんでした。	
	
「Bin user」の妥当性検査を実行しています...	
   要件が一致しました。	
	
「libcurl.so.4 library」の妥当性検査を実行しています...	
   要件が一致しました。	
	
「C++ ライブラリー・バージョン 」の妥当性検査を実行しています...	
   最小必須 C++ ライブラリー: 「libstdc++.so.6」	
   標準 C++ ライブラリーは次のディレクトリーにあります: 「/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.30」。	
   実際の C++ ライブラリー: 「CXXABI_1.3.1」	
   要件が一致しました。	
	
	
「「libstdc++.so.6」の 32 ビット・バージョン 」の妥当性検査を実行しています...	
   次のディレクトリーで 64 ビット「/lib/x86_64-linux-gnu/libstdc++.so.6」が見つかりました: 「/lib/x86_64-linux-gnu」。	
DBT3514W db2prereqcheck ユーティリティは、"libstdc++.i686" パッケージによって提供される 32 ビット・ライブラリー・ファイ ル "libstdc++.so.6" を見つけられませんでした。	
	
「libaio.so バージョン 」の妥当性検査を実行しています...	
DBT3552E  db2prereqcheck ユーティリティーは libaio.so.1 ファイルのオープンに失敗しました。コマンド出力: 「libaio.so.1: cannot open shared object file: No such file or directory」。	
DBT3520E  db2prereqcheck ユーティリティーはライブラリー・ファイル libaio.so.1 を検出できませんでした。	
   ERROR : 要件が一致しませんでした。	
	
「libnuma.so バージョン 」の妥当性検査を実行しています...	
DBT3610I  db2prereqcheck ユーティリティーは正常に libnuma.so.1 ファイルをロードしました。	
   要件が一致しました。	
	
「/lib/i386-linux-gnu/libpam.so*」の妥当性検査を実行しています...	
   DBT3514W db2prereqcheck ユーティリティは、"" パッケージによって提供される 32 ビット・ライブラリー・ファイル "/lib/i386-linux-gnu/libpam.so*" を見つけられませんでした。	
   WARNING : 要件が一致しませんでした。	
DB2 データベース「Server」 の要件と一致しませんでした。バージョン:「12.1.0.0」。	
現行システムで満たされていない前提条件の要約:	
   DBT3514W db2prereqcheck ユーティリティは、"" パッケージによって提供される 32 ビット・ライブラリー・ファイル "/lib/i386-linux-gnu/libpam.so*" を見つけられませんでした。	
	
	
DBT3520E  db2prereqcheck ユーティリティーはライブラリー・ファイル libaio.so.1 を検出できませんでした。	
	
	
DBT3514W db2prereqcheck ユーティリティは、"libstdc++.i686" パッケージによって提供される 32 ビット・ライブラリー・ファイ ル "libstdc++.so.6" を見つけられませんでした。	
	
	
DBT3618E db2prereqcheck ユーティリティーは、ksh が ksh、ksh93、mksh、または lksh にリンクされていないことを検出しました 。 これは、Tivoli SA MP を使用する Db2 高可用性フィーチャーに必要です。	
	
test@DESKTOP-Q470SAE:/work/server_dec$	

```
エラーまたは警告となっているのは、以下のパッケージ。
- libpam0g: エラーメッセージで/lib/i386-linux-gnu/libpam.so*となっている32bit版のlibpam. 64bit版のlibpamは標準で導入されているが、32bitの非SQLルーチンや、32bit JDKを用いたType2 JDBCアプリケーションがある場合は、この32bit版が必要
- libaio1:非同期入出力を使用する Db2 データベース・サーバーに必要
- libstdc++6: 32ビット版の非SQLルーチンや、JDBCタイプ2ドライバーの32ビットアプリケーションがなければ不要
- ksh: これはTivoli SA MPを使用する場合に必要とされており、ここでは使用予定は無いので、無くてもよい

## (2). Db2前提パッケージの導入
### 手順 1 - 32bitライブラリの追加を可能にする
前提チェックで、エラーまたは警告となったのは、libpam0g, libaio1, libstdc++6, kshであるが、必須であるのはlibaio1だけであり、残りは無くても問題ない。しかし、きれいに導入したいので、今回上記すべてのパッケージを導入する。
上述のとおりlibstdc++6, libpam0gは32bitライブラリである。32bit版のライブラリは、単にapt installするだけでは導入されないので、32bitアーキテクチャのライブラリが許容されるようにして、ライブラリ情報を更新する。
以下は、Ubuntuのコマンドウィンドウで実行する。

```shell-session
sudo dpkg --add-architecture i386
sudo apt update
```

### 手順 2 - パッケージの導入
以下のコマンドを実行し、必要なパッケージを導入する。

```shell-session
sudo apt -y install libpam0g:i386
sudo apt -y install libaio1
sudo apt -y install libstdc++6:i386
sudo apt -y install ksh
```

### 手順 3 - db2prereqcheckによる再確認

`db2prereqcheck -v 12.1.0.0`を再実行して、エラーが無いことを確認する。
エラーが無ければ、メッセージの最後に以下のように表示される。
```
DBT3533I  db2prereqcheck ユーティリティーは、インストール前提条件がすべて満たされていることを確認しました。
```


## (3). Db2の導入
Db2の導入は通常rootで実行する。非rootユーザーによる導入も可能だが、root導入の方が一般的であるので、以下の手順は
`sudo su`
を実行し、rootユーザーとして実行する。

### 手順 1 - db2_installの実行
「(1). Db2前提パッケージの確認」で導入モジュールを解凍してできた、server_decディレクトリにある、db2_installコマンドを以下のように実行する。
-L JPは日本語パックを導入するための指定である。

```shell-session
cd /work/server_dec
./db2_install -L JP
```
db2_installコマンドを実行すると、最初にいくつかの質問への回答を求められるが、以下のように回答する。
- ライセンスへの同意：yes
- 導入ディレクトリ：デフォルトを受け入れるならyes。変更する場合はnoと答えて、新しいパス名を指定する。
- 導入する製品の種類：SERVER
- pureScaleを導入：no

以下は実行例である。

```
root:/work/server_dec# ./db2_install -L JP
db2/license ディレクトリーにある使用許諾契約書ファイルをお読みください。

***********************************************************
ご使用条件に同意する場合は、「yes」と入力します。同意しない場合は、「no」と入力してインストール処理をキャンセルします。[yes/no]
yes


製品をインストールするデフォルト・ディレクトリー - /opt/ibm/db2/V12.1

***********************************************************
デフォルト・ディレクトリー (/opt/ibm/db2/V12.1) にインストールしますか? [yes/no]
yes


DB2 製品をインストールために次の中からキーワードを 1 つ指定してください。

  SERVER
  CONSV
  CLIENT
  RTCL

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

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

***********************************************************
SERVER
***********************************************************
DB2 pureScale Feature をインストールしますか? [yes/no]
no
DB2 インストールを初期化しています。

 実行されるタスクの合計数: 57
実行される全タスクの合計見積もり時間: 2836 秒

タスク #1 を開始します。
説明: ご使用条件受諾のチェック
見積もり時間 1 秒
タスク #1 が終了しました。

タスク #2 を開始します。
説明: root 特権を使用したインストールのための基本クライアント・サポート
見積もり時間 3 秒
タスク #2 が終了しました。

タスク #3 を開始します。
説明: 製品メッセージ - 英語
見積もり時間 14 秒
タスク #3 が終了しました。

　　　　　：
         中略
　　　　　：

タスク #57 を開始します。
説明: グローバル・プロファイル・レジストリーの更新
見積もり時間 3 秒
タスク #57 が終了しました。

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

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

```

以上で、Db2が導入できた。

# 4. Db2インスタンスとデータベースの作成
Db2を使用するには、インスタンスが必要である。
インスタンスは、Db2の起動/停止の単位であり、Linux上では、db2syscというプロセスとして稼働する。
同一OS上に、複数のインスタンスを作成することができる。インスタンスは、同じバージョン、フィックスパックレベルであってもよいし、異なっていてもよい。
一つのインスタンスには、複数のデータベースを作成することができる。
インスタンスを作成するためには、インスタンス実行用のユーザー(インスタンスオーナー)を用意する必要がある。インスタンス環境は、インスタンスオーナーのホームディレクトリに作成される。
インスタンスを作成したら、Db2に付属のスクリプトを実行して、SAMPLEデータベースを作る。自分で作りたいデータベースがあれば、SAMPLEデータベースを作る必要はない。何かデータベースを作成してみて、ちょっとしたSQLを実行確認して、完了である。
## (1). インスタンス用ユーザーの作成
Db2のインスタンスを作成するために、インスタンスオーナーと、フェンスユーザー(プロシージャ実行用ユーザー)を作成する。
インスタンスオーナーのデフォルト名はdb2inst1であるが、セキュリティ上の理由でデフォルト名は避けた方がよいことと、同一WSL上に異なるバージョンのDb2を追加導入する可能性を考え、db2i121という名前を用いる。命名規則に従えば任意の名前をつけてよい。
ここでは、以下のユーザーID、グループIDを作成する。

| ユーザーの種類        | ユーザー名| UID| グループ名| GID |
|:--------------------:|:---------:|:--:|:--------:|:---:|
| インスタンスオーナー  | db2i121  |1001 |db2iadm1  |1001 |
|  フェンスユーザー     | db2fenc1 |1002 |db2fgrp1  |1002 |

ユーザー名、グループ名は8文字以下、英小文字、数字、_ (下線) が使用できる。一般のユーザー名は、128文字以下で、使用可能な記号も多いが、インスタンスオーナーとフェンスユーザーは特別である。GIDは100-65535の範囲で割り振る。
追加したユーザーはデフォルトでは、sudoできない。インスタンスオーナーは特権コマンドを使用したい場合もあるので、sudoグループに追加しておくと便利である。

Ubuntu上で以下を実行する。

```shell-session
sudo groupadd -g 1001 db2iadm1
sudo groupadd -g 1002 db2fgrp1
sudo useradd -m -u 1001 -g 1001 -G sudo -s /bin/bash db2i115
sudo useradd -m -u 1002 -g 1002 -s /bin/bash db2fenc1
```

作成したユーザーにはパスワードを付与しておく。
```shell-session
sudo passwd db2i121
```


## (2). インスタンスの作成
### 手順 1 - インスタンス作成コマンドの実行
`db2icrt`コマンドを実行して、インスタンスを作成する。db2icrtコマンドはDb2導入ディレクトリのinstanceサブディレクトリにある。インスタンスの作成にはroot権限が必要である。
`db2icrt`のシンタックスは、
`db2icrt -u フェンスユーザー名 インスタンス名`
である。

```shell-session
cd /opt/ibm/db2/V12.1/instance
sudo ./db2icrt -u db2fenc1 db2i121
```

以下は実行例。

```
test@DESKTOP-Q470SAE:/opt/ibm/db2/V12.1/instance$ sudo ./db2icrt -u db2fenc1 db2i121
DBI1446I  db2icrt コマンドの実行中です。

DB2 インストールを初期化しています。

 実行されるタスクの合計数: 4
実行される全タスクの合計見積もり時間: 309 秒

タスク #1 を開始します。
説明: デフォルト・グローバル・プロファイル・レジストリー変数の設定
見積もり時間 1 秒
タスク #1 が終了しました。

タスク #2 を開始します。
説明: インスタンス・リストの初期化
見積もり時間 5 秒
タスク #2 が終了しました。

タスク #3 を開始します。
説明: DB2 インスタンスの構成
見積もり時間 300 秒
タスク #3 が終了しました。

タスク #4 を開始します。
説明: グローバル・プロファイル・レジストリーの更新
見積もり時間 3 秒
タスク #4 が終了しました。

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

詳しくは、「/tmp/db2icrt.log.44610」にある DB2
インストール・ログを参照してください。
DBI1070I  プログラム db2icrt は正常に完了しました。

test@DESKTOP-Q470SAE:/opt/ibm/db2/V12.1/instance$

```

### 手順 2 - インスタンスホームの確認
ここで、db2i115ユーザーとして、ホームディレクトリ(/home/インスタンスオーナーのユーザー名)の下にsqllibディレクトリが作成されていることを確認する。
以下は実行例。

```shell-session
test:/opt/ibm/db2/V12.1/instance$ su - db2i121
パスワード:

db2i121@DESKTOP-Q470SAE:~$ pwd
/home/db2i121
db2i121@DESKTOP-Q470SAE:~$ ls -la
合計 44
drwxr-xr-x  6 db2i121 db2iadm1 4096 11月 16 22:27 .
drwxr-xr-x  5 root    root     4096 11月 16 19:45 ..
-rw-------  1 db2i121 db2iadm1   69 11月 16 22:30 .bash_history
-rw-r--r--  1 db2i121 db2iadm1  220  1月  7  2022 .bash_logout
-rw-r--r--  1 db2i121 db2iadm1 3919 11月 16 22:27 .bashrc
drwxr-xr-x  3 db2i121 db2iadm1 4096 11月 16 22:27 .cache
drwxr-xr-x  3 db2i121 db2iadm1 4096 11月 16 22:27 .ibm
-rw-r--r--  1 db2i121 db2iadm1 2078 12月  6  2021 .kshrc
drwxr-xr-x  2 db2i121 db2iadm1 4096 11月 16 19:46 .landscape
-rw-r--r--  1 db2i121 db2iadm1    0 11月 16 19:46 .motd_shown
-rw-r--r--  1 db2i121 db2iadm1  974 11月 16 22:27 .profile
drwxrwsr-t 18 db2i121 db2iadm1 4096 11月 16 22:28 sqllib
db2i121@DESKTOP-Q470SAE:~$
```
作成されたインスタンスのDb2バージョンを確認する。確認には、`db2level`コマンドを使用する。
```
db2i121@DESKTOP-Q470SAE:~$ db2level
DB21085I  このインスタンスまたはインストール
(該当する場合のインスタンス名: "db2i121") は "64"
ビットおよび DB2 コード・リリース "SQL12010" をレベル ID
02010110 で使用します。
情報トークンは、"DB2
v12.1.0.0"、"special_50594"、"DYN2411071022AMD64_50594"、およびフィッ
クスパック "0" です。
製品は "/opt/ibm/db2/V12.1" にインストールされています。
```
正しくDb2 12.1.0.0が使用されている。
ライセンス情報は以下のように`db2licmコマンドで確認する。
```
db2i121@DESKTOP-Q470SAE:~$ db2licm -l
製品名:                                          "DB2 Community Edition"
ライセンス・タイプ:                              "コミュニティー"
有効期限:                                        "永続"
製品 ID:                                         "db2dec"
バージョン情報:                                  "12.1"
メモリーの最大量 (GB):                           "8"
コアの最大数:                     "4"
制約ポリシー:                                    "ハード・ストップ"
機能:
IBM DB2 Performance Management オファリング:          "ライセンスなし"
```
Db2 Community Editionであることがわかる。



### 手順 3 - Db2インスタンスの起動
インスタンスオーナーで、Db2インスタンスを起動してみる。起動コマンドは`db2start`である。

```shell-session
db2i121@DESKTOP-Q470SAE:~$ db2start
11/16/2024 22:38:06     0   0   SQL1063N  DB2START の処理が正常に終了しました。
SQL1063N  DB2START の処理が正常に終了しました。
```

稼働プロセスの一覧を見ると、db2syscプロセスが起動している。

```shell-session
db2i121@DESKTOP-Q470SAE:~$ ps -ef | grep db2
root       52237       1  0 22:27 ?        00:00:00 /opt/ibm/db2/V12.1/bin/db2fmcd
root       62777    1964  0 22:34 pts/0    00:00:00 su - db2i121
db2i121    62796       1  0 22:35 ?        00:00:00 /lib/systemd/systemd --user
db2i121    62797   62796  0 22:35 ?        00:00:00 (sd-pam)
db2i121    62802   62777  0 22:35 pts/0    00:00:00 -bash
root       63472    1963  0 22:38 pts/0    00:00:00 db2wdog 0 [db2i121]
db2i121    63480   63472  2 22:38 pts/0    00:00:00 db2sysc 0
root       63492   63472  0 22:38 pts/0    00:00:00 db2ckpwd 0
root       63493   63472  0 22:38 pts/0    00:00:00 db2ckpwd 0
root       63494   63472  0 22:38 pts/0    00:00:00 db2ckpwd 0
db2i121    63496   63472  0 22:38 pts/0    00:00:00 db2vend (PD Vendor Process - 1) 0
db2i121    63505   63472  0 22:38 pts/0    00:00:00 db2acd 0 ,0,0,0,1,0,0,00000000,0,0,0,0000000000000000,0000000000000000,00000000,00000000,00000000,00000000,00000000,00000000,0008,000000ff,00000000,00000000,00000000,00000000,00000000,00000000,00000000,0000000193959000,0000000000000000,0000000000000000,1,0,0,,,,,b74210,14,1e014,2,0,1,0000000000041fc0,0x240000000,0x240000000,1600000,3,2,14
db2i121    63535   62802  0 22:38 pts/0    00:00:00 ps -ef
db2i121    63536   62802  0 22:38 pts/0    00:00:00 grep --color=auto db2

```

## (3). SAMPLEデータベースの作成
### 手順 1 - (オプション) Db2 SAMPLEデータベースの作成
Db2には、SAMPLEデータベースの作成スクリプトが付いているので、これを実行してSAMPLEデータベースを作成する。作りたいデータベースが決まっている場合は必要ない。
インスタンスオーナーで`db2sampl`コマンドを実行する。

```
db2i121@DESKTOP-Q470SAE:~$ db2sampl

  Creating database "SAMPLE"...
  Connecting to database "SAMPLE"...
  Creating tables and data in schema "DB2I121"...
  Creating tables with XML columns and XML data in schema "DB2I121"...

  'db2sampl' processing complete.
```

### 手順 2 - (オプション) Db2 SAMPLEデータベースに接続する
SAMPLEデータベースに接続して、正常稼働を確認する。
データベースへの接続や、表のリスト方法など、基本的な操作は、以下の記事を参照していただきたい。
[はじめて使うDb2 - コマンドの実行、基本操作](https://qiita.com/kayokok/items/ffd37a6f40cb714412f6)
表の一覧(list tables)で、employee, departmentなどの表があれば正常。
SAMPLEデータベースの表情報は以下にある。
[SAMPLE データベース](https://www.ibm.com/docs/ja/db2/12.1?topic=samples-sample-database)

```shell-session
db2i121@DESKTOP-Q470SAE:~$ db2 connect to sample

   データベース接続情報

 データベース・サーバー = DB2/LINUXX8664 12.1.0.0
 SQL 許可 ID            = DB2I121
 ローカル・データベース別名 = SAMPLE

db2i121@DESKTOP-Q470SAE:~$ db2 list tables

表/ビュー                       スキーマ        タイプ 作成時刻
------------------------------- --------------- ----- --------------------------
ACT                             DB2I121         T     2024-11-17-12.35.32.560935
ADEFUSR                         DB2I121         S     2024-11-17-12.35.33.583574
CATALOG                         DB2I121         T     2024-11-17-12.35.35.412528
CL_SCHED                        DB2I121         T     2024-11-17-12.35.31.206409
CUSTOMER                        DB2I121         T     2024-11-17-12.35.34.956441
DEPARTMENT                      DB2I121         T     2024-11-17-12.35.31.297126
DEPT                            DB2I121         A     2024-11-17-12.35.31.465425
EMP                             DB2I121         A     2024-11-17-12.35.31.624826
EMPACT                          DB2I121         A     2024-11-17-12.35.32.560131
EMPLOYEE                        DB2I121         T     2024-11-17-12.35.31.465855
EMPMDC                          DB2I121         T     2024-11-17-12.35.33.775172
EMPPROJACT                      DB2I121         T     2024-11-17-12.35.32.483487
EMP_ACT                         DB2I121         A     2024-11-17-12.35.32.560594
EMP_PHOTO                       DB2I121         T     2024-11-17-12.35.31.625224
EMP_RESUME                      DB2I121         T     2024-11-17-12.35.31.884976
INVENTORY                       DB2I121         T     2024-11-17-12.35.34.820151
IN_TRAY                         DB2I121         T     2024-11-17-12.35.32.714148
ORG                             DB2I121         T     2024-11-17-12.35.32.775675
PRODUCT                         DB2I121         T     2024-11-17-12.35.34.604609
PRODUCTSUPPLIER                 DB2I121         T     2024-11-17-12.35.35.953782
PROJ                            DB2I121         A     2024-11-17-12.35.32.336209
PROJACT                         DB2I121         T     2024-11-17-12.35.32.336529
PROJECT                         DB2I121         T     2024-11-17-12.35.32.170820
PURCHASEORDER                   DB2I121         T     2024-11-17-12.35.35.180737
SALES                           DB2I121         T     2024-11-17-12.35.32.899051
STAFF                           DB2I121         T     2024-11-17-12.35.32.838626
STAFFG                          DB2I121         T     2024-11-17-12.35.33.411268
SUPPLIERS                       DB2I121         T     2024-11-17-12.35.35.723560
VACT                            DB2I121         V     2024-11-17-12.36.43.767612
VASTRDE1                        DB2I121         V     2024-11-17-12.36.43.786069
VASTRDE2                        DB2I121         V     2024-11-17-12.36.43.790705
VDEPMG1                         DB2I121         V     2024-11-17-12.36.43.776183
VDEPT                           DB2I121         V     2024-11-17-12.36.43.751218
VEMP                            DB2I121         V     2024-11-17-12.36.43.761534
VEMPDPT1                        DB2I121         V     2024-11-17-12.36.43.781433
VEMPLP                          DB2I121         V     2024-11-17-12.36.43.827969
VEMPPROJACT                     DB2I121         V     2024-11-17-12.36.43.772892
VFORPLA                         DB2I121         V     2024-11-17-12.36.43.809923
VHDEPT                          DB2I121         V     2024-11-17-12.36.43.758385
VPHONE                          DB2I121         V     2024-11-17-12.36.43.823582
VPROJ                           DB2I121         V     2024-11-17-12.36.43.763738
VPROJACT                        DB2I121         V     2024-11-17-12.36.43.769849
VPROJRE1                        DB2I121         V     2024-11-17-12.36.43.794948
VPSTRDE1                        DB2I121         V     2024-11-17-12.36.43.799698
VPSTRDE2                        DB2I121         V     2024-11-17-12.36.43.804357
VSTAFAC1                        DB2I121         V     2024-11-17-12.36.43.814075
VSTAFAC2                        DB2I121         V     2024-11-17-12.36.43.818408

  47 レコードが選択されました。

$
```

以上で、WSL環境の構築からDb2の稼働までが完了した。
後は、自由にテスト可能である。

注意：この記事では、Db2 12.1 Community Editionの環境を簡単に構築することを目的とし、導入時のオプションや、インスタンス構成の詳細は省略している。より詳しい情報を必要とする場合は、マニュアルを参照いただきたい。
[Db2 サーバーおよび IBM データ・サーバー・クライアント](https://www.ibm.com/docs/ja/db2/12.1?topic=installing-db2-database-servers)
[インスタンス](https://www.ibm.com/docs/ja/db2/12.1?topic=administration-instances)

以上