Is there a way to identify application dictionaries and related DDNAMEs and files for a CV from the DMCL?
All supported releases of IDMS
There may be a need to identify all application dictionaries on a CV such as during an upgrade. In upgrade JOB13 only one application dictionary is updated. The related steps to update the application dictionary should be executed once for each application.
From ENTER NEXT TASK CODE enter command LOOK DMCL to display the CV's global DMCL definition. Also you can run batch job IDMSLOOK with input syntax DMCL. The report will be generated for the DMCL named in SYSIDMS.
The report contains three main sections, the name of the areas, name of the files and the DBTABLE.
A dictionary segment must contain areas DDLDML and DDLDCLOD.
Areas and files are defined in segments so an area or file name will always be prefixed by the a segment name.
In the area name section of the display identify all segments with areas DDLDML and DDLDCLOD.
To access a dictionary with any of the IDD compilers, you must be set to a DICTNAME/DBNAME that contains areas DDLDML, DDLDCLOD and DDLDCMSG. This is because these compilers use subschema IDMSNWKA which contains these three areas.
DDLDCMSG is typically defined in segment SYSMSG and included in all DBNAMEs that are to be set as a DICTNAME (I.E. there is only one Message area and it is typically shared among all dictionaries).
Example:
Page Low High Page
Area Name Shr Group Page Page Size DDNAME
---------------------- --- ----- ---------- ---------- ------ --------
APPLDICT.DDLDML 0 60,001 66,000 4,276 DICTDB
APPLDICT.DDLDCLOD 0 70,001 72,000 4,276 DLODDB
SYSMSG.DDLDCMSG 0 10,001 14,000 4,276 DCMSG
It is possible that all three areas of a dictionary are defined in three segments or all three areas are defined in the same segment. If all three areas are defined in the same segment then that segment name can be used as the dictionary name. In the DBTABLE definition at the end of the display a segment name which includes all three areas, DDLDML, DDLDCLOD and DDLDCMSG could itself be included in a DBNAME. Either the DBNAME or the segment maybe used to bind a run unit.
In cases where all three areas are not in the same segment then the segments must be included in a DBNAME entry in the DBTABLE and this DBNAME must be used as the dictionary name.
Note that the area name display lists the DDNAMEs but to identify the related DDNAMEs and associated file names refer to the file name section of the display.
Example:
Mem.- Shared
File Name DDNAME Type Cache Cache Buffer Name
--------------------------- -------- ---- ----- ----- ------------------
APPLDICT.DICTDB DICTDB BDAM No No DEFAULT_BUFFER
DSN=<HLQ>.IDMS190.APPLDICT.DDLDML
APPLDICT.DLODDB DLODDB BDAM No No DEFAULT_BUFFER
DSN=<HLQ>.IDMS190.APPLDICT.DCLOD
SYSMSG.DCMSG DCMSG BDAM No No DEFAULT_BUFFER
DSN=<HLQ>.IDMS190.SYSMSG.DDLDCMSG
Example of DBNAME entry from DBTABLE:
DBNAME is SYSDICT match on subschema is OPTIONAL
Include SEGMENT ---> APPLDICT
Include SEGMENT ---> SYSMSG