IDCAMS LISTCAT在下一步是IEFBR14时删除VSAM文件

时间:2014-10-30 14:23:48

标签: jcl vsam

我有一个要求,我需要检查VSAM文件是否存在。如果它不存在那么我需要创建它像TEST.FILE2。我的JCL是:

//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=*                    

但是一件大事正在发生。每当我执行此JCL时,即使文件已存在,STEP001也会返回返回代码004,并在STEP02中创建新文件。因此,如果我两次提交此JCL,则会同时创建一个新文件。我无法理解文件是如何被删除的。奇怪的是,如果我在没有STEP02的情况下运行JCL,那么它会将MAXCC设为0表示文件在目录中找到。

我能够通过以下代码实现我的要求,但仍想了解为什么以及如何为LISTCAT删除我的VSAM文件。

//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=*  

执行STEP01时,这是SYSPRINT:

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 

当两个步骤都执行时:

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               

ZOS390RL变量的值为z / OS 02.01.00,ZENVIR为ISPF 7.1MVS TSO。

2 个答案:

答案 0 :(得分:0)

可能有你的答案。没有想到它,因为它是一个VSAM数据集,你尝试这样做的方式是不寻常的(对我而言)。

有一种名为UCC11的产品。我认为它现在由Computer Associates销售,并称为CA-11(或某些人)。我认为您在您的网站上使用此产品或类似产品。

如果在JOB的开头执行,它将查找指定为NEW和CATLG的文件,并查看目录中是否存在同名的现有文件。如果有,则删除现有文件。

这样就不需要初始的IEFBR14步骤来删除这些文件。

我认为您正在使用此产品或类似产品。您的文件存在时会被自动删除,因此产品不知道您正在读取文件中的数据的IDCAMS步骤(即使它是SYSIN和DD *),因此在您的IDCAMS步骤之前删除您的VSAM文件跑。

将文件更改为MOD作为初始处置(MOD将添加到现有文件并创建新文件,如果不存在)将不会导致此类产品删除该文件。

对VSAM文件使用LIKE将无法从模型数据集中获取CA大小和CI-SIZE。您将获得这些的默认值,这可能会对您的程序性能产生很大影响。在JCL中定义VSAM文件时,无法指定这些值。您也不会从模型数据集中获取缓冲区值,但您可以在JCL中单独指定这些值(您没有)。

以下是LIKE为您所做的事情的说明:http://publibfp.dhe.ibm.com/cgi-bin/bookmgr/BOOKS/iea2b680/12.40?DT=20080604022956

  

以下属性从模型数据集复制到   新数据集:

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.

还有一些其他的小小的"陷阱",就像在最后一段中一样,在链接中也有详细说明。

除非你有充分的理由,否则我强烈建议在一个IDCAMS步骤中完成整个过程(如下所示)。


我怀疑它将是1.12,1.13或2.1(2.01)。现在,IEFBR14巧妙地是操作系统的一部分。

究竟为什么你会得到这种效果,我不知道。我无法访问2.1,因此无法自我调查。

IEFBR14已经改变,LIKE并不是真正用于VSAM数据集(你可能会得到很多你可能想要或可能不想要的东西的默认值),它并不是真正的"通常和"通常& #34;这样做的方式。请参阅下面的建议。

尝试将DDname添加到IDCAMS步骤,该步骤仅引用VSAM数据集。看看是否有任何改变。在IDCAMS语句中使用该DDname。看看是否有任何改变。

将所有结果带到您的Sysprogs,看看他们是否能发现任何东西。

如果没有,它将成为PMR时间:http://www-01.ibm.com/support/docview.wss?uid=swg21507639

如果您确实提出了PMR,请在收到答案后通过添加答案进行更新。


建议。

了解您网站上其他人如何完成此任务。

您是否尝试过以这种方式定义的VSAM文件?您应该LISTCAT TEST.FILE1和TEST.FILE2并进行比较。如果在JCL参考中查找LIKE,您将看到VSAM DEFINE可以执行的操作,您可以使用LIKE为JCL中定义的VSAM文件执行此操作。

除非有其他原因,否则我建议您使用IDCAMS一步完成整个过程。查看文件是否存在,使用IDCAM的IF从中测试CC,如果文件不存在则仅定义。您可以使用MODEL(例如在您的TEST.FILE2上)获取与另一个文件类似的所有内容,并覆盖您需要的任何不同内容。

如果您看一下http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.idai200%2Fdefclu.htm,您会发现IDCAMS有一些Modal Commands,它会为您提供您需要定义的所有内容(如果不存在),并执行不同的操作(设置例如,条件代码)如果是的话。

请仍然提供所需的信息。从表面上看,这是一个有趣的问题,可能有一个简单的解决方案。但即使有了解决方案,我也不认为这是你想要的。

答案 1 :(得分:0)

您想要做的事情完全可以在IDCAMS步骤中完成。如果代码大于0,您可以检查前一个操作(即LISTCAT)的返回代码并执行某些操作(如定义新的集群)。如果第二步有效,则将MAXCC设置为0以告诉您JCL这一步完成了(并让你的Ops人也知道了这一点)。

寻找IDCAMS' IF'。

相关问题