How to remove duplicate IDMSDIRL record occurrences

Document ID : KB000048283
Last Modified Date : 14/02/2018
Show Technical Document Details

Description:

How to remove duplicate IDMSDIRL record occurrences

Solution:

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 'CULL DBA'                                      
*+       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.

  1. Using the IDD compiler, issue the DISPLAY RECORD DELUSER command and evaluate the resulting display as described above.
  2. If the COPIED INTO clauses exist you are finished and no duplicate record occurrences exist in the target dictionary.
  3. If the COPIED INTO clauses do not exist use the SCHEMA compiler and issue the following command.
    DISPLAY SCHEMA IDMSSECU AS SYN.
  4. Within the generated syntax, modify the schema name from IDMSSECU to XXXXSECU and run the compiler to create new schema XXXXSECU.
  5. Upon successful completion of the SCHEMA compiler to add schema XXXXSECU execute the SCHEMA compiler with the following command.
    DELETE SCHEMA XXXXSECU
  6. Upon successful completion of the SCHEMA compiler go back to Step 1.

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=MEN.C1300.TECHDC70.DBA185.LOADLIB       
//          DD  DISP=SHR,DSN=IDMS185.CUSTLOAD                 
//          DD  DISP=SHR,DSN=IDMS185.PRODUCT.LOADLIB             
//SYSCTL   DD DISP=SHR,DSN=MEN.C1300.TECHDC70.SYSCTL                 
//DCMSG    DD DISP=SHR,DSN=MEN.C1300.TECHDC70.SYSMSG.DDLDCMSG        
//SECDD    DD DISP=SHR,DSN=MEN.C1300.TECHDC70.SYSUSER.DDLSEC         
//SYS001   DD DISP=SHR,DSN=IDMSMSPS.IDMS185.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=R185DMCL                                                        
DBNAME=SYSDIRL                                                       
/*                                                                   
//SYSIPT       DD    DUMMY