2014-10-30 4 views
2

У меня есть требование, в котором мне нужно проверить, существует ли файл VSAM или нет. Если его нет, мне нужно создать его как TEST.FILE2. Мой JCL таков:IDCAMS LISTCAT удаляет файл VSAM, когда следующий шаг IEFBR14

//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 дважды, новый файл будет создан как раз. Я не могу понять, как файл удаляется. И странно, если я запустил JCL без STEP02, тогда он дает MAXCC как 0, говорящий, что файл был найден в каталоге.

Я смог выполнить мое требование, следуя коду, но все равно хотел бы понять, почему и как мой файл VSAM удаляется для 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=* 

Вот SYSPRINT, когда выполняется только Step01:

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 является г/OS 02.01.00 и ZENVIR - ISPF 7.1MVS TSO.

+0

Спасибо. Обновление моего вопроса, но я думаю, вам придется искать в другом месте ответы. Здесь и здесь нет подходящего формата. Я поднял вопрос, так как это очень интересно. Поэтому, пожалуйста, если вы найдете что-нибудь, опубликуйте резолюцию в качестве ответа на свой вопрос. Это может помочь другим в будущем. –

ответ

0

Может быть, у вас есть ответ. Не думал об этом, потому что это VSAT-набор данных, и то, как вы пытаетесь это сделать, необычно (для меня).

Существует/был продукт UCC11. Я думаю, что теперь он продается Computer Associates и называется CA-11 (или somesuch). Я думаю, вы используете этот продукт или что-то подобное на своем сайте.

Если он был выполнен в начале задания, он будет искать файлы, указанные как NEW и CATLG, и посмотреть, существует ли в каталоге существующий файл с таким же именем. Если бы это было, существующий файл был бы удален.

Это избавит вас от необходимости выполнить начальный шаг IEFBR14 для удаления таких файлов.

Я думаю, что вы используете этот продукт, или что-то подобное. Ваш файл автоматически удаляется, когда он существует, поэтому ваш шаг IDCAMS, который считывает данные из файла (даже если это SYSIN и DD *), не известен этому продукту, поэтому ваш файл VSAM удаляется до того, как ваш шаг IDCAMS запустить.

Изменение файла в MOD как исходное расположение (MOD добавит к существующему файлу и создаст новый файл, если он не существует) не приведет к удалению такого файла.

Использование LIKE для файла VSAM не будет получать размер CA и CI-SIZE из набора данных модели. Вы получите значения по умолчанию для тех, которые могут повлиять на производительность ваших программ. Вы не можете указывать эти значения при определении файла VSAM в JCL. Вы также не получите значения буфера из набора данных модели, но вы можете указать их отдельно в 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. 

Есть некоторые другие маленькие «gotchas», как в последнем абзаце, подробно описаны в ссылке.

Если у вас нет веских причин, я бы настоятельно предложил сделать все это на одном шаге IDCAMS (как показано ниже).


Я подозревал, что это будет 1.12, 1.13 или 2.1 (2.01). Теперь IEFBR14 является частью ОС.

Именно поэтому вы получаете этот эффект, я не знаю. У меня нет доступа к 2.1, поэтому я не могу расследовать себя.

IEFBR14 изменился, LIKE на самом деле не предназначен для наборов данных VSAM (вы получите множество значений по умолчанию для вещей, которые вы можете или не хотите), это не обычный способ сделать это. См. Предложения ниже.

Попробуйте добавить имя DD на ваш шаг IDCAMS, который просто ссылается на набор данных VSAM. Посмотрите, что это ничего не изменит. Используйте это имя DD в заявлении IDCAMS. Посмотрите, что это ничего не изменит.

Примите все ваши результаты к вашим Sysprogs и посмотрите, не могут ли они что-либо обнаружить.

Если нет, то это будет PMR времени: http://www-01.ibm.com/support/docview.wss?uid=swg21507639

Если вы поднять PMR, пожалуйста, обновите путем добавления ответа с разрешением, как только вы получите его.


Предложения.

Узнайте, как эта задача выполняется другими людьми на вашем сайте.

Вы пытались использовать файл VSAM, который вы определили таким образом? Вы должны LISTCAT TEST.FILE1 и TEST.FILE2 и сравнить. Если вы посмотрите LIKE в Справочнике JCL, вы увидите, что есть вещи, которые может сделать VSAM DEFINE, что вы не можете сделать для файла VSAM, определенного в JCL, используя LIKE.

Если нет какой-либо другой причины, я предлагаю вам сделать все за один шаг с помощью IDCAMS. Посмотрите, существует ли файл, используйте IF IFCAM для проверки CC из этого и только DEFINE, если файл не существует. Вы можете использовать МОДЕЛЬ (например, на вашем TEST.FILE2), чтобы получить все, что похоже на другой файл, и просто переопределить все, что вам нужно.

Если вы посмотрите здесь, http://pic.dhe.ibm.com/infocenter/zos/v1r13/index.jsp?topic=%2Fcom.ibm.zos.r13.idai200%2Fdefclu.htm, вы найдете ряд Modal Commands для IDCAMS, который даст вам все необходимое, чтобы определить, если она не существует, и сделать что-то другое (установить код условия, к примеру) если это.

Просьба предоставить запрошенную информацию. Это интересный вопрос на первый взгляд, который может иметь простое решение. Но даже с решением я не думаю, что это то, что вы хотите.

0

Что вы хотите сделать, можно сделать полностью на шаге IDCAMS. Вы можете проверить код возврата из предыдущей операции (например, LISTCAT) и сделать что-то (например, определить новый кластер), если код больше 0. Если второй шаг работает, установите MAXCC для возврата 0, чтобы сообщить JCL, что этот шаг завершился ОК (и чтобы ваши операторы тоже знали об этом).

Ищите IDCAMS 'IF'.