Finding duplicate members in multiple PDS or PDSE files

book

Article ID: 223661

calendar_today

Updated On:

Products

CA Datacom CA Datacom/AD CA Datacom/DB CA PDSMAN CA Disk Backup and Restore - MVS CA SYSVIEW Performance Management

Issue/Introduction

What to do when a wrong PDS member is used

Upgrading a software version or applying maintenance fixes often results in new versions of PDS control members or load modules. Because different companies have deployment methodologies, a particular PDS member may be placed into a different library than expected, and a software function could fail because a wrong version of the PDS member was used.

This article will show how to use the SYSVIEW, DISK and PDSMAN products to help identify the duplicate members.

Cause

Members can be found in unexpected libraries when methodologies change, resulting in a combination of old-style and new-style files being used together. Another possibility is that a single member is copied to a special testing PDS, or to a commonly-used PDS for special usage, and is forgotten when a new upgrade is made. These–and many other–circumstances can result in duplicate members being found in multiple libraries in a list of concatenated datasets, causing confusion or errors in processing.

Resolution

Using SYSVIEW when a job or task is currently running (like a CICS region, or a database task)

While a job or task is running, you can use SYSVIEW to review different files allocated to that job/task, and you can find a specific module or all duplicate modules.

In SYSVIEW, use these commands once you know which DD statement you want to query:

Command Description/Notes
DDLIST ddname,asid Where ddname is the DD to process, and asid is the job/task name.
WHERE member Where member is the name of the PDS member you want to find
DUPLICAT This will show all members that exist in two or more PDS files allocated to the DD name

For example, to find any duplicate load modules in the DFHRPL for a CICS region, here is the output of my command:

DDLIST DFHRPL,DIDECICS;DUPLICAT (the semi-colon allows these two commands to be stacked and executed serially):

Here you can see that the DBCVTPR member is in two different loadlibs: IDLT.DIDECICS.MOD.LOAD and DCMPS.DBC150.DEV.CAB1LOAD.

If I want to find out where the DBSIDPR module is found in the CICS region DFHRPL, I would issue

DDLIST DFHRPL,DIDECICS;WHERE DBSIDPR

This shows that the DBSIDPR module is found only in IDLT.DIDAUPG.DB151.CUSLIB.

When a batch job has failed and you have the list of files

If a batch job has failed, and you suspect that a member has come from the wrong PDS, there are two different utilities with samples below that show the duplicates.

With the PDSMAN product

Using the same 17 loadlibs as found in the DFHRPL above, here is a JCL example:

//DUPRPT0  EXEC PGM=PDSM27                                        
//PDSMRPT  DD SYSOUT=*                                            
//PDSMPDS  DD DISP=SHR,DSN=CICSSYS.CTS560.GA.CICS.RSU2106.SDFHLOAD
//         DD DISP=SHR,DSN=IDLT.CICSLOAD                          
. . .                      
//         DD DISP=SHR,DSN=IDLT.BL1100.I090325.CAILIB             

Running this without parms will produce an overall report of duplicate members (left side of the report shown):

PDSMAN       r7.70                                    DUPLICATE MEMBER REPORTING UTILITY...
** PDSM27 **   CA32                                                                        
                                                                                         
Member    Update Date/Time   Vers.  Job Name S   Volser  Found In Library                
                                                                                         
DBCVTPR   No Control Information Available       IDL001  IDLT.DIDECICS.MOD.LOAD          
DBCVTPR   No Control Information Available       DCMSPC  DCMPS.DBC150.DEV.CAB1LOAD        
                                                                                         
DBURSPR   No Control Information Available       DCMSP8  IDLT.DIDAUPG.DB151.CUSLIB        
DBURSPR   No Control Information Available       DCMSPD  DCMPS.DATCM151.DEV.CABDLOAD
DBUSRPR No Control Information Available DCMSP6 DCMLV1.JOHDO10.TEST.LOADLIB      

                                                                                         
DBURT002  No Control Information Available       IDL003  IDLT.DIDECICS.FIX.LOAD          
DBURT002  No Control Information Available       DCMSP8  IDLT.DIDAUPG.DB151.CUSLIB        
. . .                                                                                    

With the CA Disk product

