How to remove duplicate IDMSDIRL record occurrences
A recently corrected error within module IDMSDIRL resulted in duplicate occurrences of record types USER, USERGROUP, and DELUSER to be potentially stored within any dictionary processed multiple times by IDMSDIRL beginning with the introduction of CA IDMS Release 12.0. Since IDMSDIRL does not store data into a dictionary following typical IDD rules these record occurrences have all been stored as version 1 of their associated record type.
For any dictionary that has ever been processed by IDMSDIRL you can determine if duplicate record occurrences for the USER, USERGROUP, or DELUSER record exist by executing the following command through the IDD compiler.
DISPLAY RECORD DELUSER.
If no duplicate records exist you see the following information displayed as the first portion of the DELUSER record's definition.
*+ ADD *+ RECORD NAME IS DELUSER VERSION IS 1 *+ DATE CREATED IS xx/xx/xx *+ TIME LAST UPDATED IS xxxxxxxx *+ PREPARED BY '<userid>' *+ RECORD LENGTH IS 80 *+ PUBLIC ACCESS IS ALLOWED FOR ALL *+ RECORD NAME SYNONYM IS DELUSER VERSION 1 *+ COPIED INTO SUBSCHEMA IDMSSECU SCHEMA IDMSSECU VERSION 1 *+ COPIED INTO SCHEMA IDMSSECU VERSION 1 *+ . Note the presence of the text indicating that the record has been copied into schema IDMSSECU and subschema IDMSSSECU. This is an indication that there are no duplicates occurrences of any of the three problem record types. The DATE CREATED IS and TIME LAST UPDATED IS field values are immaterial.
The absence of the COPIED INTO statements indicate that one or more duplicates exist within the dictionary for these three record types. These duplicate occurrences typically cause no problems if the record types have not been incorporated into user environments. However some sites may want to remove them from any affected dictionaries. This can be accomplished by using the following procedure against each dictionary against which IDMSDIRL has been executed.
Upon completion of the above procedure use the schema compiler and delete schemas IDMSSECU and IDMSSECS from your target dictionary using the following statements.
DELETE SCHEMA IDMSSECU VER 1. DELETE SCHEMA IDMSSECS VER 1.
Finally, execute IDMSDIRL against the target dictionary using the input file provided with your current release's installation package. The following is an example of basic IDMSDIRL JCL. The JCL includes a SYSCTL file which will run in a Batch-CV mode. IDMSDIRL can also be run against the target dictionary in local mode but make sure that the dictionary is backed up before the local job is initiated.
//************************************************************* //* RUN IDMSDIRL TO LOAD DICTIONARY DEFINITIONS. * //************************************************************* //* //IDMSDIRL EXEC PGM=IDMSDIRL,REGION=0M //STEPLIB DD DISP=SHR,DSN=<yourHLQ>.IDMS.DBA190.LOADLIB // DD DISP=SHR,DSN=<yourHLQ>.IDMS190.CUSTLOAD // DD DISP=SHR,DSN=<yourHLQ>.IDMS190.PRODUCT.LOADLIB //SYSCTL DD DISP=SHR,DSN=<yourHLQ>.IDMS.SYSCTL //DCMSG DD DISP=SHR,DSN=<yourHLQ>.IDMS.SYSMSG.DDLDCMSG //SECDD DD DISP=SHR,DSN=<yourHLQ>.IDMS.SYSUSER.DDLSEC //SYS001 DD DISP=SHR,DSN=<yourHLQ>.IDMS190.PRD.CAGJDATV(DIRLDATA) //SYSLST DD SYSOUT=* //SYSUDUMP DD DUMMY //SYSJRNL DD DUMMY //SYSJRNL1 DD DUMMY //SYSJRNL2 DD DUMMY //SYSJRNL3 DD DUMMY //SYSIDMS DD * ECHO=ON DMCL=R190DMCL DBNAME=SYSDIRL /* //SYSIPT DD DUMMY