Qレプリケーション・チュートリアル ASNCLP版（２）～MQのセットアップ～

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

# :four_leaf_clover: <font color="MediumAquaMarine">モジュール.1</font> :four_leaf_clover:<br>　MQ のセットアップ
**参照元:** [モジュール 1: MQ のセットアップ - IBM Documentation][QrepTut_Module.1]

Qレプリケーションに必要なMQオブジェクトの種類は以下の図の通りです。
![MQobjects.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528658/064f5acc-239c-38e1-c3c9-de6bd471dadb.png)

## :shamrock: 作成するオブジェクトの名前 :shamrock: 
基本的にはチュートリアルでのネーミングに従いますが、チュートリアルでは一部異なるリソースに同じ名前が使われている箇所があり、どちらを意味するのか分かりにくいため、そこはあえて変更しています。
またチュートリアルでは作成していないのですが、のちに必要になるリスナーも先に定義しておくことにします。

:::note
**ソース（Qキャプチャー）側**
・キューマネージャー：<font color="MediumBlue">SRC_QM</font>
・再始動キュー：<font color="MediumBlue">RESTARTQ</font>
・管理キュー：<font color="MediumBlue">ADMINQ</font>
・リモート送信キュー：<font color="MediumBlue">SENDQ</font>
・トランスミッション（伝送）キュー：<font color="MediumBlue">TGT_QM.XQ</font> :point_left: <font color="DarkOrange">TGT_QM を変更</font>
・送信チャネル：<font color="MediumBlue">SRC_QM.TO.TGT_QM</font>
・受信チャネル：<font color="MediumBlue">TGT_QM.TO.SRC_QM</font>
・リスナー：<font color="MediumBlue">SRC_QM.LSTR</font>　:point_left: <font color="DarkOrange">**追加**</font>
:::

:::note
**ターゲット（Qアプライ）側**
キューマネージャー：<font color="MediumBlue">TGT_QM</font>
受信キュー：<font color="MediumBlue">RECVQ</font>
リモート管理キュー：<font color="MediumBlue">RMT_ADMINQ</font>　:point_left: <font color="DarkOrange">ADMINQ を変更</font>
トランスミッション（伝送）キュー：<font color="MediumBlue">SRC_QM.XQ</font>　:point_left: <font color="DarkOrange">SRC_QM を変更</font>
スピル(モデル)キュー：<font color="MediumBlue">IBMQREP.SPILL.MODELQ</font>
送信チャネル：<font color="MediumBlue">TGT_QM.TO.SRC_QM</font>
受信チャネル：<font color="MediumBlue">SRC_QM.TO.TGT_QM</font>
リスナー：<font color="MediumBlue">TGT_QM.LSTR</font>　:point_left: <font color="DarkOrange">**追加**</font>
:::

![MQobjects_name.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528658/79588fde-0b23-869d-a304-ec468b0f4127.png)

## :shamrock: <font color="MediumAquaMarine">レッスン 1.1</font> :shamrock: <br>ソースおよびターゲットのキュー・マネージャーの作成
**参照元:** [レッスン 1.1: ソースおよびターゲットのキュー・マネージャーの作成 - IBM Documentation][Lesson1.1]

