Вт, 19.03.2024, 07:34
Приветствую Вас Гость | RSS
Главная | Каталог статей | Регистрация | Вход
Форма входа
Логин:
Пароль:
Поиск

Меню сайта

Категории раздела
Общие статьи [18]
Переводные статьи [6]
Примеры [8]
Эмуляторы [2]
Linux [3]
Презентации по IBM DS [6]
О.Ю.Еремин. Материалы по технологиям хранения и восстановления информации.

Наш опрос
О регистрации на сайте с помощью соцсетей.
Всего ответов: 24

Метки
EGL ODM бизнес правила программирование SOA arcati блоги журналы Каталог мейнфреймы журнал z/os Freeware VM bigdata nosql zOS MVS OS SLES zLinux мейнфрейм Хабрахабр 50лет документы хранилище Java EE liberty WebSphere z/VM Share history GitHub OS/VS S/379 сообщение Форум DFSORT Hercules VSAM отчётность Linux Analytics Accelerator Netezza IMS IBM IDC продажа CHKPT GSam XRST гипервизор KVM Shutdown #hollywar mainframe Вакансии Санкт-Петербург видео Выступления Dis нагрузка пример Assembler VM/ESA НИЦЭВТ Docker Sie Kubernetes OpenShift Environment RedBook RedHat рынок LHI vs XR instruction to clear GPR z Seies CPU performance семинар впечатление доступность ЦБ цены аутсорсинг BMC CMS ZVM санкции Rockwell история z13 мобильность DB2 Java Coupling Facility Parallel Sysplex WebSphere AS MVT ОС ЕС ссср Tape VTL Вакансия БЛОГ Линукс Новое статьи Люксофт Польша Работа Москва

Статистика

Главная » Статьи » Мейнфреймы » Примеры


динамическое построение JCL проверки и бекапа ICF каталогов

 
Ну, вот, к примеру, бекап ICF каталогов
Генерирует джобик с VERIFY, EXAM, DIAGNOSE,и бекап двумя способами - IDCAMS и ADRDSSU
Те каталогим, которые не надо бекапировать, указаны в шаге PARSE1
Комментариями не изобилует, конечно...
В конце динамически построенный джобик передаётся в JES.
 
 
 
Цитата
//*****************************************************************/
//*
//* GENERATE JOBS FOR USER CATALOGS BACKUP
//* FOUND SEARCH ALGORYTHM:
//*  1) LISTCAT UCAT - GET A LIST OF USER CATALOGS
//*  2) PARSE STEPS EXTRACT USER CATALOG NAMES
//*  3) GENERATE A JOB WITH STEPS FOR EACH USER CATALOG
//*
//*****************************************************************/
//*         LIST USER CATALOG CONNECTIONS TO DATASET              */
//*****************************************************************/
//*
//LISTUCAT EXEC PGM=IDCAMS
//SYSPRINT  DD SYSOUT=*
//UCATDD   DD DSN=&&UCATS,DISP=(NEW,PASS),
//            SPACE=(TRK,(1,1),RLSE),
//            DCB=(RECFM=VB,LRECL=125,BLKSIZE=629)
//SYSIN     DD *
    LISTCAT UCAT OFILE(UCATDD)
