When using the CA Datacom/DB DBUTLTY program, and the BACKUP command to take a backup of the whole database, and then loading the data from the backup file into the target environment, it is possible for one or more tables to not be loaded, and the job to produce a message "TABLE NOT LOADED". Why does this happen, and how can it be corrected?
Clients who support their applications often will copy data from their databases in one environment to another for testing or development activities, to report against older data, or for many other reasons. It is very easy using the BACKUP command of the CA Datacom/DB DBUTLTY program to take a backup of the whole database. This backup data can then be loaded into the target environment with a single LOAD command. Alternatively, each area in the database can be backed up separately and then loaded into the target as desired.
In certain cases with either method, it is possible for a table to not be loaded, and the job to produce a message "TABLE NOT LOADED". Here is an example report showing this situation:
In this case, Table TBS was not loaded (Box A), although the input file shows there were 68,915 records. Looking at the description of these tables further, Table TBS was defined with Datacom ID 2 in the source system (Input Box B), but it was defined with Datacom ID 46 in the target system (Output Box C). As noted in the CA Datacom/DB DBUTLTY Guide for the LOAD command, "If you are loading data from a backup, the LOAD function only restores the data if the table IDs are identical when LOADID=YES (the default). LOADID=NO can be used to match on table names, but LOADID=NO cannot be specified if either URI=NO is specified or if any table in the area was not defined to DDD with RECOVERY=Y. REMAP= can be used to force matching on different table names. This feature is available only for areas loaded as URI."
In this situation, there are several alternatives. One or more of these should be considered in each circumstance, in order to use the best process for the given situation.
- Change the Datacom-ID for the target table in Datadictionary to match that of the source. This must be considered carefully, and all environments with this database definition queried to determine the cause for the mismatch. If a table is created without a Datacom-ID, when that definition is copied to PROD status, an ID will be assigned to it. If a database definition is migrated from one environment to another using Batch Transaction Generator (BTG) transaction, the Datacom-ID of that source will be propagated to all other environments during the DDUPDATE process. See "Changing the Datacom-ID" below for more information on making this change.
- To load this backup into the target environment and use the 3-character short Datacom-name instead of the Datacom-ID, you can use the LOADID=NO parameter as noted in the DBUTLTY comment above. This will match on the name and allow the load as usual. This should be seen as a temporary solution until the Datacom-ID can be corrected permanently, or when using a backup that has the wrong Datacom-ID.
- Use the EXTBKUP DBUTLTY function to extract the data from the backup file for the table that did not get loaded. This data can then be loaded into the target table by using the LOAD function (if a single-table area), or the MASSADD function (if this table is part of a multi-table area).
For more information about the DBUTLTY LOAD (with LOADID=NO), EXTBKUP and MASSADD functions, please refer to the CA Datacom/DB DBUTLTY Reference Guide.
Changing the Datacom-ID
The Datacom-ID for the table is stored in the Datadictionary, and it is also present in the Database directory (CXX). This field can be changed using the online DDOL transaction, or through batch DDUPDATE transactions. In DDOL, the tables in a database can be displayed via the DISPLAY DATABASE databasename status command. Here is an example:
In this display, the column DB-Id contains the Datacom-ID of the table. Here, table PNC (DEMO-DEM-PNC) has the Datacom-ID of 006. This information should be checked for all environments in which this table/database is defined. To change it, type the "ATT" margin command in the line number for the occurrence on a display panel and press PF4 (PROCESS). Set the Datacom-ID to the new value and then press PF9 (APPLY). If there are no errors, Datadictionary displays the Attribute Display Panel with the message SUCCESSFUL ATTRIBUTE UPDATE. Proceed with your process to copy the definition to PROD status if necessary and then catalog it to the Directory (CXX).
To update this value in batch mode using DDUPDATE, you will need to do the following:
- Enter your valid signon card
- Use the following transactions to make the change:
3150 @@@ ###
(Replace the @@@ with the 3-character Datacom short name, and ### with the desired Datacom-ID)
- Run the necessary steps to copy the definition to PROD status if necessary and then catalog it to the Directory (CXX).
For more information about changing attributes or the batch process, please refer to the CA Datacom Datadictionary Online Reference Guide or the CA Datacom Datadictionary Batch Reference Guide.