2

I have a requirement wherein I need to check if a VSAM file exists or not. If it is not present then I need to create it like TEST.FILE2. My JCL is as :

//STEP01   EXEC PGM=IDCAMS                           
//SYSPRINT DD  SYSOUT=*                              
//SYSIN    DD  *                                     
  LISTCAT ENTRIES('BRTEST.FILE1') 
/*                                                   
//STEP02 EXEC PGM=IEFBR14,COND=(4,GT)                
//DD01     DD DSN=BRTEST.FILE1,   
//            DISP=(,CATLG,DELETE),                  
//            LIKE=BRTEST.FILE2
//SYSPRINT DD  SYSOUT=*                              
//SYSOUT   DD  SYSOUT=*                    

But a stange thing is happening. Whenever I execute this JCL, STEP001 return a return code as 004 even though the file is already present, and a new file is created in STEP02. So if I submit this JCL twice, a new file is created both the times. I am not able to understand how the file is getting deleted. And the strange thing is if I run the JCL without STEP02 then it gives MAXCC as 0 saying that the file was found in catalog.

I was able to achieve my requirement by following code, but would still like to understand why and how my VSAM file gets deleted for LISTCAT.

//STEP02 EXEC PGM=IEFBR14,COND=(4,GT)                
//DD01     DD DSN=BRTEST.FILE1,   
//            DISP=(MOD,CATLG,CATLG),                  
//            LIKE=BRTEST.FILE2
//SYSPRINT DD  SYSOUT=*                              
//SYSOUT   DD  SYSOUT=*  

Here is the SYSPRINT when only STEP01 is executed:

IDCAMS  SYSTEM SERVICES                                           TIME: 03:47:44

  LISTCAT ENTRIES('BRTEST.FILE1')                                               
CLUSTER ------- BRTEST.FILE1                                                    
     IN-CAT --- CATALOG.TEST03                                                  
   DATA ------- BRTEST.FILE1.DATA                                               
     IN-CAT --- CATALOG.TEST03                                                  
   INDEX ------ BRTEST.FILE1.INDEX                                              
     IN-CAT --- CATALOG.TEST03                                                  
IDCAMS  SYSTEM SERVICES                                           TIME: 03:47:44
         THE NUMBER OF ENTRIES PROCESSED WAS:                                   
                   AIX -------------------0                                     
                   ALIAS -----------------0                                     
                   CLUSTER ---------------1                                     
                   DATA ------------------1                                     
                   GDG -------------------0                                     
                   INDEX -----------------1                                     
                   NONVSAM ---------------0                                     
                   PAGESPACE -------------0                                     
                   PATH ------------------0                                     
                   SPACE -----------------0                                     
                   USERCATALOG -----------0                                     
                   TAPELIBRARY -----------0                                     
                   TAPEVOLUME ------------0                                     
                   TOTAL -----------------3                                     
         THE NUMBER OF PROTECTED ENTRIES SUPPRESSED WAS 0                       
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0                       

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 0 

And when both steps are executed:

IDCAMS  SYSTEM SERVICES                                           TIME: 03:48:35

  LISTCAT ENTRIES('BRTEST.FILE1')                                               
IDC3012I ENTRY BRTEST.FILE1 NOT FOUND                                           
IDC3009I ** VSAM CATALOG RETURN CODE IS 8 - REASON CODE IS IGG0CLEG-42          
IDC1566I ** BRTEST.FILE1 NOT LISTED                                             
IDCAMS  SYSTEM SERVICES                                           TIME: 03:48:35
         THE NUMBER OF ENTRIES PROCESSED WAS:                                   
                   AIX -------------------0                                     
                   ALIAS -----------------0                                     
                   CLUSTER ---------------0                                     
                   DATA ------------------0                                     
                   GDG -------------------0                                     
                   INDEX -----------------0                                     
                   NONVSAM ---------------0                                     
                   PAGESPACE -------------0                                     
                   PATH ------------------0                                     
                   SPACE -----------------0                                     
                   USERCATALOG -----------0                                     
                   TAPELIBRARY -----------0                                     
                   TAPEVOLUME ------------0                                     
                   TOTAL -----------------0                                     
         THE NUMBER OF PROTECTED ENTRIES SUPPRESSED WAS 0                       
IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 4                       

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 4               

The value for ZOS390RL variable is z/OS 02.01.00 and ZENVIR is ISPF 7.1MVS TSO.

  • Thanks. An update to my question, but I think you'll have to look elsewhere for answers. The to-and-fro doesn't fit the format here well. I've upvoted the question, as it is very interesting. So, please, if you find anything out post the resolution as an Answer to your own question. It may help others in the future. – Bill Woodger Nov 04 '14 at 09:58

2 Answers2

1

May have an answer for you. Didn't think of it because it is a VSAM dataset, and the way you are trying to do it is unusual (to me).

There is/was a product called UCC11. I think it is now marketed by Computer Associates, and called CA-11 (or somesuch). I think you are using this product or something similar at your site.

If executed at the beginning of a JOB it would look for files specified as NEW and CATLG, and look to see if there was an existing file of the same name in the catalog. If there was, the existing file would be deleted.

This would obviate the need for an initial IEFBR14 step to delete such files.

I think that you are using this product, or something similar. Your file is being automatically deleted when it exists, so your IDCAMS step, which is reading data from a file (even if it is SYSIN and DD *) is not known to the product, so your VSAM file is deleted before your IDCAMS step is run.

Changing the file to MOD as the initial disposition (MOD will add to an existing file and create a new file if none exists) will not cause such a product to delete the file.

Using the LIKE for a VSAM file will not obtain the CA-size and CI-SIZE from the model dataset. You will get default values for those, which may well impact on the performance of your programs. You cannot specify these values when defining a VSAM file in JCL. You also won't get buffer values from the model dataset, but you can specify those separately in the JCL (which you haven't).

Here is a description of what LIKE does for you: http://publibfp.dhe.ibm.com/cgi-bin/bookmgr/BOOKS/iea2b680/12.40?DT=20080604022956

The following attributes are copied from the model data set to the new data set:

Data set organization
    Record organization (RECORG) or
    Record format (RECFM) 
Record length (LRECL)
Key length (KEYLEN)
Key offset (KEYOFF)
Type, PDS, PDSE, basic format, extended format, large format, or HFS (DSNTYPE)
Space allocation (AVGREC and SPACE)

Unless you explicitly code the SPACE parameter for the new data set, 
the system determines the space to be allocated for the new data
set by adding up the space allocated in the first three extents of the
model data set. Therefore, the space allocated for the new data set
will generally not match the space that was specified for the model
data set. Note that regardless of the units in which the model data
set was allocated, the new data set will be allocated in tracks. This
assumes that space was not specified on the JCL and is being picked up
from the model data set.

There are some other little "gotchas", like in the last paragraph, detailed in the link as well.

Unless you have strong reasons otherwise, I'd strongly suggest doing the whole thing in one IDCAMS step (as below).


I suspected it was going to be 1.12, 1.13 or 2.1 (2.01). IEFBR14 is, subtly, part of the OS now.

Exactly why you get this effect, I don't know. I don't have access to 2.1, so can't investigate myself.

IEFBR14 has changed, LIKE is not really intended for VSAM datasets (you'll get a lot of default values for things you may or may not want), it's not really a "usual" way to do this. See Suggestions below.

Try adding a DDname to your IDCAMS step which just references the VSAM dataset. See if that changes anything. Use that DDname in an IDCAMS statement. See if that changes anything.

Take all your results to your Sysprogs, and see if they can spot anything.

If not, it'll be PMR-time: http://www-01.ibm.com/support/docview.wss?uid=swg21507639

If you do raise a PMR, please update by adding an Answer with the resolution once you receive it.


Suggestions.

Find out how this task is done by other people at your site.

Have you tried using the VSAM file you have defined in that way? You should LISTCAT TEST.FILE1 and TEST.FILE2 and compare. If you look up LIKE in the JCL Reference, you will see that there are things which a VSAM DEFINE can do which you can't do for a VSAM file defined in the JCL using LIKE.

Unless there is some reason otherwise, I'd suggest you do the whole thing in one step with IDCAMS. See if the file exists, use IDCAM's IF to to test the CC from that and only DEFINE if the file does not exist. You can use a MODEL (for instance on your TEST.FILE2) to get everything which is similar to another file, and just override anything different that you need.

If you have a look here, http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.idai200%2Fdefclu.htm, you will find a number of Modal Commands for IDCAMS which will give you everything you need to define if it is not there, and do something different (set the Condition Code, for instance) if it is.

Please still supply the requested information. It is an interesting question on the face of it, which may have a simple solution. But even with a solution, I don't think it is what you want.

Bill Woodger
  • 12,968
  • 4
  • 38
  • 47
1

What you want to do can be done entirely in the IDCAMS step. You can inspect the return code from a previous operation (ie, the LISTCAT) and do something (like define a new cluster) if the code is greater than 0. If the 2nd step works, then set the MAXCC to return 0 to tell your JCL that this step completed OK (and to let your Ops folks know this too).

Look for the IDCAMS 'IF'.

Dave Nagy
  • 21
  • 7