Qレプリケーション・チュートリアル ASNCLP版（１）～シナリオ紹介・準備～

これは、**Qレプリケーション・チュートリアル ASNCLP版**の1番目の記事です。
　 | [次の記事(2)][Qrep_nonGUI.2]→
[(1)][Qrep_nonGUI.1] | [(2)][Qrep_nonGUI.2] | [(3)][Qrep_nonGUI.3] | [(4)][Qrep_nonGUI.4] | [(5)][Qrep_nonGUI.5]

# :four_leaf_clover: はじめに :four_leaf_clover: 
IBM InfoSphere Data Replication のQレプリケーションは、IBM Db2から、Db2あるいはOracleやSQL Serverへ、大量のデータを短い待ち時間で複製することができます。

:::note info
Qレプリケーションそのものをまず知りたいという場合は、こちらの概要の資料を最初にご覧になるのが良いかと思います。
 [IBM Support :【SIL】【IM】Qレプリケーション概要](https://www.ibm.com/support/pages/node/6607083)
:::

Qレプリケーションは、データの送受信にMQのキューを利用する、LUW(Linux,Unix,Windows)環境だけでなくz/OSでも同じアーキテクチャーで動くレプリケーション製品ですが、このQレプリケーションを試しに動かしてみようとした場合、こちら↓のチュートリアルを参考にすることも多いかと思います。

:::note info
**Q レプリケーション・チュートリアル - IBM Documentation**
https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorials-q-replication-tutorial
:::

このチュートリアルではレプリケーション・センターというGUIを使った方法でレプリケーションの定義を行っています。GUIは分かりやすいですが、実際のシステムでレプリケーション環境を構築する場合、対象の表数が多い場合などGUIでいちいち定義するのは逆に面倒とも言えます。

# :four_leaf_clover: ASNCLP :four_leaf_clover: 
実はQレプリケーションは、[**ASNCLP**](https://www.ibm.com/docs/ja/idr/11.4.0?topic=replication-asnclp-command-line-program)というコマンドレベルのツールを使って定義することもできます。
ASNCLPを利用すると、多くの定義をバッチ的にまとめて行うことが可能になります。
また、レプリケーション・センターを使用するためにはWindowsやLinuxマシンが必要ですが、ASNCLPはWindows、Linux、AIX、またz/OSでも使用することができ、実際の構築ではこちらの方法が多く利用されています。 
![RC_ASNCLP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528658/61df9156-3c43-451c-029f-7411d3cc38cb.png)
そこでこの投稿では、**この[Qレプリケーション・チュートリアル][QrepTutrial]の内容をASNCLPをつかって行ったらどうなるか**ということで、その具体的内容や実行結果を含めて紹介したいと思います。
またMQ関連の定義も、チュートリアルでは１コマンドずつ実行していますが、そちらに関してもバッチ的にまとめて実行する方法をご紹介しています。

# :four_leaf_clover: シナリオについて :four_leaf_clover: 
シナリオは、[チュートリアルの概要][QrepTut_Intro]の記載内容に添って行います。
ここではLUW環境に２つのDb2データベース、そして２つのMQマネージャーを作成してレプリケーションを行うシナリオになっており、以下の３つのモジュールに分かれています

[**・モジュール 1: MQ のセットアップ**][QrepTut_Module.1]
[**・モジュール 2: Q レプリケーションのセットアップ**][QrepTut_Module.2]
[**・モジュール 3: Q レプリケーションの開始**][QrepTut_Module.2]
![構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528658/38a396f9-6a3e-af1c-4937-0a6f5d1fadcb.png)
この投稿の手順も、実行する内容は基本的にはそれぞれのモジュールで行う作業に準じていますが、チュートリアルには含まれていないことや、別の方法や順番で実行している箇所もありますことを、ご了承ください。

### 元のチュートリアルとこの投稿の内容との違い
**モジュール１:MQのセットアップ**
チュートリアルでは、キューなどのMQオブジェクトの作成を、runmqsc セッションを利用して１つずつ作成していますが、ファイルにまとめて記載して実行する方法を紹介します。

**モジュール 2: Q レプリケーションのセットアップ**
チュートリアルでは、レプリケーション・センターを使って、制御表の作成やレプリケーション定義を行っていますが、これらをASNCLPで行う方法を紹介します。

**モジュール 3: Q レプリケーションの開始**
チュートリアルでは、Q キャプチャー・プログラムやQ アプライ・プログラムの開始や状況確認を、レプリケーション・センターを使って実行していますが、コマンドによる開始、状況確認、さらに停止をする方法を紹介します。


# :four_leaf_clover: 使用している製品のレベルと環境 :four_leaf_clover: 
ここでは、Windows版のMQ V9とDb2 V11.5で実行したコマンドや結果を掲載しています。
実行する内容はLinux,AIXでも基本的には同じです。
異なる箇所がある場合は、適宜コメントを入れてあります。

# :four_leaf_clover: Qレプリケーションの導入について :four_leaf_clover: 
Qレプリケーションの製品コードは、Db2のサーバーのコードに含まれているので、Db2を導入すれば、Qレプリケーションの製品コードの導入という作業は不要です。
ただし、チュートリアルでは明確に記載されていませんが、使用されるDb2が V11.5以上の場合は、Qレプリケーションを動かすためのライセンスの登録が必須になっています。
（Db2 V11.1まではQレプリケーションのライセンスが含まれているDb2のサーバー・エディションがありますが、V11.5からは全てのエディションで、専用のライセンスが必要です。）
ライセンス・ファイル(iidr.lic)は、InfoSphere® Data Replicationのアクティベーション・キットに含まれています。

### 参考．ライセンスの登録
**■ライセンスの登録方法**
```
db2licm -a iidr.lic
```

<details><summary>ライセンス登録 結果例</summary>

```
LIC1402I  ライセンスが正常に追加されました。
```
</details>

**■ライセンス登録の確認**
```
db2licm -l
```

<details><summary>ライセンス登録の確認 結果例</summary>

```
製品名:                                          "InfoSphere Data Replication"
ライセンス・タイプ:                              "CPU"
有効期限:                                        "永続"
製品 ID:                                         "iidr"
バージョン情報:                                  "11.5"
並行コネクター・ポリシー:                        "無効"
制約ポリシー:                                    "ソフト・ストップ"
```
</details>


# :four_leaf_clover: シナリオの作業に入る前の準備 :four_leaf_clover:<br>　データベースの作成
[Q レプリケーション・チュートリアルの概要][QrepTut_Intro]に前提条件として記載されているように、データベースを２つ作成します。

Linux,AIX,Windowsいずれでも構いませんので、DB2コマンド・ウィンドが使える環境に入ってください。

**１．SAMPLEデータベースの作成(Windowsの例)**
```
db2sampl
```

:::note info
db2samplコマンドの場所や使用方法は以下を参考にしてください
**SAMPLE データベースの作成**
https://www.ibm.com/docs/ja/db2/11.5?topic=database-creating-sample
:::

<details><summary>1. SAMPLEデータベースの作成 結果例</summary>

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

  'db2sampl' processing complete.
```
</details>

**２．SAMPLEデータベース接続・切断の確認**
```
db2 connect to sample
```

<details><summary>2. SAMPLEデータベースの接続確認 結果例</summary>

```
   データベース接続情報

 データベース・サーバー = DB2/NT64 11.5.8.0
 SQL 許可 ID            = DB2ADMIN
 ローカル・データベース別名 = SAMPLE
```
</details>

```
db2 terminate
```

<details><summary>2. SAMPLEデータベースの切断確認 結果例</summary>

```
DB20000I  TERMINATE コマンドが正常に完了しました。
```
</details>

**３．SAMPLEデータベースの構成の確認**
```
db2 get db cfg for sample | more
```

<details><summary>3. SAMPLEデータベースの構成の確認 結果例</summary>

```
       データベースのデータベース構成   sample

 データベース構成リリース・レベル                        = 0x1500
 データベース・リリース・レベル                          = 0x1500

 データベース・レベルの更新ペンディング                        = NO (0x0)
 データベース・テリトリー                                = JP
 データベース・コード・ページ                            = 1208
 　データベース・コード・セット                          = UTF-8
 データベース国/地域コード                               = 81
 データベース照合順序                                    = IDENTITY
（以下省略）

```
</details>

上記で確認したように、SAMPLEデータベースはコードセットがUTF-8（Unicode）、テリトリーはJP、照合順序はIDENTITYなので、TARGETDBも同様に作成します。

**４．TARGETDBデータベースの作成**
```
db2 create database TARGETDB using codeset UTF-8 territory JP collate using identity
```

<details><summary>4. TARGETDBデータベースの作成 結果例</summary>

```
DB20000I  CREATE DATABASE コマンドが正常に完了しました。
```
</details>

**５．TARGETDBデータベースの接続・切断の確認**
```
db2 connect to targetdb
```

<details><summary>5. TARGETDBデータベースの接続確認 結果例</summary>

```
   データベース接続情報

 データベース・サーバー = DB2/NT64 11.5.8.0
 SQL 許可 ID            = DB2ADMIN
 ローカル・データベース別名 = TARGETDB
```
</details>

```
db2 terminate
```

<details><summary>5. TARGETDBデータベースの切断確認 結果例</summary>

```
DB20000I  TERMINATE コマンドが正常に完了しました。
```
</details>

**６．TARGETDBデータベースの構成の確認**
```
db2 get db cfg for targetdb | more
```

<details><summary>6. TARGETDBデータベースの構成の確認 結果例</summary>

```
       データベースのデータベース構成

 データベース構成リリース・レベル                        = 0x1500
 データベース・リリース・レベル                          = 0x1500

 データベース・レベルの更新ペンディング                        = NO (0x0)
 データベース・テリトリー                                = JP
 データベース・コード・ページ                            = 1208
 　データベース・コード・セット                          = UTF-8
 データベース国/地域コード                               = 81
 データベース照合順序                                    = IDENTITY
（以下省略）
```
</details>

以上で、チュートリアルに記載されている準備作業はOKです。

では、各モジュールの作業に入ります。

**次のステップ　:four_leaf_clover: モジュール 1 :four_leaf_clover:  MQ のセットアップ**
→　[**Qレプリケーション・チュートリアル ASNCLP版（２）**][Qrep_nonGUI.2]


[Qrep_nonGUI.1]: https://qiita.com/Seven_Marine/private/a2e93561e6b8629725ee
[Qrep_nonGUI.2]: https://qiita.com/Seven_Marine/private/31bb30f28d6ed362c785
[Qrep_nonGUI.3]: https://qiita.com/Seven_Marine/private/d86657f0c88e20129515
[Qrep_nonGUI.4]: https://qiita.com/Seven_Marine/private/95c2ffc913b5fdffc642
[Qrep_nonGUI.5]: https://qiita.com/Seven_Marine/private/de33924e47864a24bf97

[QrepTutrial]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorials-q-replication-tutorial
[QrepTut_Intro]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorial-introduction-q-replication
[QrepTut_Module.1]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorial-module-1-setting-up-mq
[QrepTut_Module.2]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorial-module-2-setting-up-q-replication
[QrepTut_Module.3]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=tutorial-module-3-starting-q-replication