//        JCLLIB ORDER=YOUR.CADISK.PROCLIB                    
//*                                                      
//REPORT1 EXEC  DMS                              
//SYSIN   DD  *                        
   FIND DSN=DSN=CICSSYS.CTS560.GA.CICS.RSU2106.SDFHLOAD  
   FIND DSN=DSN=IDLT.CICSLOAD                            
. . .  
   FIND DSN=DSN=IDLT.BL1100.I090325.CAILIB               
     REPORT PO2REF                                       
/*                                                       

This will produce a report like this (left side):

2021.253  SEP 10, 2021                PDS CROSS REFERENCE FOR MEMBERS IN TWO OR MORE DATA SETS ... 
FRIDAY     2.47 PM                                                                             
                                                                                               
 MEMBER   DATA SET NAME                                 VOLUME    DATA SET NAME                
--------  --------------------------------------------  ------    -----------------------------
DBCVTPR   DCMPS.DBC150.DEV.CAB1LOAD                     DCMSPC    IDLT.DIDECICS.MOD.LOAD       ...
DBURSPR   DCMPS.DATCM151.DEV.CABDLOAD                   DCMSPD    IDLT.DIDAUPG.DB151.CUSLIB ...
DCMLV1.JOHDO10.TEST.LOADLIB DCMSP6

DBURT002  IDLT.DIDAUPG.DB151.CUSLIB                     DCMSP8    IDLT.DIDECICS.FIX.LOAD ...
. . .

When a load module or program object could be in multiple STEPLIB or Linklist files

When a load module could be in the STEPLIB/JOBLIB of a job as well as in the Linklist, this could cause confusion and require a great deal of effort to search all of the Linklist-defined loadlibs. However, using the PDSMAN utility, you can easily add the Linklist into the process without specifying each loadlib separately. In the test system used to produce this sample output, there are 125 Linklist-defined loadlibs, but only one DD statement is needed. Because of the number of files, there could be a much higher likelihood of duplicates, so it it recommended to specify one or more distinct member names to search.

//DUPRPT1  EXEC PGM=PDSM27                                        
//PDSMRPT  DD SYSOUT=*                                            
//PDSMPDS  DD DISP=SHR,DSN=CICSSYS.CTS560.GA.CICS.RSU2106.SDFHLOAD
//         DD DISP=SHR,DSN=IDLT.CICSLOAD                          
. . .                      
//         DD DISP=SHR,DSN=IDLT.BL1100.I090325.CAILIB
//LINKLIST DD DUMMY 
//PDSMSEL  DD *              
DB*
DD*
DQ*

/*                             

Running this step produces:

PDSMAN       r7.70                                    DUPLICATE MEMBER REPORTING UTILITY  10 September 2021.253
** PDSM27 **   CA11                                                                                            
                                                                                                               
Member    Update Date/Time   Vers.  Job Name S   Volser  Found In Library                              Concat  
                                                                                                               
DBESPPR   No Control Information Available       MVCA11  SYS2.CA11.LINKLIB                             LINKLIST
DBESPPR   No Control Information Available       LNKD01  SYSDEV.DATACOM.SVCS.LINKLIST                  LINKLIST
                                                                                                               
DBSSIPR   No Control Information Available       DCMSP6  DCMLV1.JOHDO10.TEST.LOADLIB                   PDSMPDS 
DBSSIPR   No Control Information Available       MVCA11  SYS2.CA11.LINKLIB                             LINKLIST
DBSSIPR   No Control Information Available       LNKD01  SYSDEV.DATACOM.SVCS.LINKLIST                  LINKLIST
. . .

In this excerpt, you can see that member DBESPPR exists in two different Linklist loadlibs, and member DBSSIPR exists in two Linklist loadlibs as well as DCMLV1.JOHDO10.TEST.LOADLIB.

Additional Information

The above tools can help you answer the questions about where a particular module or PDS member is found, so that you can more quickly resolve errors due to mixed versions, wrong settings, etc. 

Please refer to the CA PDSMAN® PDS LIBRARY MANAGEMENT 7.7 documentation for the PDSM27 program for Duplicate Member Reporting.

Please refer to the CA DISK™ BACKUP AND RESTORE 12.5 documentation for the use of the DMS proc and the reporting functions.

Please refer to the CA SYSVIEW® PERFORMANCE MANAGEMENT 16.0 documentation for the DDLIST command.

As always, please contact Broadcom support for the above products if you have further questions.

Attachments