We are testing our Change Data Capture (CDC) setup against some of our application tables. The CDCL listener task is failing with a RC 94(048) General Error Indicator message:
DB03153E - CDCL mufname ERROR ADDITMNT 94(048)
Are we doing something wrong, and how do we fix this?
The RC 94 is a general error, and the 048 internal reason code (Invalid data provided for data type) does not give much detail, as there could be several causes.
In the case of Change Data Capture (CDC) processing, though, this error usually means that you are trying to use CDC processing against an application table that is longer than 2000 bytes.
One of the tables used in CDC is called CA_CP_MNT (MNT). It contains one record for each maintenance command. This means each add, update, and delete to a table is subject to change propagation. The table will have one key made up of the fields: control ID, MUFplex or MUF name, the TSN, and the store clock value. Records will be unique. The table is defined as variable so that the storage in the data area and LXX is only what is needed. The table contains a field for storing an updated record in both "Before" and "After" format.
As distributed originally, this field provides room for a record that has a maximum length of 2000 bytes. If a site needs change propagation for tables with larger records, this field must be altered to be twice the size of the largest record. The block size of the area containing the table (AR2) will need to be changed to contain the larger data record.
HOW TO CHANGE
In order to accommodate tables larger than 2000 bytes, you need to change the database definition. This is provided in BTG format in CAI.THLQ.CABDSAMP(BTG2009). Note that because this file is under SMP/E control, you will probably want to copy the member to your CUSMAC file and process it from there.
First, you need to modify the length of the field VARIABLE_DATA in Table CA_CDC_MNT. The length needs to be twice the size of the largest record that you will be monitoring with the CDC function, since it needs to include room for the "Before" and "After" image from the log file (LXX). Here is what the field definition looks like:
....5...10....5...20....5...30....5...40....5...50....5...60....5...70 +BTG FIELD,VARIABLE_DATA 4010 * START 4012 S V L N 04000 00 00001 N C N N N N N N 00000 4018 & +END
Change the 4000 value in the 4012 record to your desired new value. This is at or about line 203 in the file.
Then, you need to modify the blocksize for area CA_CDC_AREA2 to be large enough to contain the MNT data record (this is about line 20):
....5...10....5...20....5...30....5...40....5...50....5...60....5...70 +BTG AREA,CA_CDC_AREA2(T001) 1000 CONNECT,CA_CDC_BASE 1001 'DATACOM','DATACOM' 1002 'AREA FOR CHANGE DATA CAPTURE TSN/MNT TABLES' 3001 AR2 3002 Y 04096 DATACOM 1 0000 3004 00000 CA_CDC_AREA2 Y +END
You will need to change the value on the 3002 card to your desired blocksize.
Finally, you need to make sure that you have data buffers defined to your DATAPOOL that are large enough to handle this blocksize. Obviously, this change may also alter your space requirements on the data file.
You should then scratch and redefine the files for AREA2 if needed, and then apply and build the database anew with these transactions.
Note: In a customer case, they did not need the large tables in CDC. Taking out these large tables out from CDC did not fix the issue. Issue was only fixed after the CDC RESET.
For more information about Change Data Capture, please refer to the CA Datacom/DB Database and System Administration Guide, in the section " Using the Multi-User Facility › Change Data Capture."
As always, please contact CA Technologies support for CA Datacom if you have further questions.