/*
//PARSE1   EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,DELETE),DSN=&&UCATS
//SORTOUT  DD DISP=(NEW,PASS,DELETE),DSN=&&LEVEL1,
//            SPACE=(TRK,(1,1),RLSE),
//            DCB=(LRECL=44,RECFM=FB,BLKSIZE=4400)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY,VLSCMP
  INCLUDE COND=(6,11,CH,EQ,C'USERCATALOG',AND,
                22,44,SS,NE,C'CATALOG.MERGEBAS.TEMPCAT',AND,
                22,44,SS,NE,C'CATALOG.MVSICFM.VD9ECAT')
  SORT FIELDS=(22,44,CH,A)
  OUTFIL BUILD=(22,44),VTOF
/*
//PARSE2   EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL1
//CONVOUT  DD DISP=(NEW,PASS,DELETE),DSN=&&LEVEL2,
//            SPACE=(TRK,(1,1),RLSE),
//            DCB=(LRECL=92,RECFM=FB,BLKSIZE=920)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  INREC BUILD=(1,44,C')  -')
  OPTION COPY,VLSCMP
  OUTFIL FNAMES=CONVOUT,VTOF,VLTRIM=X'40',
  BUILD=(1,48,SQZ=(SHIFT=LEFT),1,44)
/*
//PARSE3   EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL1
//CONVOUT  DD DISP=(NEW,PASS,DELETE),DSN=&&LEVEL3,
//            SPACE=(TRK,(1,1),RLSE),
//            DCB=(LRECL=93,RECFM=FB,BLKSIZE=930)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  INREC BUILD=(1,44,C'(+1),')
  OPTION COPY,VLSCMP
  OUTFIL FNAMES=CONVOUT,VTOF,VLTRIM=X'40',
  BUILD=(1,49,SQZ=(SHIFT=LEFT),1,44)
/*
//CRGDG    EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL2
 
//SORTOUT  DD DISP=(NEW,PASS,DELETE),DSN=&&LISTJOBS,
//            DCB=(LRECL=80,RECFM=FB,BLKSIZE=27920),
//            SPACE=(CYL,(2,2),RLSE)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80,
 HEADER1=(C'//BKPCATLG JOB  CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1),',80:X,/,
  C'//         NOTIFY=&SYSUID',80:X,/,
  C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* JOB TO BACKUP AN ICF USER CATALOGS',80:X,/,
  C'//* CUSTOMIZE WITH THE CORRECT DATACLAS',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//         SET HLQ=YYYDUMP',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X,/,
  C'//* JOB TO CREATE A NEW GDG GROUP',80:X,/,
  C'//',60C'*',80:X,/,
  C'//NEWGDG01 EXEC PGM=IDCAMS',80:X,/,
  C'//SYSPRINT DD SYSOUT=*',80:X,/,
  C'//SYSIN    DD   *',80:X),
 BUILD=(C' ',2X,C'DEFINE GDG(NAME(YYYDUMP.',1,48,C' -',80:X,/,
        C'         NOEMPTY SCRATCH LIMIT(3))',80:X),
 TRAILER1=(C' ',2X,C'DEFINE GDG(NAME(YYYDUMP.ADRDCTG.BCK) -',80:X,/,
           C'         NOEMPTY SCRATCH LIMIT(3))',80:X,/,
           C' ',2X,C'DEFINE GDG(NAME(CSP.CATALOG.YYYDUMP) -',80:X,/,
           C'         NOEMPTY SCRATCH LIMIT(3))',80:X,/,
           4X,C'IF MAXCC>0 THEN SET MAXCC=0',80:X,/,
           C'/*',80:X)
/*
//MAKEJCL1 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL2
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80,
 HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING VERIFY STEPS',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
  BUILD=(C'//VRFY',SEQNUM,3,ZD,C'  EXEC PGM=IDCAMS',80:X,/,
         C'//VRFY',SEQNUM,2,ZD,C'   DD  DISP=SHR,DSN=',49,44,80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//SYSIN    DD   *',80:X,/,
         C'   VERIFY FILE(VRFY',SEQNUM,2,ZD,C')',80:X),
  TRAILER1=(C'/*',80:X)
/*
//MAKEJCL2 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL2
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80,
  HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING DIAGNOSTICS STEPS',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
  BUILD=(C'//DIAG',SEQNUM,3,ZD,C'  EXEC PGM=IDCAMS,',
         C'COND=(4,LT,VRFY',SEQNUM,3,ZD,C')',80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//DIAG',SEQNUM,2,ZD,C'   DD   DISP=SHR,DSN=',49,44,80:X,/,
         C'//SYSIN    DD   *',80:X,/,
         C'   DIAGNOSE ICFCATALOG INFILE(DIAG',SEQNUM,2,ZD,C')',80:X),
  TRAILER1=(C'/*',80:X)
/*
//MAKEJCL3 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL2
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80,
  HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING EXAMINATION STEPS',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
  BUILD=(C'//EXAM',SEQNUM,3,ZD,C'  EXEC PGM=IDCAMS,',
         C'COND=(4,LT,DIAG',SEQNUM,3,ZD,C')',80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//EXAM',SEQNUM,2,ZD,C'   DD   DISP=SHR,DSN=',49,44,80:X,/,
         C'//SYSIN    DD   *',80:X,/,
         C'  EXAMINE NAME(',1,48,80:X,/,
         C'    INDEXTEST DATATEST ERRORLIMIT(10)',80:X),
  TRAILER1=(C'/*',80:X)
/*
//MAKEJCL4 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LEVEL3
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  INCLUDE COND=(50,44,SS,NE,C'CATALOG.YYYDUMP')
  OUTFIL REMOVECC,LINES=80,
  HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING EXPORT STEPS (PENDING| DO NOT RUN|)',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
  BUILD=(C'//EXPRT',SEQNUM,2,ZD,C'  EXEC PGM=IDCAMS,',
         C'COND=(4,LT,EXAM',SEQNUM,3,ZD,C')',80:X,/,
         C'//BCKCPY   DD DSN=&HLQ..',1,49,80:X,/,
         C'//            VOL=SER=XXXXXX,',80:X,/,
         C'//            DISP=(NEW,CATLG,DELETE),',80:X,/,
         C'//            SPACE=(CYL,(1,5),RLSE)',80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//SYSIN    DD *',80:X,/,
         C'  EXPORT ',50,44,C' -',80:X,/,
         C'         OUTFILE(BCKCPY)   -',80:X,/,
         C'         TEMPORARY',80:X),
  TRAILER1=(C'/*',80:X)
/*
//*      C'//            DATACLAS=SCRATCH,',80:X,/,
//MAKEJCL5 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,DELETE),DSN=&&LEVEL3
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  INCLUDE COND=(50,44,SS,EQ,C'CATALOG.YYYDUMP')
  OUTFIL REMOVECC,LINES=80,
  HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING EXPORT CATALOG.YYYDUMP ONLY',80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
  BUILD=(C'//EXPRTYYY',C'  EXEC PGM=IDCAMS,',
         C'COND=(4,LT)',80:X,/,
         C'//BCKCPY      DD DSN=CSP.CATALOG.YYYDUMP(+1),',80:X,/,
         C'//            VOL=SER=XXXXXX,',80:X,/,
         C'//            DISP=(NEW,CATLG,DELETE),',80:X,/,
         C'//            SPACE=(CYL,(1,5),RLSE)',80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//SYSIN    DD *',80:X,/,
         C'  EXPORT ',50,44,C' -',80:X,/,
         C'         OUTFILE(BCKCPY)   -',80:X,/,
         C'         TEMPORARY',80:X),
  TRAILER1=(C'/*',80:X)
/*
//*      C'//            DATACLAS=SCRATCH,',80:X,/,
//MAKEJCL6 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,DELETE),DSN=&&LEVEL1
//SORTOUT  DD DISP=(MOD,PASS),DSN=&&LISTJOBS
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  INCLUDE COND=(1,44,SS,NE,C'CATALOG.YYYDUMP')
  OUTFIL REMOVECC,LINES=80,
  HEADER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING ADRDSSU BACKUP ALL UCATS EXCEPT CATALOG.YYYDUMP',
  80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X),
 HEADER2=(C'//ADRBCK   EXEC PGM=ADRDSSU,REGION=0M',80:X,/,
         C'//SYSPRINT DD SYSOUT=*',80:X,/,
         C'//OUTDD    DD DSN=YYYDUMP.ADRDCTG.BCK(+1),',80:X,/,
         C'//            VOL=SER=XXXXXX,',80:X,/,
         C'//            DISP=(NEW,CATLG,DELETE),',80:X,/,
         C'//            SPACE=(CYL,(50,10),RLSE)',80:X,/,
         C'//SYSIN    DD   *',80:X,/,
         C' DUMP DATASET(INCLUDE( -',80:X),
  BUILD=(C' ',20X,1,44,C' -',80:X),
  BUILD=(C' ',20X,1,44,C' -',80:X),
  TRAILER1=(C' ',20X,C')) OUTDDNAME(OUTDD)',80:X,/,
            C'/*',80:X)
/*
//MAKEJCL7 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,PASS),DSN=&&LISTJOBS
//SORTOUT  DD DISP=(NEW,PASS,DELETE),DSN=&&LSTJOB1,
//            DCB=(LRECL=80,RECFM=FB,BLKSIZE=27920),
//            SPACE=(CYL,(2,2),RLSE)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80,
  TRAILER1=(C'//',60C'*',80:X,/,
  C'//*',80:X,/,
  C'//* STARTING COMPCODE PROGRAM TO MAIL COMPETITION CODES',
  80:X,/,
  C'//*',80:X,/,
  C'//',60C'*',80:X,/,
  C'//COMPCODE EXEC PGM=COMPCODE,COND=EVEN',80:X,/,
  C'//STEPLIB  DD DISP=SHR,DSN=YYYLIB.LINKLIB',80:X,/,
  C'//NOTIFY   DD   DSN=YYYLIB.MAILLIST,DISP=SHR',80:X,/,
  C'//',80:X)
/*
//MAKEJCL8 EXEC PGM=SORT
//SORTIN   DD DISP=(OLD,DELETE),DSN=&&LSTJOB1
//SORTOUT  DD SYSOUT=(*,INTRDR)
//SYSOUT   DD SYSOUT=*
//SYSIN    DD *
  OPTION COPY
  OUTFIL REMOVECC,LINES=80
/*
 
 
Категория: Примеры | Добавил: ggv (12.10.2015)
Просмотров: 3427 | Комментарии: 6


Всего комментариев: 6
1 akost  
0
О! Видимо, побалуюсь на досуге с этим примерчиком!...

2 ggv  
копировал кусками с экрана, так что если что не так - дам джобик целиком.
продолжение будет по другим темам использования DFSORT
Само собой, надо поправить HLQ и VOL=SER на то, что нужно.

3 zrock  
Не о DFSORT, а боле о каталогах, что напрямую является одним из наших продуктов. От разработчиков. Просто информация к размышлению.

"In the absence of a product like Catalog RecoveryPlus (CR+), the user would need to determine all of the catalogs that they need to back up.

The IDCAMS LISTCAT UCAT is the right way to go about identifying those catalogs.
 As far as everything they did after that - I would not have doneit that way.  However if it works, even when the catalog environmentchanges, then it is not bad  They are using SORT to parse the output from the LISTCAT UCAT and build the IDCAMS EXPORT control cards.  I might have done something different that seems more intuitive to me, such as using REXX, but this is really fairly clever.

However, any backup run with IDCAMS EXPORT (rather than a productsuch as CR+) is at risk for not getting a complete backup if the catalog sequence set index pointer is broken.  IDCAMS relies upon the correct structural integrity of the index to traverse the catalog and read all of the records to be backed up.  If the chain is broken, it is possible that not all catalogs will be backed up.  They are generating the IDCAMS EXAMINE INDEXTEST that will tell them if they have a problem with the index, but they cannot necessarily obtain a reliable backup.

With a product like CR+, we can set up the JCL/control cards onetime using BACKUP BCS(**) and CR+ will go find all of the connected user catalogs and back them up.  We do not have to regenerate our catalog backup job every time we want to run it in order to back up all existing catalogs.  We could also add keywords to exclude specific catalogs if we wanted to and they would always be excluded.

CR+ will also more than likely always be able to back up thecatalog even if there is a problem with the index chaining.  There are few times when CR+ cannot back up a catalog, and if we couldn’t, then nothing else could either.  For those situations, we have a special keyword, EXCP-MODE which enables us to go to the tracks on the volume to back up as much data as possible. "


Если будут вопросы, с удовольствием отвечу или узнаю у разработчиков.

4 ggv  
без сомнения, CR+ стоящий продукт. Если бы он был - то для экспериментов и изучения DFSORT выбрали бы другую тему.

5 zrock  
Смею ли я предположить, будучи несведущ во многих деталях российской z-действительности, что наличие ISV продуктов и большинства  "IBM chargeable products" является редким исключением? И что управление z-environment происходит вот таким "подручными" (извините за быть может неудачное слово) средствами?

6 ggv  
ну да, в основном так и есть, cbttape нашефсё...
хотя у всех по-разному наверняка.
Это не означает, что утилиту невозможно купить, но затраты надо обосновать...

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Яндекс.Метрика