ASNCLPコマンドを使ってQレプリケーション制御表を作成する

Qレプリケーションは、ソース側で動くQキャプチャーとターゲット側で動くQアプライがあります。それぞれ制御表を持ち、レプリケーション定義情報が格納されています。


制御表はASNCLPコマンドや、レプリケーションセンター(GUI)を使って作成することができます。
※Db2/zの場合には、制御表作成のサンプルJCLが提供されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2955196/16a6dfcc-7181-01ed-1fc8-b2d7aa1fbeab.png)


# 1. 準備
### 1-1. DBをカタログする 
asnclpコマンドの実行環境から、ソースDBとターゲットDBの両方にアクセスできる必要があるためカタログします。
```
--ソースDBへのカタログ（例）
db2 catalog tcpip node snode remote 192.168.1.1 server 50000
db2 catalog db SRCDB at node snode

--ターゲットDBへのカタログ（例）
db2 catalog tcpip node tnode remote 192.168.1.2 server 50000
db2 catalog db TGTDB at node tnode
```
### 1-2. Qマネージャー、およびMQオブジェクトを作成
ASNCLPコマンドで制御表を作成したり、定義を作成する際に、QマネージャーやMQオブジェクト名を指定します。
ただし、ASNCLPコマンド実行時に存在チェックなどはしないため、必ずしも定義前に作成しておく必要はありませんが、どういう構成、名前にするのかは決めておく必要があります。

# 2. ASNCLPスクリプトを作成する