ソース側とターゲット側のキューマネージャーを作成します。
ここはチュートリアル同様、１つずつキューマネージャーを作成して開始します。
なお、以降ではMQの制御コマンドを実行しますので、**ご使用のユーザーIDがmqm グループのメンバーである（MQの管理者権限を持っている）必要があります。**
またAIX,Linuxの場合はPATHや、Qレプリケーションの起動にはLD_LIBRARY_PATHなどの設定も必要になります。
参考： 
[制御コマンドを使用した IBM MQ の管理 - IBM Documentation](https://www.ibm.com/docs/ja/ibm-mq/9.2?topic=administering-mq-using-control-commands)
[IBM MQ ライブラリーのロード - IBM Documentation](https://www.ibm.com/docs/ja/ibm-mq/9.2?topic=environment-loading-mq-libraries)

**１．ソース・キュー・マネージャー(SRC_QM)を作成します。**
```
crtmqm SRC_QM
```

<details><summary>1. SRC_QM作成 結果例</summary>

```    
IBM MQ キュー・マネージャーが作成されました。
ディレクトリー 'C:\ProgramData\IBM\MQ\qmgrs\SRC_QM' が作成されました。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
キュー・マネージャー 'SRC_QM' のデフォルト・オブジェクトを作成または置換しています。
デフォルト・オブジェクトの統計 : 作成 86、置換 0、失敗 0
設定を完了中です。
設定が完了しました。
```
</details>

**２．ターゲット・キュー・マネージャー(TGT_QM)を作成します。**
```
crtmqm TGT_QM
```

<details><summary>2. TGT_QM作成 結果例</summary>

```
IBM MQ キュー・マネージャーが作成されました。
ディレクトリー 'C:\ProgramData\IBM\MQ\qmgrs\TGT_QM' が作成されました。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
キュー・マネージャー 'TGT_QM' のデフォルト・オブジェクトを作成または置換しています。
デフォルト・オブジェクトの統計 : 作成 86、置換 0、失敗 0
設定を完了中です。
設定が完了しました。
```
</details>

**３．ソース・キュー・マネージャー(SRC_QM)を開始します。**
```
strmqm SRC_QM
```

<details><summary>3. SRC_QM開始 結果例</summary>

```
IBM MQ キュー・マネージャー 'SRC_QM' を開始しています。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
ログのやり直しフェーズ中に、キュー・マネージャー 'SRC_QM' で 5 ログ・レコードがアクセスされました。
キュー・マネージャー 'SRC_QM' のログのやり直しが完了しました。
キュー・マネージャー 'SRC_QM' のトランザクション・マネージャーの状態が回復されました。
IBM MQ キュー・マネージャー 'SRC_QM' が V9.0.0.0 を使用して開始されました。
```
</details>

**４．ターゲット・キュー・マネージャー(TGT_QM)を開始します。**
```
strmqm TGT_QM
```

<details><summary>4. TGT_QM開始 結果例</summary>

```
IBM MQ キュー・マネージャー 'TGT_QM' を開始しています。
キュー・マネージャーはインストール済み環境 'Installation1' に関連付けられています。
ログのやり直しフェーズ中に、キュー・マネージャー 'TGT_QM' で 5 ログ・レコードがアクセスされました。
キュー・マネージャー 'TGT_QM' のログのやり直しが完了しました。
キュー・マネージャー 'TGT_QM' のトランザクション・マネージャーの状態が回復されました。
IBM MQ キュー・マネージャー 'TGT_QM' が V9.0.0.0 を使用して開始されました。
```
</details>

## :shamrock: <font color="MediumAquaMarine">レッスン 1.2～1.4および1.5の一部</font> :shamrock: <br>　MQオブジェクトの作成
**参照元：**
[レッスン 1.2: ソース・キューの作成 - IBM Documentation][Lesson1.2]
[レッスン 1.3: ターゲット・キューの作成 - IBM Documentation][Lesson1.3]
[レッスン 1.4: MQ チャネルの作成 - IBM Documentation][Lesson1.4]
[レッスン 1.5: MQ チャネルおよびリスナーの開始 - IBM Documentation][Lesson1.5]

次は、
・レッスン 1.2: ソース・キューの作成
・レッスン 1.3: ターゲット・キューの作成
・レッスン 1.4: MQ チャネルの作成
の作業をまとめて行ってしまいます。
また
・レッスン 1.5: MQ チャネルおよびリスナーの開始
で、リスナーを起動する手順がありますが、ここではキュー・マネージャーの起動と共にリスナーも起動するように、事前に定義してしまいます。

**１．ソース側のMQオブジェクトの定義ステートメントの作成**
ソース側のSRC_QMに必要なキューとチャネル、およびリスナーの定義を行うコマンドをファイルに記載します。

:::note info
● 先頭が＊で始まる行はコメントになります。
● MQSCコマンドは１行１コマンドですが、１行が長くなる場合は ＋ 行末に記載して改行できます。
● RESTARTQに関するMAXDEPTH(1)の指定はチュートリアルでは記載されていませんが、この指定がないとQキャプチャー起動時にワーニングが出るので、敢えて追加しています。
● 送信チャネルの定義に指定する**IP_address とportについては、[レッスン 1.4: MQ チャネルの作成の参照元][Lesson1.4]を参考に決定し、以下の <font color="red">サンプルを修正**</font>してください。なお、実行例ではIP_addressは**localhost**、リスナー用のportはチュートリアルと同様**SRC_QM側は1451、TGT_QM側は1450**としています。
●**送信チャネル定義で指定するportは相手側のリスナーポートの番号**になるので、間違えないようにします。
  ・SRC_QMからTGT_QMへの送信チャネルで指定するportは、TGT_QMのリスナーポート番号の1450
  ・TGT_QMからSRC_QMへの送信チャネルで指定するportは、SRC_QMのリスナーポート番号の1451
となります。
● ここではキュー・マネージャーの起動時にリスナーも自動起動するようにCONTROL(QMGR)を指定しています。
:::

お好きなエディターで、以下の内容の```def.SRC_QM.objects.txt```を作成してください。

```def.SRC_QM.objects.txt
*** DEFINE SRC_QM OBJECTS ***

*管理キュー
DEFINE QLOCAL ('ADMINQ') DEFPSIST(YES)
*再始動キュー
DEFINE QLOCAL ('RESTARTQ') MAXDEPTH(1) DEFPSIST(YES)
*ソース・トランスミッションキュー
DEFINE QLOCAL('TGT_QM.XQ') USAGE(XMITQ) DEFPSIST(YES)
*リモート送信キュー
DEFINE QREMOTE('SENDQ') RNAME('RECVQ') +
RQMNAME('TGT_QM') XMITQ('TGT_QM.XQ') DEFPSIST(YES)
*送信チャネル
DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(SDR) TRPTYPE(TCP) +
CONNAME ('IP_address(1450)') XMITQ('TGT_QM.XQ') DISCINT(0)
*受信チャネル
DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(RCVR) TRPTYPE(TCP)

*リスナー
DEFINE LISTENER ('SRC_QM.LSTR') TRPTYPE(TCP) PORT(1451) CONTROL(QMGR)
```

:::note info
どこかのコマンドがエラーになった場合に再実行しやすいように、最初に以下のDELETEを入れておくと便利です。最初に実行した場合はそこがエラーになりますが、DEFINEでのエラー箇所を修正したり定義内容を変更し再作成したい場合など、正常終了した箇所も含めてやり直しがしやすいです。

DELETE QLOCAL ('ADMINQ')
DELETE QLOCAL ('RESTARTQ')
DELETE QLOCAL ('TGT_QM.XQ')
DELETE QREMOTE ('SENDQ')
DELETE CHANNEL('SRC_QM.TO.TGT_QM')
DELETE CHANNEL('TGT_QM.TO.SRC_QM')
DELETE LISTENER('SRC_QM.LSTR')
:::

**２．ターゲット側のMQオブジェクトの定義ステートメントの作成**
次に、ターゲット側のTGT_QMに必要なキューとチャネルの定義を行うコマンドをファイルに記載します。
お好きなエディターで、以下の内容の```def.TGT_QM.objects.txt```を作成してください。

```def.TGT_QM.objects.txt
*** DEFINE TGT_QM OBJECTS ***

*受信キュー
DEFINE QLOCAL('RECVQ') DEFPSIST(YES)
*ターゲット・トランスミッションキュー
DEFINE QLOCAL('SRC_QM.XQ') USAGE(XMITQ) DEFPSIST(YES)
*リモート管理キュー
DEFINE QREMOTE('RMT_ADMINQ') RNAME('ADMINQ') +
RQMNAME('SRC_QM') XMITQ('SRC_QM.XQ') DEFPSIST(YES)
*スピル（モデル）キュー
DEFINE QMODEL('IBMQREP.SPILL.MODELQ') +
MSGDLVSQ(FIFO) DEFTYPE(PERMDYN)
*送信チャネル
DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(SDR) TRPTYPE(TCP) +
CONNAME('IP_address(1451)') XMITQ('SRC_QM.XQ') DISCINT(0)
*受信チャネル
DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(RCVR) TRPTYPE(TCP)

*リスナー
DEFINE LISTENER ('TGT_QM.LSTR') TRPTYPE(TCP) PORT(1450) CONTROL(QMGR)
```

:::note info
こちらも最初にDELETEを入れておく場合は、以下を記載してください。

DELETE QLOCAL ('RECVQ')
DELETE QLOCAL ('SRC_QM.XQ')
DELETE QREMOTE ('RMT_ADMINQ')
DELETE QMODEL ('IBMQREP.SPILL.MODELQ')
DELETE CHANNEL('TGT_QM.TO.SRC_QM')
DELETE CHANNEL('SRC_QM.TO.TGT_QM')
DELETE LISTENER('TGT_QM.LSTR')
:::

**３．ソース(SRC_QM)側MQオブジェクトの作成**
前のステップでSRC_QMとTGT_QMを開始させていますが、もし停止している場合は再度起動してください。

:::note info
キュー・マネージャーの状態はdspmqコマンドで確認できます。
dspmq
QMNAME(SRC_QM)                                            STATUS(実行中)
QMNAME(TGT_QM)                                            STATUS(実行中)
:::

:::note info
ファイルに記述したMQSCコマンドをまとめて実行する場合は、以下のように <strong>"<"</strong> のリダイレクトを利用します。
:::


```
runmqsc SRC_QM < def.SRC_QM.objects.txt
```
DELETEが入っている場合1度目はエラーになるので、DELETEも含め正常終了することを確認するため、2回実行します。

<details><summary>3. SRC_QM MQオブジェクトの作成 結例（最初にDELETE文を入れた、2回目の実行結果）</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー SRC_QM に対して MQSC を始動中です。

       : *** DEFINE SRC_QM OBJECTS ***
       :
     1 : DELETE QLOCAL ('ADMINQ')
AMQ8007: IBM MQ キューが削除されました。
     2 : DELETE QLOCAL ('RESTARTQ')
AMQ8007: IBM MQ キューが削除されました。
     3 : DELETE QLOCAL ('TGT_QM.XQ')
AMQ8007: IBM MQ キューが削除されました。
     4 : DELETE QREMOTE ('SENDQ')
AMQ8007: IBM MQ キューが削除されました。
     5 : DELETE CHANNEL('SRC_QM.TO.TGT_QM')
AMQ8015: IBM MQ チャネルが削除されました。
     6 : DELETE CHANNEL('TGT_QM.TO.SRC_QM')
AMQ8015: IBM MQ チャネルが削除されました。
     7 : DELETE LISTENER('SRC_QM.LSTR')
AMQ8628: IBM MQ リスナー・オブジェクトが削除されました。
       :
       :
       : *管理キュー
     8 : DEFINE QLOCAL ('ADMINQ') DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *再始動キュー
     9 : DEFINE QLOCAL ('RESTARTQ') MAXDEPTH(1) DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *ソース・トランスミッションキュー
    10 : DEFINE QLOCAL('TGT_QM.XQ') USAGE(XMITQ) DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *リモート送信キュー
    11 : DEFINE QREMOTE('SENDQ') RNAME('RECVQ') RQMNAME('TGT_QM') XMITQ('TGT_QM.XQ') DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *送信チャネル
    12 : DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(SDR) TRPTYPE(TCP) CONNAME ('localhost(1450)') XMITQ('TGT_QM.XQ') DISCINT(0)
AMQ8014: IBM MQ チャネルが作成されました。
       : *受信チャネル
    13 : DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(RCVR) TRPTYPE(TCP)
AMQ8014: IBM MQ チャネルが作成されました。
       :
       : *リスナー
    14 : DEFINE LISTENER ('SRC_QM.LSTR') TRPTYPE(TCP) PORT(1451) CONTROL(QMGR)
AMQ8626: IBM MQ リスナーが作成されました。
14 MQSC コマンドが読み取られました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

DELETE文が入っている場合、1回目のDELETEでのエラーは無視して良いです。
その他の箇所にエラーがある場合は原因を見つけて修正してください。
「構文エラーがあるコマンドはありません。」
「有効な MQSC コマンドはすべて処理されました。」が出ればOKです。

**４. ターゲット(TGT_QM側)オブジェクトの作成**
```
runmqsc TGT_QM < def.TGT_QM.objects.txt
```

<details><summary>4. TGT_QM MQオブジェクトの作成 結例（最初にDELETE文を入れた、2回目の実行結果）</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー TGT_QM に対して MQSC を始動中です。

       : *** DEFINE TGT_QM OBJECTS ***
       :
     1 : DELETE QLOCAL ('RECVQ')
AMQ8007: IBM MQ キューが削除されました。
     2 : DELETE QLOCAL ('SRC_QM.XQ')
AMQ8007: IBM MQ キューが削除されました。
     3 : DELETE QREMOTE ('RMT_ADMINQ')
AMQ8007: IBM MQ キューが削除されました。
     4 : DELETE QMODEL('IBMQREP.SPILL.MODELQ')
AMQ8007: IBM MQ キューが削除されました。
     5 : DELETE CHANNEL('TGT_QM.TO.SRC_QM')
AMQ8015: IBM MQ チャネルが削除されました。
     6 : DELETE CHANNEL('SRC_QM.TO.TGT_QM')
AMQ8015: IBM MQ チャネルが削除されました。
     7 : DELETE LISTENER('TGT_QM.LSTR')
AMQ8628: IBM MQ リスナー・オブジェクトが削除されました。
       :
       : *受信キュー
     8 : DEFINE QLOCAL('RECVQ') DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *ターゲット・トランスミッションキュー
     9 : DEFINE QLOCAL('SRC_QM.XQ') USAGE(XMITQ) DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *リモート管理キュー
    10 : DEFINE QREMOTE('RMT_ADMINQ') RNAME('ADMINQ') RQMNAME('SRC_QM') XMITQ('SRC_QM.XQ') DEFPSIST(YES)
AMQ8006: IBM MQ キューが作成されました。
       : *スピル（モデル）キュー
    11 : DEFINE QMODEL('IBMQREP.SPILL.MODELQ') MSGDLVSQ(FIFO) DEFTYPE(PERMDYN)
AMQ8006: IBM MQ キューが作成されました。
       : *送信チャネル
    12 : DEFINE CHL ('TGT_QM.TO.SRC_QM') CHLTYPE(SDR) TRPTYPE(TCP) CONNAME('localhost(1451)') XMITQ('SRC_QM.XQ') DISCINT(0)
AMQ8014: IBM MQ チャネルが作成されました。
       : *受信チャネル
    13 : DEFINE CHL ('SRC_QM.TO.TGT_QM') CHLTYPE(RCVR) TRPTYPE(TCP)
AMQ8014: IBM MQ チャネルが作成されました。
       :
       : *リスナー
    14 : DEFINE LISTENER ('TGT_QM.LSTR') TRPTYPE(TCP) PORT(1450) CONTROL(QMGR)
AMQ8626: IBM MQ リスナーが作成されました。
14 MQSC コマンドが読み取られました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

以上で必要なMQオブジェクトの作成ができたので、次はリスナーとチャネルを起動します。

## :shamrock: <font color="MediumAquaMarine">レッスン 1.5</font> :shamrock: <br>　MQ チャネルおよびリスナーの開始
**参照元:** [レッスン 1.5: MQ チャネルおよびリスナーの開始 - IBM Documentation][Lesson1.5] 

作成したチャネルが起動することを確認するため、それぞれのキュー・マネージャーで、リスナーを起動します。


**１.SRC_QMのリスナーの開始**
すでにSRC_QM用のリスナー（SRC_QM.LSTR）を定義してあるので、それを開始します。
定義したリスナーはMQSCコマンドのstart listenerで起動することができますが、キュー・マネージャーの起動で自動起動することも確認したいため、ここではMQマネージャーを再起動する方法で行います。

**・SRC_QM キューマネージャーの再起動**
```
endmqm SRC_QM
strmqm SRC_QM
```

**２.SRC_QMのリスナーの状態確認**
リスナーが開始したか、確認します。

:::note
MQSCの対話セッションに入らないでコマンドを実行するには、以下のように**echo**を利用し、
**|　の後に、runmqsc とMQSCコマンドを実行したいキュー・マネージャーを指定**します。
:::

```
echo display lsstatus(SRC_QM.LSTR) | runmqsc SRC_QM
```

:::note warn
Linux、AIXの場合は、echo の後のコマンド部分は**ダブルクォーテーション（またはシングルクォーテーション）で囲って**ください。
例）echo **"display lsstatus(SRC_QM.LSTR)"** | runmqsc SRC_QM
:::

<details><summary>2. SRC_QMのリスナー状態確認 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー SRC_QM に対して MQSC を始動中です。

     1 : display lsstatus(SRC_QM.LSTR)
AMQ8631: リスナー状況の詳細を表示します。
   LISTENER(SRC_QM.LSTR)                   STATUS(RUNNING)
   PID(39244)                              STARTDA(2023-02-09)
   STARTTI(12.12.03)                       DESCR( )
   TRPTYPE(TCP)                            CONTROL(QMGR)
   IPADDR(*)                               PORT(1451)
   BACKLOG(100)
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
````
</details>

STATUSが**RUNNING**になっていればOKです。

**３.TGT_QMのリスナーの開始**
TGT_QM用のリスナー（TGT_QM.LSTR）も同様にキューマネージャーの再起動で開始し、状態を確認します。

**TGT_QM キューマネージャーの再起動**
```
endmqm TGT_QM
strmqm TGT_QM
```

**４.TGT_QMのリスナーの状態確認**
リスナーが開始したか、確認します。
```
echo display lsstatus(TGT_QM.LSTR) | runmqsc TGT_QM
```

<details><summary>4. TGT_QMのリスナー状態確認 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー TGT_QM に対して MQSC を始動中です。

     1 : display lsstatus(TGT_QM.LSTR)
AMQ8631: リスナー状況の詳細を表示します。
   LISTENER(TGT_QM.LSTR)                   STATUS(RUNNING)
   PID(39560)                              STARTDA(2023-02-09)
   STARTTI(12.19.41)                       DESCR( )
   TRPTYPE(TCP)                            CONTROL(QMGR)
   IPADDR(*)                               PORT(1450)
   BACKLOG(100)
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

STATUSが**RUNNING**になっていればOKです。

:::note
MQSCコマンドでリスナーを起動する場合は、以下のようにします。(SRC_QMのリスナーの場合）

```
echo start listener(SRC_QM.LSTR) | runmqsc SRC_QM
```

<details><summary>SRC_QMのリスナー開始 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー SRC_QM に対して MQSC を始動中です。

     1 : start listener(SRC_QM.LSTR)
AMQ8021: IBM MQ リスナーの開始要求が受け入れられました。
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>
:::

:::note warn
事前にリスナーを定義せず、チュートリアルにあるように、runmqlsrコマンドでリスナーを起動する場合は、作業ウィンドウを維持するため、リスナー用に別のウィンドウを起動して行ってください。
Linux,AIXの場合はコマンドの最後にスペースおよびアンパーサンド (&) を追加してバックグラウンドで実行する方法でも良いです。
:::

:::note warn
リスナー起動中はリスナーの削除はできません。
リスナーのDELETE文を記載した```def.SRC_QM.objects.txt```や```def.TGT_QM.objects.txt```を再実行する場合は、先に以下のコマンドでリスナーを停止してください。
**リスナーの停止方法**
　echo stop listener(SRC_QM.LSTR) | runmqsc SRC_QM
または
　echo stop listener(TGT_QM.LSTR) | runmqsc TGT_QM
:::

**５.SRC_QMの送信チャネルの開始**
SRC_QMの送信チャネル（SRC_QM.TO.TGT_QM）を開始します。
```
echo start channel(SRC_QM.TO.TGT_QM) | runmqsc SRC_QM
```

<details><summary>5. SRC_QMの送信チャネルの開始 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー SRC_QM に対して MQSC を始動中です。

     1 : start channel(SRC_QM.TO.TGT_QM)
AMQ8018: IBM MQ チャネルの開始が受け入れられました。
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

**６.SRC_QMの送信チャネルの状況確認**
送信チャネルが正常に開始されたか、MQSCコマンドのdisplay chstatusで確認します。


SRC_QMの送信チャネル（SRC_QM.TO.TGT_QM）の状況確認
```
echo display chstatus(SRC_QM.TO.TGT_QM) | runmqsc SRC_QM
```

<details><summary>6. SRC_QMの送信チャネルの状態確認 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー SRC_QM に対して MQSC を始動中です。

     1 : display chstatus(SRC_QM.TO.TGT_QM)
AMQ8417: チャネル状況の内容を表示します。
   CHANNEL(SRC_QM.TO.TGT_QM)               CHLTYPE(SDR)
   CONNAME(127.0.0.1(1450))                CURRENT
   RQMNAME(TGT_QM)                         STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(TGT_QM.XQ)
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

STATUSが**RUNNING**になっていればOKです。

**７.TGT_QMの送信チャネルの開始**
TGT_QMの送信チャネル（TGT_QM.TO.SRC_QM）を開始します。
```
echo start channel(TGT_QM.TO.SRC_QM) | runmqsc TGT_QM
```

<details><summary>7. TGT_QMの送信チャネルの開始 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー TGT_QM に対して MQSC を始動中です。

     1 : start channel(TGT_QM.TO.SRC_QM)
AMQ8018: IBM MQ チャネルの開始が受け入れられました。
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

**８.TGT_QMの送信チャネルの状況確認**
TGT_QMの送信チャネル（TGT_QM.TO.SRC_QM）の状況確認
```
echo display chstatus(TGT_QM.TO.SRC_QM) | runmqsc TGT_QM
```

<details><summary>8. TGT_QMの送信チャネルの状態確認 結果例</summary>

```
5724-H72 (C) Copyright IBM Corp. 1994, 2016.
キュー・マネージャー TGT_QM に対して MQSC を始動中です。

     1 : display chstatus(TGT_QM.TO.SRC_QM)
AMQ8417: チャネル状況の内容を表示します。
   CHANNEL(TGT_QM.TO.SRC_QM)               CHLTYPE(SDR)
   CONNAME(127.0.0.1(1451))                CURRENT
   RQMNAME(SRC_QM)                         STATUS(RUNNING)
   SUBSTATE(MQGET)                         XMITQ(SRC_QM.XQ)
MQSC コマンドを 1 つ読み取りました。
構文エラーがあるコマンドはありません。
有効な MQSC コマンドはすべて処理されました。
```
</details>

以上で　モジュール 1: MQ のセットアップ　の作業は終了です。

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


[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-replicationting

[Lesson1.1]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=mq-lesson-11-creating-source-target-queue-managers
[Lesson1.2]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=mq-lesson-12-creating-source-queues
[Lesson1.3]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=mq-lesson-13-creating-target-queues
[Lesson1.4]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=mq-lesson-14-creating-channels
[Lesson1.5]: https://www.ibm.com/docs/ja/idr/11.4.0?topic=mq-lesson-15-starting-channels-listeners