はじめに
ここでは、z/OS上のVSAMをRHEL上のDb2にレプリケーションするための構成を行っていきます。
関連記事
VSAM on z/OS のレプリケーション - (1) 環境構築(to Db2)
VSAM on z/OS のレプリケーション - (2) レプリケーション構成(to Db2)
VSAM on z/OS のレプリケーション - (3) Kafka連携
VSAM on z/OS のレプリケーション - (4) VSAMファイルの追加(Kafka連携) / レプリケーションのテスト
全体像
レプリケーションのための設定として実施する主な作業を以下の吹き出しで示しました。
(参考) VSAM Remote Source IVPによる確認
一応VSAM Remote SourceのIVPが用意されているのでそちらを動かしてみた時のログです。
VSAM Remote Source IVP
Verifying the VSAM Remote Source installation
上のガイドに従って、VSAM Remote Sourceの構成をIVPで確認しておきます。
コンテナに接続してClassicInstallAndMaintenanceMenu.shスクリプトを実行します。
[root@test12 ~]# podman exec -it --workdir /classic/usr/scripts ClassicCDCVSAM bash
[cecuser@e0289065f5ba scripts]$ ./ClassicInstallAndMaintenanceMenu.sh
*---------------------------------------------------------------------*
*
* IBM Data Replication VSAM for z/OS Remote Source, V11.4
* PID: 5737-C30
*
* Menu options:
* 1. Set the job card
* 2. Set the z/OS High Level Qualifier (HLQ)
* 3. Set the z/OS Unix System Services (USS) path
* 4. Install or replace z/OS libraries with this container's maintenance level
* 5. Start a new z/OS log reader
* 6. Stop the existing z/OS log reader
* 7. Get diagnostic log for the existing z/OS log reader
* 8. Configure a z/OS VSAM cluster for the container environment
* 9. Configure VSAM IVP file
* 10. Update container scripts from the current image
* 11. Generate diagnostics tar
* 99. Exit this script
*
*---------------------------------------------------------------------*
Select an option:
Option 9を選択
*---------------------------------------------------------------------*
Select an option: 9
*---------------------------------------------------------------------*
*
* Classic CDC for Remote Log Reader Installation and Maintenance
* Configure VSAM IVP file
*
*---------------------------------------------------------------------*
LINE NO. STATEMENT
1 CONNECT TO SERVER "RHELSAMP" "TCP/0.0.0.0/9087,IBM-037/IBM-850";
Start End Processing
Line # Line # Status Statement Object
1 1 0 CONNECT TO SERVER RHELSAMP
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
LINE NO. STATEMENT
2
3 DROP TABLE "VSAMDEMO"."EMPLOYEE";
2 3 -204 DROP TABLE "VSAMDEMO"."EMPLOYEE"
CACM002I SQLCODE = -204, ERROR: SQL-Error-Message. -204. The EMPLOYEE is an und
CACM002I SQLCODE = -204, ERROR: SQL-Error-Message. -204. The EMPLOYEE is an und
efined name.
efined name.
LINE NO. STATEMENT
4
5 CREATE TABLE "VSAMDEMO"."EMPLOYEE" DBTYPE VSAM
6 DS "CEC.V114.REMOTE.EMPLOYEE.FILE0001"
7 (
8 "ENAME" SOURCE DEFINITION DATAMAP OFFSET 0 LENGTH 20 DATATYP
E C USE AS CHAR(20),
9 "PHONE" SOURCE DEFINITION DATAMAP OFFSET 20 LENGTH 4 DATATYP
E UF USE AS INTEGER,
10 "MAILID" SOURCE DEFINITION DATAMAP OFFSET 25 LENGTH 6 DATATYP
E C USE AS CHAR(6),
11 "SALARY" SOURCE DEFINITION DATAMAP OFFSET 31 LENGTH 4 DATATYP
E P USE AS DECIMAL(7 , 2),
12 "JOBID" SOURCE DEFINITION DATAMAP OFFSET 35 LENGTH 4 DATATYPE
F USE AS REAL,
13 "EMPID" SOURCE DEFINITION DATAMAP OFFSET 39 LENGTH 4 DATATYPE
UF USE AS INTEGER,
14 "DEPTID" SOURCE DEFINITION DATAMAP OFFSET 43 LENGTH 2 DATATYP
E UH USE AS SMALLINT,
15 "DEPARTMENT" SOURCE DEFINITION DATAMAP OFFSET 47 LENGTH 15 DA
TATYPE C USE AS CHAR(15),
16 PRIMARY KEY ("ENAME")
17 );
4 17 0 CREATE TABLE "VSAMDEMO"."EMPLOYEE"
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
LINE NO. STATEMENT
18
19 ALTER TABLE "VSAMDEMO"."EMPLOYEE" DATA CAPTURE CHANGES;
18 19 0 ALTER TABLE "VSAMDEMO"."EMPLOYEE"
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
CACM001I SQLCODE = 0, INFO: Statement execution was successful.
**********************************************
cacmeta.sh /classic/usr/output/IVPEmployee1.grammar failed...
Do you want to ignore the above error and continue? (Y or N)
DROP TABLEのエラーは元々存在していないので無視。
Yで次に進みます。
Do you want to ignore the above error and continue? (Y or N)Y
To run chcclp for VSAM IVP configuration, Source and Target details are required including username and password.
Note: These details including username and password are saved in /classic/usr/output/chcclp_IVP_Input.txt file.
If you do not wish to provide those details to this script then enter N to discontinue and follow the below steps to configure VSAM IVP file:
1) Update the /classic/usr/output/chcclp_IVP_Input.txt for the source and target details.
2) Ensure you have a target table. Sample target table script for DB2 can be found at /classic/usr/output/EMPLOYEE.sql
3) To complete the VSAM IVP configuration please run the below command as a non root user:
chcclp.sh -f /classic/usr/output/chcclp_IVP_Input.txt -ap 10101
Do you want to continue? (Y or N)
Yで次に進みます。
ここでは以下の赤字の項目を入力
Source:
- Source Datastore Name: VSMSRC01 (<=勝手に設定されて変更不可)
- Source Hostname: test12 (<=勝手に設定されて変更不可)
- Enter Source Port: 9087 (Linux上のコンテナがListenしているポート?)
- Enter Source Username: cecuser (コンテナ実行ユーザー)
- Enter Source Password: password (パスワード?)
Target:
- Target Datastore Name: TARGET01 (<=勝手に設定されて変更不可)
- Enter Target Hostname: xxxx (Target EngineのIPアドレス / ホスト名だとNGだということが後で判明!)
- Enter Target Port: 10901 (Target EngineがListenしているポート)
- Enter Target Username: cdcdb2 (Target Engineのユーザー)
- Enter Target Password: password (Target Engineのパスワード)
Do you want to continue? (Y or N)Y
******************************
Enter Source Details
******************************
Source Datastore Name: VSMSRC01
Source Hostname: test12
Enter Source Port: 9087
Enter Source Username: cecuser
Enter Source Password:
******************************
Enter Target Details
******************************
Target Datastore Name: TARGET01
Enter Target Hostname: test12
Enter Target Port: 10901
Enter Target Username: cdcdb2
Enter Target Password:
Note: Ensure you have a target table. Sample target table script for DB2 can be found at /classic/usr/output/EMPLOYEE.sql
To complete the VSAM IVP configuration please run the below command as a non root user.
chcclp.sh -f /classic/usr/output/chcclp_IVP_Input.txt -ap 10101
上のセットアップ用スクリプトを抜けます。
別のWindowでホストOSの以下のディレクトリを確認します。(コンテナ上の/classic/usr/output/に相当)
/home/cecuser/classic/docker/volumes/classiccdcoutput/chcclp_IVP_Input.txtに、IVP用のセットアップをするためのパラメーターが書き出されます。
CHCCLP SESSION SET TO CDC;
connect datastore name VSMSRC01 hostname test12 port 9087 username cecuser password xxxxx context source;
connect datastore name TARGET01 hostname test12 port 10901 username cdcdb2 password xxxxx context target;
add subscription name VSAMREM1;
list databases name VSMSRC01;
add replication table name VSMSRC01 database VSAM schema VSAMDEMO table EMPLOYEE;
add table mapping sourceDatabase VSAM sourceSchema VSAMDEMO sourceTable EMPLOYEE targetSchema VSAMDEMO targetTable EMPLOYEE;
list subscriptions;
list replication tables;
list table mappings name VSAMREM1;
disconnect datastore name VSMSRC01;
disconnect datastore name TARGET01;
どうやらCHCCLPというコマンドをバッチモードで実行するために、コマンドのリストとして生成しているもののようです。
参考: Running the CHCCLP commands in batch mode
ソース用に以下のSQLも生成されています。これは恐らく先のスクリプトのOption 9選択時に適用されたものだと思われます。
CONNECT TO SERVER "RHELSAMP" "TCP/0.0.0.0/9087,IBM-037/IBM-850";
DROP TABLE "VSAMDEMO"."EMPLOYEE";
CREATE TABLE "VSAMDEMO"."EMPLOYEE" DBTYPE VSAM
DS "CEC.V114.REMOTE.EMPLOYEE.FILE0001"
(
"ENAME" SOURCE DEFINITION DATAMAP OFFSET 0 LENGTH 20 DATATYPE C USE AS CHAR(20),
"PHONE" SOURCE DEFINITION DATAMAP OFFSET 20 LENGTH 4 DATATYPE UF USE AS INTEGER,
"MAILID" SOURCE DEFINITION DATAMAP OFFSET 25 LENGTH 6 DATATYPE C USE AS CHAR(6),
"SALARY" SOURCE DEFINITION DATAMAP OFFSET 31 LENGTH 4 DATATYPE P USE AS DECIMAL(7 , 2),
"JOBID" SOURCE DEFINITION DATAMAP OFFSET 35 LENGTH 4 DATATYPE F USE AS REAL,
"EMPID" SOURCE DEFINITION DATAMAP OFFSET 39 LENGTH 4 DATATYPE UF USE AS INTEGER,
"DEPTID" SOURCE DEFINITION DATAMAP OFFSET 43 LENGTH 2 DATATYPE UH USE AS SMALLINT,
"DEPARTMENT" SOURCE DEFINITION DATAMAP OFFSET 47 LENGTH 15 DATATYPE C USE AS CHAR(15),
PRIMARY KEY ("ENAME")
);
ALTER TABLE "VSAMDEMO"."EMPLOYEE" DATA CAPTURE CHANGES;
ターゲット用に以下のSQLも生成されます。
CREATE TABLE "VSAMDEMO"."EMPLOYEE" (
"ENAME" CHAR(20) FOR MIXED DATA NOT NULL WITH DEFAULT,
"PHONE" INTEGER NOT NULL WITH DEFAULT,
"MAILID" CHAR(6) FOR MIXED DATA NOT NULL WITH DEFAULT,
"SALARY" DECIMAL(7, 2) NOT NULL WITH DEFAULT,
"JOBID" REAL NOT NULL WITH DEFAULT,
"EMPID" INTEGER NOT NULL WITH DEFAULT,
"DEPTID" SMALLINT NOT NULL WITH DEFAULT,
"DEPARTMENT" CHAR(15) FOR MIXED DATA NOT NULL WITH DEFAULT
) AUDIT NONE
CCSID UNICODE;
CREATE UNIQUE INDEX "VSAMDEMO"."XEMPLOYEE"
ON "VSAMDEMO"."EMPLOYEE"
("ENAME" ASC);
ALTER TABLE "VSAMDEMO"."EMPLOYEE" ADD CONSTRAINT "ENAME" PRIMARY KEY
("ENAME");
GRANT ALTER ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT DELETE ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT INDEX ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT INSERT ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT REFERENCES ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT SELECT ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT TRIGGER ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
GRANT UPDATE ON TABLE "VSAMDEMO"."EMPLOYEE" TO "USER01" WITH GRANT OPTION;
Db2に対して上のSQLを適用します。
生成されたSQLはDb2 for z/OSを前提としているようで、そのままDb2 for Linuxに対して実行するとエラーになるので、以下の様に修正します。
- CREATE TABLE のAUDIT NONEを削除
- "USER01" を USER cdcdb2 に変更
- GRANT TRIGGERステートメントを削除
CREATE TABLE "VSAMDEMO"."EMPLOYEE" (
"ENAME" CHAR(20) FOR MIXED DATA NOT NULL WITH DEFAULT,
"PHONE" INTEGER NOT NULL WITH DEFAULT,
"MAILID" CHAR(6) FOR MIXED DATA NOT NULL WITH DEFAULT,
"SALARY" DECIMAL(7, 2) NOT NULL WITH DEFAULT,
"JOBID" REAL NOT NULL WITH DEFAULT,
"EMPID" INTEGER NOT NULL WITH DEFAULT,
"DEPTID" SMALLINT NOT NULL WITH DEFAULT,
"DEPARTMENT" CHAR(15) FOR MIXED DATA NOT NULL WITH DEFAULT
)
CCSID UNICODE;
CREATE UNIQUE INDEX "VSAMDEMO"."XEMPLOYEE"
ON "VSAMDEMO"."EMPLOYEE"
("ENAME" ASC);
ALTER TABLE "VSAMDEMO"."EMPLOYEE" ADD CONSTRAINT "ENAME" PRIMARY KEY
("ENAME");
GRANT ALTER ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT DELETE ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT INDEX ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT INSERT ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT REFERENCES ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT SELECT ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
GRANT UPDATE ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION;
db2インスタンスユーザー"db2inst1"で実行。
[cdcdb2@test12 ~]$ su - db2inst1
パスワード:
[db2inst1@test12 ~]$ db2 connect to sample2
データベース接続情報
データベース・サーバー = DB2/LINUXX8664 11.1.0
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = SAMPLE2
[db2inst1@test12 ~]$ db2 -tvf EMPLOYEE.sql
CREATE TABLE "VSAMDEMO"."EMPLOYEE" ( "ENAME" CHAR(20) FOR MIXED DATA NOT NULL WITH DEFAULT, "PHONE" INTEGER NOT NULL WITH DEFAULT, "MAILID" CHAR(6) FOR MIXED DATA NOT NULL WITH DEFAULT, "SALARY" DECIMAL(7, 2) NOT NULL WITH DEFAULT, "JOBID" REAL NOT NULL WITH DEFAULT, "EMPID" INTEGER NOT NULL WITH DEFAULT, "DEPTID" SMALLINT NOT NULL WITH DEFAULT, "DEPARTMENT" CHAR( 15) FOR MIXED DATA NOT NULL WITH DEFAULT ) CCSID UNICODE
DB20000I SQL コマンドが正常に完了しました。
CREATE UNIQUE INDEX "VSAMDEMO"."XEMPLOYEE" ON "VSAMDEMO"."EMPLOYEE" ("ENAME" ASC)
DB20000I SQL コマンドが正常に完了しました。
ALTER TABLE "VSAMDEMO"."EMPLOYEE" ADD CONSTRAINT "ENAME" PRIMARY KEY ("ENAME")
SQL0598W 既存索引 "VSAMDEMO.XEMPLOYEE"
が主キーまたはユニーク・キーの索引として使用されます。
SQLSTATE=01550
GRANT ALTER ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT DELETE ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT INDEX ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT INSERT ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT REFERENCES ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT SELECT ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
GRANT UPDATE ON TABLE "VSAMDEMO"."EMPLOYEE" TO USER cdcdb2 WITH GRANT OPTION
DB20000I SQL コマンドが正常に完了しました。
再びコンテナに接続したシェルに戻ります。chcclp.sh実行。=> エラー
[cecuser@e0289065f5ba scripts]$ chcclp.sh -f /classic/usr/output/chcclp_IVP_Input.txt -ap 10101
Repl > chcclp session set to cdc;
Repl > connect datastore hostname test12 password xxxxx port 9087 name VSMSRC01 context source username cecuser;
Repl > connect datastore hostname test12 password xxxxx port 10901 name TARGET01 context target username cdcdb2;
[ERR2001]: Could not communicate with datastore. Please ensure that the hostname
and port for the datastore are valid, and that the datastore is running.
コンテナからtest12に対して名前解決が出来ていないっぽいので、コンテナ作成時に--add-host追記してtest12でアクセスできるようにしたはずなのだが...。というか逆に最初のVSAMSRC01に対してはなんでtest12でうまくいってたのだろう?、Db2に対するアクセスだけうまくいっていない。
chcclp_IVP_Input.txtを書き換えて、target側のhostnameをIPアドレスに変更したら進んだ。
[cecuser@44aa61d6003d scripts]$ chcclp.sh -f /classic/usr/output/chcclp_IVP_Input.txt -ap 10101
Repl > chcclp session set to cdc;
Repl > connect datastore hostname test12 password xxxxx port 9087 name VSMSRC01 context source username cecuser;
Repl > connect datastore hostname 10.0.2.15 password xxxxx port 10901 name cdc_db2_sample2 context target username cdcdb2;
Repl > add subscription name VSAMREM1;
Repl > list databases name VSMSRC01;
Databases for datastore VSMSRC01.
DATABASE
----------------
VSAM
Repl > add replication table schema VSAMDEMO database VSAM name VSMSRC01 table EMPLOYEE;
Repl > add table mapping targetSchema VSAMDEMO targetTable EMPLOYEE sourceTable EMPLOYEE sourceDatabase VSAM sourceSchema VSAMDEMO;
Repl > list subscriptions;
SUBSCRIPTION SOURCE DATASTORE TARGET DATASTORE CONTEXT
---------------- ------------------ ------------------------- ----------------
VSAMREM1 VSMSRC01 cdc_db2_sample2 Yes
VSAMT01 VSMSRC01 External (test12@10901)
Repl > list replication tables;
Replication tables for datastore VSMSRC01.
DATABASE SCHEMA REPLICATION TABLE
---------------- ---------------- -------------------
VSAM TEST01 FILEA
VSAM VSAMDEMO EMPLOYEE
Repl > list table mappings name VSAMREM1;
Table mappings for subscription VSAMREM1.
SOURCE TABLE TARGET TABLE MAPPING TYPE METHOD STATUS PREVENT RECURSION CONTEXT
------------------------ ------------------- ---------------- ---------------- ---------------- ------------------- ----------------
VSAM.VSAMDEMO.EMPLOYEE VSAMDEMO.EMPLOYEE Standard Mirror Refresh No Yes
Repl > disconnect datastore name VSMSRC01;
Repl > disconnect datastore name TARGET01;
[ERR2203]: A connection to the datastore TARGET01 does not exist.
最後のdisconnectの所、datastore名変更し忘れたのでエラーになったが、恐らくうまくいったっぽい。
コンテナ内からアクセスする場合、どうやらターゲットに対してはなぜか--add-hostの指定がうまく働いていおらずIPアドレスを指定する必要があるっぽい。
(コンテナ内からcurlで--add-hostで指定したホスト名にアクセスできることは確認済みなのだが...)
1. ソース側設定
1.1 VSAM定義登録
まず、VSAM Remote Source上(Linux上のコンテナ)に、ソースとして使用するVSAMおよび、そのVSAMが使用するLogStreamの情報を登録する必要があります。
コンテナに接続してClassicInstallAndMaintenanceMenu.shスクリプトを実行します。
[root@test12 ~]# podman exec -it --workdir /classic/usr/scripts ClassicCDCVSAM bash
[cecuser@e0289065f5ba scripts]$ ./ClassicInstallAndMaintenanceMenu.sh
*---------------------------------------------------------------------*
*
* IBM Data Replication VSAM for z/OS Remote Source, V11.4
* PID: 5737-C30
*
* Menu options:
* 1. Set the job card
* 2. Set the z/OS High Level Qualifier (HLQ)
* 3. Set the z/OS Unix System Services (USS) path
* 4. Install or replace z/OS libraries with this container's maintenance level
* 5. Start a new z/OS log reader
* 6. Stop the existing z/OS log reader
* 7. Get diagnostic log for the existing z/OS log reader
* 8. Configure a z/OS VSAM cluster for the container environment
* 9. Configure VSAM IVP file
* 10. Update container scripts from the current image
* 11. Generate diagnostics tar
* 99. Exit this script
*
*--------------------------------------------------------------------
8 . Configure a z/OS VSAM cluster for the container environment を選択
ここではメニューに従って以下の様に値を指定しています。
- Enter a VSAM base cluster data set name: => TAGUCHI.CICS.FILEA
- Enter the replication log to use for this VSAM DSN: => CEC.RMTLRS.CECREPL
- Do you want to generate JCL to ALTER DSN: for change capture? (Y or N) => y
- Is CICS VR installed for VSAM batch logging? (Y or N) => n
- Do you want to generate JCL to DEFINE LOGSTREAM for replication log: ? (Y or N) => n
- Should the IDCAMS ALTER JCL be submitted to your z/OS system? (Y or N) => n
今回使用するVSAMは、CICS提供ののサンプル(FILEA)を使用する想定で、ログを取得する設定になっていません。そのため、ログ収集の設定変更用のJCLを生成するオプションでYを指定しています。
LogStreamは先の環境構築の手順で作成したものをそのまま使う想定なのでLogStream定義用JCLの生成はNにしています。
*---------------------------------------------------------------------*
Select an option: 8
*---------------------------------------------------------------------*
*
* Classic CDC for VSAM
* Define a VSAM cluster to Linux components for refresh/replication
*
*---------------------------------------------------------------------*
Enter a VSAM base cluster data set name: TAGUCHI.CICS.FILEA
Enter the replication log to use for this VSAM DSN: CEC.RMTLRS.CECREPL
You provided DSN: <TAGUCHI.CICS.FILEA> with replication log: <CEC.RMTLRS.CECREPL>
Is this correct? (Y or N)y
DSN: <TAGUCHI.CICS.FILEA> added to <../../shell/vsamcat/vsamcat.txt>
Do you want to generate JCL to ALTER DSN: <TAGUCHI.CICS.FILEA> for change capture? (Y or N)y
*---------------------------------------------------------------------*
*
* Classic CDC for VSAM
* Create JCL with statements to alter a VSAM cluster for change capture
*
*---------------------------------------------------------------------*
TAGUCHI.CICS.FILEA CEC.RMTLRS.CECREPL ../output/TAGUCHI.CICS.FILEA.Alter.jcl.2021-08-08_14:14:03
Is CICS VR installed for VSAM batch logging? (Y or N)n
Do you want to generate JCL to DEFINE LOGSTREAM for replication log: <CEC.RMTLRS.CECREPL>? (Y or N)n
Should the IDCAMS ALTER JCL be submitted to your z/OS system? (Y or N)n
Provide the contents of ../output/TAGUCHI.CICS.FILEA.Alter.jcl.2021-08-08_14:14:03 to your z/OS group to perform the alter step.
VSAM Remote Source上にソースとしてのVSAMが登録されると、コンテナー内の以下のファイルにエントリーが追加されます。
/classic/shell/vsamcat/vsamcat.txt
このディレクトリは永続ボリュームとしてマウントされていますので、ホストOS側から以下のパスで確認することもできます。
/home/cecuser/classic/docker/volumes/classiccdcvsamcat/vsamcat.txt
** VSAM cluster registry file
** Contains a record for each VSAM cluster that has comma delimited tokens
** of VSAM attributes.
** Comma delimited tokens are:
** 1. DDName (up to 8 characters - ex: VSAMDD
** 2. Dataset or path name (up to 44 characters - ex: CAC.VSAM.BONBONS)
** 3. Maximum record length
** 4. Key offset
** 5. Key length ('0' for no key)
** 6. Single character Type ('C' for cluster, 'R' for path)
** 7. Single character DSType ('K'-KSDS,'R'-RRDS,'E'-ESDS, 'L'-LDS)
** 8. Single character recovery status
** 9. Single character Log Parm ('0':not set, '1':None, '2':Undo, '3':All)
** 10. CISIZE
** 11. FRReplicate ('Y'=set on)
** 12. Log File Name
**
VSAMDD,CAC.VSAM.BONBONS,175,0,3,C,K,N,0,18432,Y,CECCDC.VSAMLOG
VSAMDD,CAC.DEMO.KSDS.FILE0001,32760,0,20,C,K,Y,0,32764,Y,CDCSRC.IVP.REPLLOG
**
** All entries should be before this line
**
VSAMDD,CEC.V114.REMOTE.EMPLOYEE.FILE0001,32760,0,20,C,K,Y,0,32764,Y,CEC.RMTLRS.IVP.REPLLOG
VSAMDD,TAGUCHI.CICS.FILEA,32760,0,20,C,K,Y,0,32764,Y,CEC.RMTLRS.CECREPL
さらに、VSAM定義のカスタマイズ用に以下のJCLが生成されます。これは後の手順で使用します。
//CCDCRLR JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),
// REGION=0M,NOTIFY=&SYSUID
//OUT1 OUTPUT JESDS=ALL,OUTDISP=(HOLD,HOLD)
//*
//STEP0001 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*,OUTPUT=(*.OUT1)
//SYSIN DD *
ALTER TAGUCHI.CICS.FILEA -
LOGREPLICATE -
LOGSTREAMID(CEC.RMTLRS.CECREPL)
/*
//
1.2 LogStream
LogStreamは、前回環境構築時に作成したCEC.RMTLRS.CECREPL
を使用することにします。
参考:セットアップ用JCL実行 - 06_CreateLogs.jcl
1.3 Log Reader
前回環境構築時に作成したLog Reader起動用のJCLを使用してLog Readerを稼働させておきます。
参考:セットアップ用JCL実行 - 07_StartServerJob.jcl
1.4 VSAM on z/OSのカスタマイズ
今回はCICS提供サンプルのFILEAを使用します。CICS提供のサンプルhlq.SDFHINST(DFHDEFDS)をベースに、以下のJCLでTAGUCHI.CICS.FILEAというVSAMファイルを作成している想定です。
//DEFFILEA JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),NOTIFY=&SYSUID
//*
//DELETE EXEC PGM=IDCAMS,REGION=1M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE TAGUCHI.CICS.FILEA
SET MAXCC=0
/*
//DEFINE EXEC PGM=IDCAMS,REGION=1M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
/* */
/* */
/* DEFINE A FILEA DATASET */
/* */
DEFINE CLUSTER(NAME(TAGUCHI.CICS.FILEA)-
REC(80)-
STORAGECLASS(SGBASE) INDEXED) -
DATA(NAME(TAGUCHI.CICS.FILEA.DATA)-
RECSZ(80 80)-
UNIQUE -
KEYS(6 1)) -
INDEX(NAME(TAGUCHI.CICS.FILEA.INDEX)-
UNIQUE -
SHR(2 3))
/*
//*
//* LOAD VSAM DATA FILE
//*
//LOADFILE EXEC PGM=DFH$LDSP
//STEPLIB DD DSN=DFH550.CICS.SDFHLOAD,DISP=SHR
//FILEA DD DISP=SHR,
// DSN=TAGUCHI.CICS.FILEA
//SYSOUT DD SYSOUT=*
//SYSIN DD DISP=SHR,
// DSN=DFH550.CICS.SDFHSAMP(DFH$FAIN)
注意!レプリケーション対象のVSAMはSMS管理のボリュームに作成する必要があります。上の例ではDEFINE CLUSTERの際にSTORAGECLASSを指定しています。
レプリケーションを行うためには、上のVSAMの設定をカスタマイズする必要があります。先の手順で生成したカスタマイズ用JCL(TAGUCHI.CICS.FILEA.Alter.jcl.xxx)をホスト側に転送し、以下の様にLOG(ALL)オプションを追加します。
DFSMS - ALTER Parameters
//CCDCRLR JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1),
// REGION=0M,NOTIFY=&SYSUID
//OUT1 OUTPUT JESDS=ALL,OUTDISP=(HOLD,HOLD)
//*
//STEP0001 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*,OUTPUT=(*.OUT1)
//SYSIN DD *
ALTER TAGUCHI.CICS.FILEA -
LOG(ALL) -
LOGREPLICATE -
LOGSTREAMID(CEC.RMTLRS.CECREPL)
/*
//
CICSからFIELAがOpenされている場合は一旦Closedの状態にしておき、上のJCLをSubmitします。
参考:SMS管理ではないVSAMに対して上のJCLを実行した場合...
0IDC3019I INVALID ENTRY TYPE FOR REQUESTED ACTION
IDC3009I ** VSAM CATALOG RETURN CODE IS 60 - REASON CODE IS IGG0CLKV-98
IDC0532I **ENTRY DFH550.CICS.FILEA NOT ALTERED
IDC3009I
ReturnCode: 60, ReasonCode: 98
Explanation: ALTER of the RLS flags is not allowed for a data set that is not capable of being used by RLS. Data sets that are Linear, non-SMS managed, keyrange or temporary are not eligible for RLS access.
Programmer Response: Ensure that the entry being altered is eligible for RLS processing. Correct the error. Run the job again.
VSAM設定内容の確認を行います。LISTCコマンド(TSOコマンド)で設定を確認しておきます。
LISTC ENTRIESコマンド結果
LISTC ENTRIES('TAGUCHI.CICS.FILEA') ALL
CLUSTER ------- TAGUCHI.CICS.FILEA
IN-CAT --- USERCAT.Z24B.USER
HISTORY
DATASET-OWNER-----(NULL) CREATION--------2021.224
RELEASE----------------2 EXPIRATION------0000.000
SMSDATA
STORAGECLASS -----SCBASE MANAGEMENTCLASS---(NULL)
DATACLASS --------(NULL) LBACKUP ---0000.000.0000
CA-RECLAIM---------(YES)
EATTR-------------(NULL)
BWO STATUS------00000000 BWO TIMESTAMP---00000 00:00:00.0
BWO---------------(NULL)
RLSDATA
LOG -------------------ALL RECOVERY REQUIRED --(NO) FRLOG ------------(NULL)
VSAM QUIESCED -------(NO) RLS IN USE ---------(NO) LOGREPLICATE------------(YES)
LOGSTREAMID-----------------CEC.RMTLRS.CECREPL
RECOVERY TIMESTAMP LOCAL-----X'0000000000000000'
RECOVERY TIMESTAMP GMT-------X'0000000000000000'
DATABASE -----------------(NULL)
ENCRYPTIONDATA
DATA SET ENCRYPTION-----(NO)
PROTECTION-PSWD-----(NULL) RACF----------------(NO)
ASSOCIATIONS
DATA-----TAGUCHI.CICS.FILEA.DATA
INDEX----TAGUCHI.CICS.FILEA.INDEX
DATA ------- TAGUCHI.CICS.FILEA.DATA
IN-CAT --- USERCAT.Z24B.USER
HISTORY
DATASET-OWNER-----(NULL) CREATION--------2021.224
RELEASE----------------2 EXPIRATION------0000.000
ACCOUNT-INFO-----------------------------------(NULL)
PROTECTION-PSWD-----(NULL) RACF----------------(NO)
ASSOCIATIONS
CLUSTER--TAGUCHI.CICS.FILEA
ATTRIBUTES
KEYLEN-----------------6 AVGLRECL--------------80 BUFSPACE-----------37376 CISIZE-------------18432
RKP--------------------1 MAXLRECL--------------80 EXCPEXIT----------(NULL) CI/CA------------------3
SHROPTNS(1,3) RECOVERY UNIQUE NOERASE INDEXED NOWRITECHK UNORDERED NOREUSE
NONSPANNED
STATISTICS
REC-TOTAL-------------46 SPLITS-CI--------------0 EXCPS-----------------41
REC-DELETED------------2 SPLITS-CA--------------0 EXTENTS----------------1
REC-INSERTED-----------5 FREESPACE-%CI----------0 SYSTEM-TIMESTAMP:
REC-UPDATED-----------18 FREESPACE-%CA----------0 X'DA2BC71EADAC5D00'
REC-RETRIEVED--------417 FREESPC------------36864
ALLOCATION
SPACE-TYPE---------TRACK HI-A-RBA-----------55296
SPACE-PRI--------------1 HI-U-RBA-----------55296
SPACE-SEC--------------0
VOLUME
VOLSER------------B4USR1 PHYREC-SIZE--------18432 HI-A-RBA-----------55296 EXTENT-NUMBER----------1
DEVTYPE------X'3010200F' PHYRECS/TRK------------3 HI-U-RBA-----------55296 EXTENT-TYPE--------X'00'
VOLFLAG------------PRIME TRACKS/CA--------------1
EXTENTS:
LOW-CCHH-----X'008F0004' LOW-RBA----------------0 TRACKS-----------------1
HIGH-CCHH----X'008F0004' HIGH-RBA-----------55295
INDEX ------ TAGUCHI.CICS.FILEA.INDEX
IN-CAT --- USERCAT.Z24B.USER
HISTORY
DATASET-OWNER-----(NULL) CREATION--------2021.224
RELEASE----------------2 EXPIRATION------0000.000
PROTECTION-PSWD-----(NULL) RACF----------------(NO)
ASSOCIATIONS
CLUSTER--TAGUCHI.CICS.FILEA
ATTRIBUTES
KEYLEN-----------------6 AVGLRECL---------------0 BUFSPACE---------------0 CISIZE---------------512
RKP--------------------1 MAXLRECL-------------505 EXCPEXIT----------(NULL) CI/CA-----------------49
SHROPTNS(2,3) RECOVERY UNIQUE NOERASE NOWRITECHK UNORDERED NOREUSE
STATISTICS
REC-TOTAL--------------1 SPLITS-CI--------------0 EXCPS-----------------17 INDEX:
REC-DELETED------------0 SPLITS-CA--------------0 EXTENTS----------------1 LEVELS-----------------1
REC-INSERTED-----------0 FREESPACE-%CI----------0 SYSTEM-TIMESTAMP: ENTRIES/SECT-----------1
REC-UPDATED------------0 FREESPACE-%CA----------0 X'DA2BC71EADAC5D00' SEQ-SET-RBA----------------0
REC-RETRIEVED----------0 FREESPC------------24576 HI-LEVEL-RBA---------------0
ALLOCATION
SPACE-TYPE---------TRACK HI-A-RBA-----------25088
SPACE-PRI--------------1 HI-U-RBA-------------512
SPACE-SEC--------------0
VOLUME
VOLSER------------B4USR1 PHYREC-SIZE----------512 HI-A-RBA-----------25088 EXTENT-NUMBER----------1
DEVTYPE------X'3010200F' PHYRECS/TRK-----------49 HI-U-RBA-------------512 EXTENT-TYPE--------X'00'
VOLFLAG------------PRIME TRACKS/CA--------------1
EXTENTS:
LOW-CCHH-----X'008F0005' LOW-RBA----------------0 TRACKS-----------------1
HIGH-CCHH----X'008F0005' HIGH-RBA-----------25087
1.5 VSAM表の作成
VSAMを別のデータストアにレプリケーションする際は、対象のVSAMデータの構造を汎用的なRDBの表のイメージにマッピングしてハンドリングする必要があります。VSAMデータ構造を表形式で表したものは"VSAM表"と呼ばれます。ここではVSAM Remote Source上に"VSAM表"を作成していきます。
VSAM表は元のVSAMデータ構造を表すCOBOL COPYBOOKを元に生成します。
参考: Mapping source data into Classic logical tables
適当なワークスペースを指定してCDAを起動します。以降、CDA上で作業していきます。
VSAM表を作成するには多くのステップを踏む必要があり、操作の位置づけが分かりにくいのでイメージを図示しておきます。
図の吹き出しの操作を実施していくことになります。
データ設計プロジェクト作成
データパースペクティブが開き、先ほど作成したプロジェクトが確認できます。
COPYBOOKのインポート
レプリケーション対象VSAMファイルのレコードフォーマットを表すCOBOL COPYBOOKを、CDAが稼働しているローカルPC上にコピーしておきます。
ここではCICS提供サンプルのFILEAをレプリケーション対象のVSAMとして使用するので、そのデータフォーマットを示すCOPYBOOKとして、HLQ.SDFHSAMP(DFH0CFIL)をローカルにDFH0CFIL.cpyというテキストファイルとしてコピーしておきます。
02 FILEREC.
03 STAT PIC X.
03 NUMB PIC X(6).
03 NAME PIC X(20).
03 ADDRX PIC X(20).
03 PHONE PIC X(8).
03 DATEX PIC X(8).
03 AMOUNT PIC X(8).
03 COMMENT PIC X(9).
データ・プロジェクト・エクスプローラーから先に作成したプロジェクト名を右クリック - インポートを選択
Classic Data Architect - クラシック参照ファイル を選択して次へ
ローカルホストを選択し、ファイル・タイプ: COBOLコピーブック、ファイル: 上のDFH0CFIL.cpy を選択して次へ
物理データモデルの作成
上で作成したプロジェクトを右クリック - 新規 - 物理データモデルを選択
データベース: Classic Integration、バージョン: V11.3 を選択して次へ
VSAM表の作成
物理データ・モデルdbm以下のデータベースを右クリック - クラシック・オブジェクトの追加 - VSAM表を選択
適当なスキーマ名を指定し、照会、変更キャプチャーを選択して次へ
表名:FILEA、データセットの名前: TAGUCHI.CICS.FILEA を指定して次へ
DDLの生成/適用
上で作成したVSAM表は、WindowsのCDA上のプロジェクトとして作成しただけなので、これをVSAM Remote Source上に反映させる必要があります。VSAM Remote Source上に反映させるためにはDDL(SQL)を生成してそれを実行する必要があります。
上で生成したVSAM表(FILEA)を右クリック - DDLの生成を選択
ファイル名に適当な値を指定し、サーバー上でDDLを実行にチェックを入れて次へ
Classic Integrationを選択し、名前に"VSAMRemoteSource_on_Test12"を指定して次へ
一通り値を設定して接続テストをしてOKだったら次へ
ここではコンテナとして稼働しているVSAM Remote SourceがListenしているホストとポート番号を指定することになりますが、ローカルホストの19087ポートからフォワードしているので、localhost:19087を指定します。
データ・ソース・エクスプローラー・ビューから、VSAM Remote Source上に反映されたVSAM表が確認できます。
※参考
DDLを適用した結果、CREATE TABLE文で以下のエラーが発生する場合は、先の手順で示したVSAM Remote SourceへのVSAM定義登録が正常に完了していない可能性がありますのでご確認ください。
「データ・セット、xxx.xxx.xxx が存在しないか、またはカタログされません。」
2. ターゲット側設定
Db2 テーブル・スペース
レプリケーションされるテーブルを配置するテーブル・スペースを用意しておきます。
今回はデフォルトで作成されているテーブルスペース"USERSPACE1"を使用することにするので確認だけ。
[root@test12 ~]# su - db2inst1
[db2inst1@test12 ~]$ db2 connect to sample2
データベース接続情報
データベース・サーバー = DB2/LINUXX8664 11.1.0
SQL 許可 ID = DB2INST1
ローカル・データベース別名 = SAMPLE2
[db2inst1@test12 ~]$ db2 list tablespaces
現在のデータベースの表スペース
表スペース ID = 0
名前 = SYSCATSPACE
タイプ = データベース管理スペース
内容 = すべての永続データ。 REGULAR 表スペース。
状態 = 0x0000
詳しい説明:
正常
表スペース ID = 1
名前 = TEMPSPACE1
タイプ = システム管理スペース
内容 = システム一時データ
状態 = 0x0000
詳しい説明:
正常
表スペース ID = 2
名前 = USERSPACE1
タイプ = データベース管理スペース
内容 = すべての永続データ。 LARGE 表スペース。
状態 = 0x0000
詳しい説明:
正常
表スペース ID = 3
名前 = SYSTOOLSPACE
タイプ = データベース管理スペース
内容 = すべての永続データ。 LARGE 表スペース。
状態 = 0x0000
詳しい説明:
正常
[db2inst1@test12 ~]$ db2 connect reset
DB20000I SQL コマンドが正常に完了しました。
[db2inst1@test12 ~]$ exit
ログアウト
レプリケーション・エンジンのインスタンス
ターゲットとなるデータソース(今回の場合Db2)にVSAM変更情報を反映させるためのレプリケーション・エンジンのインスタンスを作成しておく必要があります。
これは、先の環境構築の所で実施済みなので(cdc_db2_sample2)、これをそのまま使用します。
参考: セットアップ(レプリケーション・エンジンのインスタンス作成)
3. レプリケーション設定 (サブスクリプション)
いよいよレプリケーションの設定を行っていくことになりますが、これらはいずれもManagement ConsoleからAccess Serverに接続して各種オブジェクトの定義を行っていくことになります。
まず、レプリケーション元(Source) と 先(Target)として何を使用するかというのを"データストア"というオブジェクトで管理しますので、ソース用、ターゲット用にデータストアを定義します。
次に、どのソースからどのターゲットにレプリケーションを行うか、という指定を"サブスクリプション"というオブジェクトで定義します。ここでは、ソース上のどの表をターゲット上のどの表にマッピングするか、というような情報も指定します。
ソース用データストアの作成
Management Consoleを開いて、Access Serverに接続します。
ファイル - Access Server - 新規データストアを選択
適当な名前を指定し、コンテナとして稼働しているVSAM Remote SourceがListenするホスト名、ポートを指定します。ここで指定するホスト、ポートは、Access Serverから見た時のアクセス先なので、Access Serverから辿れるホスト名、ポートを指定します。Pingボタンをクリックすると指定したVSAM Remote Sourceに接続してプロパティー部分の情報が更新されます。接続パラメーターボタンをクリックします。
VSAM Remote Sourceの実行ユーザーのユーザーID、パスワードを指定してOK
ユーザーの割り当て
上で作成したデータストアに対してユーザーの割り当てを行います。
アクセス・マネージャータブのデータ・ストアの管理ビューで、データストア名"VsamRemoteSource01"(ソース用)を右クリックしてユーザーの割り当てを選択します。
右側の接続の管理ビューで、cdcadminユーザーが追加されたことが確認できます。
ターゲット用データストア作成
Management Consoleを開いて、Access Serverに接続します。
ファイル - Access Server - 新規データストアを選択
適当な名前を指定し、CDC Replication Engine for Db2のインスタンスがListenするホスト名、ポートを指定します。ここで指定するホスト、ポートは、Access Serverおよび、コンテナ内のVSAM Remote Sourceから辿れるホスト名、ポートを指定する必要があります。
※VSAM Remote Sourceのコンテナ作成時に--add-hostでホスト名とIPアドレスのマッピングをしてもコンテナからホスト名でのアクセスはNGでした。そのためこの"ホスト名"欄にはIPアドレスを指定する必要があります!
Pingボタンをクリックすると指定したCDC Replication Engineに接続してプロパティー部分の情報が更新されます。接続パラメーターボタンをクリックします。
CDC Replication Engine for Db2管理ユーザーのユーザーID、パスワードを指定してOK
ユーザーの割り当て
上で作成したデータストアに対してユーザーの割り当てを行います。
アクセス・マネージャータブのデータ・ストアの管理ビューで、データストア名"Db2_sample2"(ターゲット用)を右クリックしてユーザーの割り当てを選択します。
右側の接続の管理ビューで、cdcadminユーザーが追加されたことが確認できます。
サブスクリプションの作成
構成タブに切り替えて、サブスクリプションビューの"新規サブスクリプションの作成"アイコンをクリックします。
適当な名前を指定し、データストアにはソースとしてVsamRemoteSource01、ターゲットとしてDb2_sample2を指定し、拡張設定をクリック
確認のみ。(ソースIDとして前画面の名前の先頭8文字がとられるようなので、全画面の名前も8文字にしておくとよい)
表スペース名(ここではUSERSPACE1)を指定し、ターゲット・スキーマ部分をクリック
この時点で、Db2側(ターゲット側)にはガラとなるテーブルが作成されます。テーブルの中身はカラです。
[root@test12 ~]# su - db2inst1
[db2inst1@test12 ~]$ db2 connect to sample2 user cdcdb2 using xxxxx
データベース接続情報
データベース・サーバー = DB2/LINUXX8664 11.1.0
SQL 許可 ID = CDCDB2
ローカル・データベース別名 = SAMPLE2
[db2inst1@test12 ~]$ db2 list tables
表/ビュー スキーマ タイプ 作成時刻
------------------------------- --------------- ----- --------------------------
FILEA CDCDB2 T 2021-08-12-19.14.37.895402
TS_AUTH CDCDB2 T 2021-08-11-15.52.45.536044
TS_BOOKMARK CDCDB2 T 2021-08-11-15.52.45.624596
TS_CONFAUD CDCDB2 T 2021-08-11-15.52.45.721099
TS_DDLAUD CDCDB2 T 2021-08-11-15.52.45.831333
5 レコードが選択されました。
[db2inst1@test12 ~]$ db2 "select * from FILEA"
STAT NUMB NAME ADDRX PHONE DATEX AMOUNT COMMENT
---- ------ -------------------- -------------------- -------- -------- -------- ---------
0 レコードが選択されました。
レプリケーションの実行
一通り設定が済んだので、実際にレプリケーションを行ってみます。このあたりの制御もManagement Consoleから行います。
リフレッシュ
まず最初に、現時点でのVSAMデータをDb2に反映させておきます。
この時、CICSからはVSAMをClose状態にしておきます。
サブスクリプションを右クリック - リフレッシュの開始を選択
リフレッシュが完了すると、ターゲットのDb2上のテーブルにデータが反映されます。
[db2inst1@test12 ~]$ db2 "select * from FILEA"
STAT NUMB NAME ADDRX PHONE DATEX AMOUNT COMMENT
---- ------ -------------------- -------------------- -------- -------- -------- ---------
000100 S. D. BORMAN SURREY, ENGLAND 32156778 26 11 81 $0100.11 *********
000102 J. T. CZAYKOWSKI WARWICK, ENGLAND 98356183 26 11 81 $1111.11 *********
000104 M. B. DOMBEY LONDON,ENGLAND 12846293 26 11 81 $0999.99 *********
...
900000 D.S. RENSHAW TAMPA, FLA. 35668120 26 11 81 $0040.00 *********
999999 ANJI STEVENS RALEIGH, N.Y. 84591639 26 11 81 $0049.00 *********
43 レコードが選択されました。
ミラーリングの開始
サブスクリプションを右クリック - ミラーリングの開始を選択
モニタータブを開いて、指定したサブスクリプションの状態が"継続ミラーリング"になっていることを確認。
CICS側で、当該ファイルをOpenにして当該FILEを更新する処理を実施してみます。
AMNUというCICS提供サンプルトランザクションで、以下のレコードを追加してみます。
FILE ADD
NUMBER: 000001
NAME: AAA
ADDRESS: BBB
PHONE: 111
DATE: 99
AMOUNT: $0001.00
COMMENT:
ターゲットのDb2のテーブルを参照してみます。
[db2inst1@test12 ~]$ db2 "select * from FILEA"
STAT NUMB NAME ADDRX PHONE DATEX AMOUNT COMMENT
---- ------ -------------------- -------------------- -------- -------- -------- ---------
A 000001 AAA BBB 111 99 $0001.00
000100 S. D. BORMAN SURREY, ENGLAND 32156778 26 11 81 $0100.11 *********
000102 J. T. CZAYKOWSKI WARWICK, ENGLAND 98356183 26 11 81 $1111.11 *********
000104 M. B. DOMBEY LONDON,ENGLAND 12846293 26 11 81 $0999.99 *********
...
900000 D.S. RENSHAW TAMPA, FLA. 35668120 26 11 81 $0040.00 *********
999999 ANJI STEVENS RALEIGH, N.Y. 84591639 26 11 81 $0049.00 *********
44 レコードが選択されました。
レコードが1件追加されました!
レプリケーションがうまく行われていることが確認できました。