[ASNCLPコマンド](https://www.ibm.com/docs/ja/idr/11.4.0?topic=program-asnclp-commands-q-replication)は、コマンドプロンプトから１つ１つ実行する事もできますが、スクリプト・ファイルに保存してバッチ実行も可能です。スクリプトは定義のバックアップにもなるため通常はバッチ実行をします。
コメントアウトは#です。
```
ASNCLP SESSION SET TO Q REPLICATION;

SET RUN SCRIPT NOW STOP ON SQL ERROR ON;
# 生成されたSQLを任意のファイルに保管
SET OUTPUT CAPTURE SCRIPT "CrtQCap.sql";
SET OUTPUT TARGET SCRIPT "CrtQApp.sql";

# ソースDB、ターゲットDBへ接続するユーザー情報
SET SERVER CAPTURE TO DB SRCDB ID db2inst1 PASSWORD "xxxxxxx";
SET SERVER TARGET TO DB TGTDB ID db2inst1 PASSWORD "xxxxxxx";

# それぞれの制御表のスキーマ名を指定 (デフォルトはASN)
SET CAPTURE SCHEMA SOURCE QREP;
SET APPLY SCHEMA QREP;

#　ソースシステム、ターゲットシステムで稼働するQマネージャーを指定
SET QMANAGER TQMGR FOR APPLY SCHEMA;
SET QMANAGER SQMGR FOR CAPTURE SCHEMA;

#　制御表をDROPする場合は # を外す
#DROP CONTROL TABLES ON APPLY SERVER;
#DROP CONTROL TABLES ON CAPTURE SERVER;

# Qアプライ制御表の作成
CREATE CONTROL TABLES FOR APPLY SERVER;

# Qキャプチャー制御表の作成
CREATE CONTROL TABLES FOR CAPTURE SERVER
 USING RESTARTQ "QREP.RESTARTQ" ADMINQ "QREP.ADMINQ" ;
```

# 3. ASNCLPスクリプトを実行して制御表を作成する
下記のコマンドで実行します。
　asnclp -f ファイル名　

```
==> asnclp -f CreateControl.in

====
CMD: ASNCLP SESSION SET TO Q REPLICATION;
====

====
CMD: SET RUN SCRIPT NOW STOP ON SQL ERROR ON;
====

～　省略 ～

ASN1956I  ASNCLP : Generating SQL script files for action: "CREATE CONTROL TABLES".

ASN1955I  ASNCLP : Using the following files: "CrtQCap.sql" for the Capture SQL script, "replctl.sql" for the control SQL script, "CrtQApp.sql" for the target SQL script, and "qreplmsg.log" for the log file.

--- ASNCLP Version 11.5 Build date 2022-09-20 20:05:06

<ClpInfo2Log:: Preparing to run script.>

<ClpInfo2Log:: Now running SQL...>
ASN1514I  The replication action ended at "2022年12月17日 (土曜日) 2時32分33秒 JST" with "1" successes, "0" errors, and "0" warnings.

<ClpInfo2Log:: The SQL command completed successfully.>

ASN1953I  ASNCLP : Command completed.

```
実行ディレクトリには、`CrtQCap.sql`と`CrtQApp.sql`が生成されます。
上記の例では、スクリプトを生成し即時実行しています。
```
SET RUN SCRIPT LATER;
# SET RUN SCRIPT NOW STOP ON SQL ERROR ON;
```
とすることで、スクリプトのみ生成し実行しない事も可能です。

# 4. 作成された制御表を確認する
作成される制御表は、バージョンや環境 (LUW、z/OS、Native Oracle QApply)によって違います。
[Q キャプチャー・サーバーのコントロール表](https://www.ibm.com/docs/ja/idr/11.4.0?topic=publishing-control-tables-q-capture-server)
[Q アプライ・サーバーのコントロール表](https://www.ibm.com/docs/ja/idr/11.4.0?topic=publishing-control-tables-q-apply-server)
```
==> db2 connect to srcdb
   Database Connection Information

 Database server        = DB2/AIX64 11.5.8.0
 SQL authorization ID   = DB2INST1
 Local database alias   = SRCDB

==> db2 list tables for schema QREP

Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------
IBMQREP_ADMINMSG                QREP            T     2022-12-17-04.49.09.073646
IBMQREP_CAPCMD                  QREP            T     2022-12-17-04.49.13.133822
IBMQREP_CAPCMDOUT               QREP            T     2022-12-17-04.49.14.309921
IBMQREP_CAPENQ                  QREP            T     2022-12-17-04.49.08.476645
IBMQREP_CAPENVINFO              QREP            T     2022-12-17-04.49.12.491702
IBMQREP_CAPMON                  QREP            T     2022-12-17-04.49.06.204295
IBMQREP_CAPPARMS                QREP            T     2022-12-17-04.48.58.310026
IBMQREP_CAPQMON                 QREP            T     2022-12-17-04.49.07.399963
IBMQREP_CAPTRACE                QREP            T     2022-12-17-04.49.05.125617
IBMQREP_COLVERSION              QREP            T     2022-12-17-04.49.24.638999
IBMQREP_EXCLSCHEMA              QREP            T     2022-12-17-04.49.22.652205
IBMQREP_FILE_SENDERS            QREP            T     2022-12-17-04.49.15.551253
IBMQREP_FILES_SENT              QREP            T     2022-12-17-04.49.16.601550
IBMQREP_FILESEND_MON            QREP            T     2022-12-17-04.49.17.844066
IBMQREP_IGNTRAN                 QREP            T     2022-12-17-04.49.10.166633
IBMQREP_IGNTRANTRC              QREP            T     2022-12-17-04.49.11.403926
IBMQREP_PART_HIST               QREP            T     2022-12-17-04.49.18.925095
IBMQREP_SCHEMASUBS              QREP            T     2022-12-17-04.49.21.438628
IBMQREP_SENDQUEUES              QREP            T     2022-12-17-04.48.59.566870
IBMQREP_SIGNAL                  QREP            T     2022-12-17-04.49.03.960311
IBMQREP_SRC_COLS                QREP            T     2022-12-17-04.49.02.090490
IBMQREP_SRCH_COND               QREP            T     2022-12-17-04.49.03.340000
IBMQREP_SUBS                    QREP            T     2022-12-17-04.49.00.893647
IBMQREP_SUBS_PROF               QREP            T     2022-12-17-04.49.20.279249
IBMQREP_TABVERSION              QREP            T     2022-12-17-04.49.23.159657

  25 record(s) selected.
```

```
==> db2 connect to tgtdb

   Database Connection Information

 Database server        = DB2/AIX64 11.5.8.0
 SQL authorization ID   = DB2INST1
 Local database alias   = TGTDB

==> db2 list tables for schema QREP
Table/View                      Schema          Type  Creation time
------------------------------- --------------- ----- --------------------------
IBMQREP_APPENVINFO              QREP            T     2022-12-17-04.48.42.095393
IBMQREP_APPEVENTS               QREP            T     2022-12-17-04.48.46.960457
IBMQREP_APPEVTDEFS              QREP            T     2022-12-17-04.48.45.841477
IBMQREP_APPLYCMD                QREP            T     2022-12-17-04.48.49.120711
IBMQREP_APPLYCMDOUT             QREP            T     2022-12-17-04.48.27.036200
IBMQREP_APPLYENQ                QREP            T     2022-12-17-04.48.41.507032
IBMQREP_APPLYMON                QREP            T     2022-12-17-04.48.38.383603
IBMQREP_APPLYPARMS              QREP            T     2022-12-17-04.48.28.953270
IBMQREP_APPLYTRACE              QREP            T     2022-12-17-04.48.37.222988
IBMQREP_DONEMSG                 QREP            T     2022-12-17-04.48.55.276237
IBMQREP_EXCEPTIONS              QREP            T     2022-12-17-04.48.35.180977
IBMQREP_FILE_RECEIVERS          QREP            T     2022-12-17-04.48.50.273030
IBMQREP_FILERECV_MON            QREP            T     2022-12-17-04.48.52.582282
IBMQREP_FILES_RECEIVED          QREP            T     2022-12-17-04.48.51.401040
IBMQREP_MCGMON                  QREP            T     2022-12-17-04.48.48.016785
IBMQREP_RECVQUEUES              QREP            T     2022-12-17-04.48.30.161648
IBMQREP_ROLLBACK_R              QREP            T     2022-12-17-04.48.43.740777
IBMQREP_ROLLBACK_T              QREP            T     2022-12-17-04.48.42.594257
IBMQREP_SAVERI                  QREP            T     2022-12-17-04.48.41.016161
IBMQREP_SPILLEDROW              QREP            T     2022-12-17-04.48.39.815154
IBMQREP_SPILLQS                 QREP            T     2022-12-17-04.48.34.030135
IBMQREP_TAB_PROF                QREP            T     2022-12-17-04.48.53.716090
IBMQREP_TARGETS                 QREP            T     2022-12-17-04.48.31.506124
IBMQREP_TRG_COLS                QREP            T     2022-12-17-04.48.32.872472

  24 record(s) selected.
```