Reference links
Utility and parameter references used throughout the library. Check the documentation that matches the installed product and z/OS release before submitting a change.
z/OS · Systems Engineering · Knowledge Base
Everything I actually use running production z/OS — the internals that explain why systems behave the way they do, the lifecycle work of keeping software current, the runbooks and JCL I reach for mid-incident, and the tools I've built to make all of that faster.
Systems programming is broader than keeping production incidents under control. The work also includes understanding how z/OS is configured, how system software is installed and serviced, how releases are assessed and upgraded, how obsolete products are removed, and how to collect evidence when something fails. This knowledge base is organized around those disciplines rather than around one support role.
The detailed runbooks and reference libraries remain because production diagnosis is part of the job. They now sit alongside lifecycle and configuration material so the site reflects the full engineering workflow.
All examples are generalized. Client names, host names, data-set conventions, user IDs, IP addresses, product license information and other environment-specific details are deliberately excluded.
Section 3
Production problem determination and day-to-day system-programming references in one place. Use the three views below to move between incident runbooks, reusable JCL and the MVS command library without treating them as separate disciplines.
Diagnostics & Operations · Incident Diagnostics
Symptom → Investigation → Commands → Interpretation → Resolution. Each entry is written the way I'd want to read it mid-incident: skimmable, command-heavy, opinionated about what the output actually means.
Use as a diagnostic framework, not as a substitute for your site's procedures. Display commands and evidence collection are emphasized. Any change, FORCE, restart, SETXCF, CHNGDUMP, JES2 action or storage/catalog recovery must follow the authorization and change process of the target environment.
A job is ACTIVE far beyond its normal window. The runbook separates legitimate work from CPU loop, ENQ wait, I/O delay, WLM delay, operator wait, subsystem wait and scheduler dependency.
SDSF ST / DA Job status, step, CPU, elapsed, EXCP and delay indicators D A,L Confirm address space and ASID D GRS,C Current ENQ contention D GRS,ANALYZE,DEPENDENCY Wait/hold dependency chains when GRS is involved D R,L Outstanding operator replies / WTORs RMF Monitor III Delay, CPU, device and service-class evidence
Operational caution: Do not call a job “hung” only because elapsed time is high. Prove whether it is consuming CPU, doing I/O, waiting for a resource, or being delayed by policy.
CPU is high on an LPAR or one address space dominates dispatch time. The objective is to separate expected workload, WLM effects, SRB-heavy system activity and a genuine loop before taking disruptive action.
SDSF DA / ST Rank active work by CPU and observe deltas RMF Monitor III CPU Activity, Address Space and Delay views D A,L Confirm jobname/ASID and current state D M=CPU Processor configuration/state D WLM Review active WLM policy information where useful Product-specific STATUS Check whether the high-CPU subsystem reports internal work
Operational caution: Do not cancel the highest CPU consumer merely because it is first in the list. The system can be CPU-constrained while the top consumer is valid business work.
Multiple jobs or subsystems are waiting on a serialized resource. The key is to find the holder, understand why it is holding the resource, and determine whether the serialization is expected, pathological or a design problem.
D GRS,C Current contention D GRS,RES=(qname,rname) Resource detail D GRS,ANALYZE,DEPENDENCY Dependency analysis SDSF DA / ST Holder/waiter CPU and elapsed state OPERLOG / SYSLOG Messages around the start of contention ENQDIAG Historical recurrence/trend when available
Operational caution: Never issue destructive action against a holder until you know what the resource protects. Some ENQs guard catalogs, system data or subsystem integrity.
New started tasks, TSO users or batch address spaces cannot start because address-space identifiers are exhausted or approaching the system limit. The investigation distinguishes peak concurrency from a leak/reuse problem.
D A,L Active address spaces D IPLINFO Identify active system configuration / IEASYS context SDSF DA Count and classify active work ASIDDIAG Trend usage by job/STC when available SYSLOG / OPERLOG Search ASID/MAXUSER-related messages
Operational caution: Do not treat raising a limit as the first response to monotonic growth. A leak will eventually consume the higher ceiling as well.
The system is short of real storage, paging increases or auxiliary storage becomes constrained. The runbook separates harmless paging from sustained storage pressure and identifies the workloads driving it.
D ASM Auxiliary storage status D M=STOR Storage configuration/status RMF Monitor III Storage/paging and address-space views SDSF DA Real storage and paging-related columns where configured STORDIAG Consolidated storage snapshot when available
Operational caution: Do not equate “some paging” with failure. The key signal is sustained paging plus workload delay, shrinking available frames and/or auxiliary-storage pressure.
Common virtual storage is being consumed and can threaten the whole LPAR. Because common areas are shared, a leak in one component can affect unrelated workloads and may ultimately require an IPL if not recoverable.
RMF / IPCS Common-storage usage and ownership evidence D ASM Complementary paging/auxiliary view RMF Monitor III / SMF Common-storage trend and address-space evidence IPCS / product diagnostics Storage ownership analysis when deeper diagnosis is needed SYSLOG / OPERLOG Storage-shortage and recovery messages
Operational caution: Common storage is system-wide. Do not treat it like one job’s REGION shortage, and do not make arbitrary storage-layout changes during an incident.
A z/OS UNIX filesystem is full, nearly full, not mounted, mounted read-only, or unable to extend. The runbook checks both aggregate capacity and what inside the filesystem is consuming it.
D OMVS,F Mounted file systems D OMVS,F,NAME=filesystem-dsn One filesystem/aggregate df -P / df -kP Filesystem usage du -sk path/* | sort -n Directory consumers find path ... Locate aged/large files carefully zfsadm aggrinfo / fsinfo Aggregate/filesystem detail where applicable ZFSDIAG Site diagnostic report when available
Operational caution: Deleting files is not automatically a fix. Determine who owns them, whether they are open, whether retention applies, and why growth occurred.
JES2 is running short of spool space or internal queue resources. Because JES2 is shared infrastructure, one runaway workload can affect submission, execution and SYSOUT handling across the MAS.
$D SPOOL JES2 spool status JES2 resource displays JQE/BERT/resource usage according to site/JES2 level SDSF O / H / ST Identify huge or retained SYSOUT SDSF job details Spool usage by suspect jobs $D CKPT Checkpoint status when related JES2DIAG Consolidated JES2 health report when available
Operational caution: Do not mass-purge held output simply to recover space without retention/operational approval. Spool can contain evidence and business-required reports.
HASP9203 or similar evidence indicates a JES2 PCE has been dispatched for an unusually long interval. The task is to identify which PCE is affected and whether JES2 is waiting, looping, processing abnormal volume or blocked by checkpoint/I/O.
$D CKPT JES2 checkpoint status $D SPOOL Spool status and possible I/O context SDSF DA / JES2 STC JES2 CPU/elapsed observation JES2 diagnostic displays PCE/resource displays supported by your JES2 level RMF device activity Check checkpoint/spool device response OPERLOG / SYSLOG Correlate HASP9203 and surrounding messages
Operational caution: A long-dispatch alert is a symptom, not proof that JES2 is CPU-bound. Determine whether the PCE was running or effectively stalled on a dependent resource.
XCF signalling between sysplex members is degraded, constrained or failing. Symptoms often surface in Db2, GRS, Logger or other consumers before anyone notices XCF itself.
D XCF Sysplex overview D XCF,SYSPLEX,ALL Detailed member information D XCF,PI,DEV=ALL Signalling paths in D XCF,PO,DEV=ALL Signalling paths out D XCF,GROUP Group/member context RMF Coupling Facility/XCF Performance evidence XCFDIAG Consolidated path/group view when available
Operational caution: Do not treat each application timeout independently when several sysplex consumers degrade together. XCF is shared infrastructure.
A CF structure is full, constrained, failed, pending rebuild or unavailable. The response must respect the structure type and the owning subsystem’s recovery semantics.
D XCF,STR Structure overview D XCF,STR,STRNAME=structure-name One structure D XCF,CF Coupling Facility status D XCF,POLICY,TYPE=CFRM Active CFRM policy D XCF,CPL,TYPE=CFRM CFRM couple data sets RMF Coupling Facility reports Usage and service-time evidence
Operational caution: Do not deallocate or force-rebuild a structure solely because it is “high usage.” Understand connector behavior and persistence/recovery requirements first.
A log stream cannot keep up with writes, offload datasets fail, staging datasets fill, or a CF/DASD log stream becomes unavailable. Many subsystems depend on Logger for recoverable event data.
D LOGGER,STATUS Logger status D LOGGER,LOGSTREAM,LSNAME=name One log stream D LOGGER,CONNECTION,LSNAME=name Connectors for a log stream D XCF,CPL,TYPE=LOGR LOGR couple data sets D XCF,STR CF structure status for structured streams SDSF / SYSLOG IXG messages and owning subsystem output IXCMIAPU LIST reports Definition/policy detail LOGRDIAG Site consolidated Logger report when available
Operational caution: System Logger symptoms are often downstream of DASD/SMS/CF problems. Do not assume Logger code is the root cause because IXG messages are the visible alert.
SMF records are not being recorded, active MAN data sets are filling, log stream recording is unhealthy, or dump/offload processing is falling behind. This is both an operational and audit/forensics risk.
D SMF Current SMF status/configuration SET SMF=xx Only as a controlled configuration action T SMF Switch MAN dataset when using dataset recording and procedure allows IFASMFDP / IFASMFDL Dump/extract tools appropriate to recording mode SDSF / scheduler Check dump/offload jobs and return codes SMF-related SYSLOG messages Determine switching/loss/offload condition
Operational caution: Do not casually enable large volumes of additional SMF records in production without estimating data rate, offload capacity and downstream processing impact.
An STC/job abended but no new dump is available. The investigation separates “no dump requested” from DAE suppression, CHNGDUMP mode, SLIP/product recovery behavior and dump-dataset/resource problems.
F HZSPROC,DISPLAY,CHECK=(IBMDAE,DAE_SUPPRESSING),DETAIL D DUMP,OPTIONS D DUMP,TITLE Current dump requests/titles where applicable IPCS DAE / ADYDSP DAE symptom history SDSF / SYSLOG IEA/IEA/ADY dump messages CHNGDUMP / SLIP displays Review only; change under controlled procedure
Operational caution: Do not clear the entire DAE history merely to obtain one dump unless that is an approved installation procedure. Targeted TAKEDUMP is safer when appropriate.
Important workloads are slow even though they are not hung. The investigation determines whether delay is CPU, I/O, storage, enqueue or WLM policy, and whether the LPAR has enough entitled/available capacity.
RMF Monitor III / Postprocessor Service class, delay and CPU reports SDSF DA CPU and service-class context D M=CPU Processor status D WLM WLM configuration/status displays supported by release HMC/partition metrics Defined capacity, weight, capping, shared processor context
Operational caution: Do not raise importance blindly. WLM reallocates finite resources; improving one class can worsen another.
Jobs and subsystems are delayed or failing because a DASD device/volume/path is slow, pending, offline or unavailable. The runbook correlates system messages, RMF device data and affected datasets.
D U,DASD,ONLINE Online DASD devices D U,VOL=volser Device/volume state where supported D M=DEV(devnum) Device/path information RMF Monitor III Device Response/service/queue time D IOS,... IOS diagnostics appropriate to event/site SDSF / SYSLOG IOS/IEC/IGD messages D SMS,STORGRP(...) SMS storage-group state when allocation is affected
Operational caution: Do not vary a device offline/online as a diagnostic reflex without knowing its sharing, reserve/serialization and active workload.
Dataset allocation, locate, rename or delete operations fail or hang because of catalog, VVDS/VTOC, alias or serialization problems. The investigation identifies the catalog involved and whether the failure is data, access, I/O or contention.
LISTCAT ENT(dataset) ALL IDCAMS catalog detail LISTCAT LEVEL(hlq) Scope/alias verification D GRS,C Catalog-related serialization D U,VOL=volser Catalog/VVDS volume availability D SMS,... SMS allocation context SYSLOG / joblog ICF catalog return/reason messages
Operational caution: Catalog repair utilities can be destructive. Do not use DIAGNOSE/REPRO/ALTER/IMPORT/EXPORT as trial-and-error incident commands.
Applications cannot connect, a listening port disappears, connections reset, or the z/OS TCP/IP stack/path is degraded. The runbook separates stack availability, interface/route, listener, firewall/security and remote-end problems.
D TCPIP List TCP/IP stacks D TCPIP,tcpipjob,NETSTAT,HOME Interface/HOME status D TCPIP,tcpipjob,NETSTAT,ROUTE Routing table D TCPIP,tcpipjob,NETSTAT,PORTL Listener/port information where supported TSO NETSTAT / UNIX netstat Connection/listener evidence PING / TRACERTE Path testing within security/site rules SDSF TCPIP/OMPROUTE logs EZB/EZZ/EZA messages
Operational caution: Restarting TCP/IP is a high-blast-radius action. Prove the problem is stack-wide before using it.
A required subsystem/product does not come up after IPL or repeatedly terminates during initialization. The investigation follows dependency order, PARMLIB/proclib, dataset, security, subsystem and UNIX/network prerequisites.
D A,L Is the STC active/terminating? SDSF ST / joblog First initialization failure D SSI Subsystem interface status when relevant D OMVS,O / D OMVS,F UNIX prerequisites D XCF / D XCF,STR Sysplex/CF prerequisites D TCPIP Network stack state D PROG,APF / D PROG,LNKLST Program authorization/search path when relevant D R,L Outstanding replies blocking startup
Operational caution: Repeated START commands can create additional partial resources or noisy logs. Diagnose the first failure before retry loops.
The IPL completes, but the LPAR is not truly production-ready. This runbook validates base z/OS, JES, security, UNIX, networking, sysplex/CF, Logger, storage, dump/SMF and critical STCs before releasing workload.
D IPLINFO IPL date/time, load parameters and system information D A,L Base/critical address spaces D SSI Subsystem status D XCF / D XCF,STR / D XCF,CPL Sysplex/couple/structure state D GRS GRS mode/status as used by site D LOGGER,STATUS Logger status D OMVS,O / D OMVS,F UNIX and mounts D TCPIP TCP/IP stacks D SMF SMF recording D DUMP,OPTIONS Dump settings D PROG,APF / D PROG,LNKLST Program configuration
Operational caution: “IPL completed” is not the same as “LPAR ready.” A system can accept console commands while essential shared services are still degraded.
Diagnostics & Operations · JCL Library
Reusable JCL examples grouped by task and scenario. Data set names, volume serials, user IDs, job cards and other installation-specific values are placeholders; replace them with your site standards before use.
JCL is presented as fixed-width, non-wrapping text. Copy normalizes line endings to CRLF for 3270-friendly multi-line paste.
This topic contains two different EREP paths and both are kept here: one reads a previously built EREP history data set; the other reads the LOGREC log stream directly through the LOGR subsystem. The notes below explain how to derive the EREP CPU= value and how the LOGR subsystem parameters control the reporting window.
EREP parameter notes :TYPE=EHISMis used for software error reporting andTYPE=CDHOTfor hardware error reporting. IncludeEVENTfor a summary-style event report; remove it for the detailed form.DATE=(yyddd,yyddd)uses Julian day format. For the CPU identifier, useD M=CPU; the note builds the value asCPU=(X<LPID><SERIAL>.<MODEL>). For direct LOGREC access,SUBSYS=(LOGR,IFBSEXIT,,)selects the LOGR subsystem and IFBSEXIT. The third subparameter is the reporting period (the reference notes the default as oldest through youngest); the fourth can carry options such asLASTRUN,DELETE,DEVICESTATS, andSYSTEM=.
Reads an existing EREP monthly/history data set and produces the requested software or hardware error report.
//EREPRPT EXEC PGM=IFCEREP1,PARM=CARD,REGION=7M //ACCIN DD DISP=OLD,DSN=YOURHLQ.EREP.MONTHLY.HISTORY.ALL(0) //TOURIST DD SYSOUT=* //EREPPT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DIRECTWK DD UNIT=VIO,SPACE=(CYL,(125,50)) //SYSIN DD *,DCB=BLKSIZE=80 CPU=(X<LPID><SERIAL>.<MODEL>) DATE=(YYDDD,YYDDD) TIME=(0730,1100) TABSIZE=999K TYPE=EHISM PRINT=PS EVENT ACC=N HIST ENDPARM /*
Reads LOGREC records directly through the LOGR subsystem instead of using a history data set.
//EREPRPT EXEC PGM=IFCEREP1,PARM=CARD,REGION=7M //ACCIN DD DSN=YOUR.LOGREC.LOGSTREAM, // SUBSYS=(LOGR,IFBSEXIT,,), // RECFM=VB,BLKSIZE=4000 //TOURIST DD SYSOUT=* //EREPPT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DIRECTWK DD UNIT=VIO,SPACE=(CYL,(125,50)) //SYSIN DD *,DCB=BLKSIZE=80 CPU=(X<LPID><SERIAL>.<MODEL>) DATE=(YYDDD,YYDDD) TIME=(0900,1030) TABSIZE=999K TYPE=EHISM PRINT=PS EVENT ACC=N HIST ENDPARM /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* ****************************************************************** //* * //* SAMPLE DEFRAG OF A CA DATACOM DATABASE //* INDEX * //* * //* THIS JOB PERFORMS AN ONLINE COMPRESS OF THE //* INDEX FOR A * //* CA DATACOM DATABASE USING THE CA DATACOM //* DBUTLTY PROGRAM. * //* * //* THIS JOB CAN BE RUN WHILE THE CA DATACOM //* DATABASE IS OPEN * //* AND THE APPLICATION IS ACTIVE. * //* * //* THIS JOB WILL: * //* 1. REFRESH CXX DISK-BASED STATISTICS * //* 2. RUN A CXX TYPE=A REPORT ON THE //* DBID * //* 3. DEFRAGMENT THE INDEX BLOCKS * //* 4. REFRESH THE CXX STATISTICS AGAIN * //* 5. PRODUCE A FINAL CXX TYPE=A REPORT * //* * //* ****************************************************************** //* // SET CUS=YOUR DATACOM CUSLIB // SET CAI=YOUR DATACOM CAILIB (YOURHLQ.0) OR CAAXLOAD (YOURHLQ.0) // SET CXX=YOUR CXX FILE NAME //* //DEFRAG EXEC PGM=DBUTLTY,REGION=4M //STEPLIB DD DISP=SHR,DSN=&CUS // DD DISP=SHR,DSN=&CAI //SYSPRINT DD SYSOUT=* //CXX DD DISP=SHR,DSN=&CXX //SYSIN DD * COMM DBID=601,OPTION=STATS REPORT DBID=601,AREA=CXX,TYPE=A DEFRAG DBID=601 COMM DBID=601,OPTION=STATS REPORT DBID=601,AREA=CXX,TYPE=A /* //*
DEFRAG:
//STEP01 EXEC PGM=DBUTLTY,REGION=3M //STEPLIB DD DSN=YOURHLQ.DATCOMAD.PROD.CUSLIB,DISP=SHR // DD DSN=YOURHLQ.DATCOMAD.PROD.CAAXLOAD,DISP=SHR //CXX DD DSN=YOURHLQ.DATCOMAD.PROD.CXX,DISP=SHR //* //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SNAPER DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //* //* //SYSIN DD * DEFRAG DBID=601 COMM OPTION=STATS,DBID=601 /*
REPORT:
//STEP01 EXEC PGM=DBUTLTY,REGION=3M //STEPLIB DD DSN=YOURHLQ.DATCOMAD.PROD.CUSLIB,DISP=SHR // DD DSN=YOURHLQ.DATCOMAD.PROD.CAAXLOAD,DISP=SHR //CXX DD DSN=YOURHLQ.DATCOMAD.PROD.CXX,DISP=SHR //* //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SNAPER DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //* //* //SYSIN DD * COMM DBID=601,OPTION=STATS REPORT AREA=CXX,DBID=601,TYPE=A /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//SPILL EXEC PGM=DBUTLTY,REGION=4M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.CA7.CUSLIB // DD DISP=SHR,DSN=YOURHLQ.CA7.CAAXLOAD //SYSPRINT DD SYSOUT=* //RXX DD DSN=YOURHLQ.CA7.SPILL(+1), // DISP=(NEW,CATLG,DELETE),UNIT=TAPE,LABEL=(1,SL) //SYSIN DD * SPILL AREA=RXX /*
Defines a VSAM linear data set that can be formatted as a zFS aggregate. Replace the data-set name, volume and space values for the target system.
//* ------------------------------------------------------------
//* Define a zFS aggregate as a VSAM linear data set.
//* ------------------------------------------------------------
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME(YOURHLQ.OMVS.SAMPLE.ZFS) -
VOLUMES(VOL001) -
LINEAR -
CYLINDERS(450 5) -
SHAREOPTIONS(3))
/*
Formats preallocated VSAM linear data sets as zFS aggregates. Use the compatibility-mode option only when that is the intended file-system design.
//* ------------------------------------------------------------ //* Format two VSAM linear data sets as compatibility-mode zFS. //* ------------------------------------------------------------ //FORMAT1 EXEC PGM=IOEAGFMT,REGION=0M,COND=(0,LT), // PARM='-aggregate YOURHLQ.OMVS.SAMPLE.ZFS -compat' //SYSPRINT DD SYSOUT=* //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //* //FORMAT2 EXEC PGM=IOEAGFMT,REGION=0M,COND=(0,LT), // PARM='-aggregate YOURHLQ.OMVS.SAMPLE2.ZFS -compat' //SYSPRINT DD SYSOUT=* //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=*
Issues the z/OS UNIX MOUNT command through batch TSO. The plus signs continue the TSO command across input records.
//* ------------------------------------------------------------
//* Mount a zFS aggregate from batch TSO.
//* ------------------------------------------------------------
//MOUNT EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
MOUNT FILESYSTEM('YOURHLQ.OMVS.SAMPLE.ZFS') +
MOUNTPOINT('/products/sample') +
TYPE(ZFS) MODE(RDWR)
/*
Combines allocation, IOEAGFMT formatting and mounting. The steps are kept separate so a failure does not hide which stage needs correction.
//JOBNAME JOB
//* ------------------------------------------------------------
//* Define, format and mount one zFS aggregate.
//* ------------------------------------------------------------
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME(YOURHLQ.OMVS.COMPAT.ZFS) -
VOLUMES(VOL002) -
LINEAR -
CYLINDERS(25 5) -
SHAREOPTIONS(3))
/*
//FORMAT EXEC PGM=IOEAGFMT,REGION=0M,COND=(0,LT),
// PARM='-aggregate YOURHLQ.OMVS.COMPAT.ZFS -compat'
//SYSPRINT DD SYSOUT=*
//STDOUT DD SYSOUT=*
//STDERR DD SYSOUT=*
//MOUNT EXEC PGM=IKJEFT01,COND=(0,LT)
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
MOUNT FILESYSTEM('YOURHLQ.OMVS.COMPAT.ZFS') +
MOUNTPOINT('/products/sample/compat') +
TYPE(ZFS) MODE(RDWR)
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* Compare file systems mounted at /service and /servz25 //* //JS070 EXEC PGM=BPXBATCH,REGION=500M //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STDPARM DD * sh diff -r /service /servz25 /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP1 EXEC PGM=BPXBATCH //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * sh _BPX_JOBNAME='INETD' /usr/sbin/inetd /etc/YOURHLQ.conf & /*
Runs a simple shell command through BPXBATCH using in-stream STDPARM.
//STEP1 EXEC PGM=BPXBATCH //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * SH ls -l /SYSTEM/tmp /*
SH ls -altr /listed_environments/cics/test/pickup/webs/test-portal-v01/src/assets/mixins | grep functions into a z/OS-Unix file at /u/userid/stdparmfile Then execute the command via BPXBATCH by utilizing STDPARM (PATHOPTS must be set to ORDONLY):
//USSCMD EXEC PGM=BPXBATCH //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STDPARM DD PATH='/u/userid/stdparmfile',PATHOPTS=ORDONLY /*
Or place the same command into a traditional z/OS dataset (with a sufficient LRECL). Ensure that sequence numbers are removed from the dataset by issuing UNNUM and/or NUMBER OFF while in ISPF EDIT. Then similarly submit through JCL:
//USSCMD EXEC PGM=BPXBATCH //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STDPARM DD DISP=SHR,DSN=YOURHLQ.USERID.STDPARM.TEST /*
Runs a shell pipeline from batch. Keep STDPARM records within the installation-supported record length.
//USSCMD EXEC PGM=BPXBATCH //STDERR DD SYSOUT=* //STDOUT DD SYSOUT=* //STDPARM DD * SH ls -altr /products/sample/src | grep functions /*
Shows normal JCL statement continuation: the continued EXEC parameters start on a // continuation card rather than relying on text wrapping in the browser.
//JOBNAME JOB //BPXIT EXEC PGM=BPXBATCH, // PARM='SH ls -l /u/userid/long-directory-name' //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COMPILE EXEC PGM=ASMA90,PARM=(OBJECT,NODECK) //SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR // DD DSN=SYS1.MODGEN,DISP=SHR // DD DSN=YOURHLQ.INFORDS.DATA.COPYASM,DISP=SHR //SYSUT1 DD DSN=&&SYSUT1,SPACE=(4096,(120,120),,,ROUND),UNIT=VIO, // DCB=BUFNO=1 //SYSIN DD DISP=SHR,DSN=YOURHLQ.PRODUCT.EXIT.SOURCE(RACF) //SYSPRINT DD SYSOUT=* //SYSPUNCH DD SYSOUT=B //SYSLIN DD DSN=&&OBJ,SPACE=(3040,(40,40),,,ROUND),UNIT=VIO, // DISP=(MOD,PASS), // DCB=(BLKSIZE=3040,LRECL=80,RECFM=FBS,BUFNO=1) //LKED EXEC PGM=HEWL,PARM='MAP,LET,LIST,NCAL', // COND=(8,LT,C) //SYSLIN DD DSN=&&OBJ,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DISP=SHR,DSN=YOURHLQ.PRODUCT.EXIT.LOADLIB //SYSUT1 DD DSN=&&SYSUT1,SPACE=(1024,(120,120),,,ROUND),UNIT=VIO, // DCB=BUFNO=1 //SYSPRINT DD SYSOUT=* //SYSIN DD * NAME INEXIT04(R)
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//LKED EXEC PGM=IEWL,REGION=5M, // PARM='LIST,XREF,LET,MAP,NCAL',COND=(4,LE) //SYSLIN DD DSN=*.YOURHLQ.SYSLIN,DISP=(OLD,DELETE) // DD DDNAME=SYSIN //SYSLMOD DD DSN=YOURHLQ.APP.RUNTIME.LOADLIB(MSZCOBX3),DISP=SHR //SYSUT1 DD UNIT=VIO,SPACE=(TRK,(20,20)) //SYSPRINT DD SYSOUT=* //SYSLIB DD DSN=CEE.SCEELKED,DISP=SHR
Defines a sample KSDS with separate DATA and INDEX component names. Adjust key length/offset, record size, CI size, space and SMS/volume attributes for the application.
//* ------------------------------------------------------------
//* Define a keyed VSAM cluster.
//* ------------------------------------------------------------
//ALLOC EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME(YOURHLQ.SAMPLE.VSAM) -
RECORDSIZE(400 32500) -
SHAREOPTIONS(2 3) -
FREESPACE(30 30) -
UNIQUE -
SPANNED -
VOLUMES(VOL001) -
CYLINDERS(2 2) -
KEYS(100 0)) -
DATA ( -
NAME(YOURHLQ.SAMPLE.VSAM.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX (NAME(YOURHLQ.SAMPLE.VSAM.INDEX))
/*
Delete Cataloged VSAM datasets:
//JOBNAME JOB //STEP01 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE YOURHLQ.JMS.DATA.DATA /*
Delete Uncataloged VSAM datasets:
//STEP0100 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //DD1 DD DISP=OLD,VOL=SER=VOL001,UNIT=3390 //SYSIN DD * DELETE SYS1.OMVS.TMP.UA00.N.DATA FILE(DD1) VVR DELETE SYS1.OMVS.USERS.UA00.N.DATA FILE(DD1) VVR DELETE SYS1.OMVS.VAR.UA00.N.DATA FILE(DD1) VVR /*
This will remove the VSAM volume record (VVR) from the VSAM volume data set (VVDS) and the data set control block from the volume table of contents (VTOC) Delete Uncataloged Non-VSAM datasets:
//STEP0100 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //DD1 DD DISP=OLD,VOL=SER=VOL001,UNIT=3390 //SYSIN DD * DELETE SYS1.USER.DATASET1 FILE(DD1) NVR DELETE SYS1.USER.DATASET2 FILE(DD1) NVR /*
Creates catalog entries for existing non-VSAM data sets on a known volume. Use only when the physical data sets already exist and the catalog entries are absent.
//JS010 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
DEFINE NONVSAM(NAME(YOURHLQ.PRODUCT.CONTROL) -
VOLUMES(VOL001) DEVT(3390))
DEFINE NONVSAM(NAME(YOURHLQ.PRODUCT.JCLLIB) -
VOLUMES(VOL001) DEVT(3390))
DEFINE NONVSAM(NAME(YOURHLQ.PRODUCT.LOADLIB) -
VOLUMES(VOL001) DEVT(3390))
DEFINE NONVSAM(NAME(YOURHLQ.PRODUCT.PANEL) -
VOLUMES(VOL001) DEVT(3390))
/*
Catalogs an existing non-VSAM data set into a specified catalog. Confirm the target catalog and on-volume data set before using DEFINE NONVSAM for recataloging work.
//INCATLG EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE NONVSAM ( -
NAME(YOURHLQ.COMPILER.LIBRARY) -
DEVT(3390) -
VOLUMES(VOL001)) -
CATALOG(YOURHLQ.MASTER.CATALOG)
/*
Recatalogs an existing VSAM linear data set. Verify the VVDS/VTOC component information and volume before recataloging.
//JS010 EXEC PGM=IDCAMS,REGION=2M
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME(YOURHLQ.OMVS.JAVA11.ZFS) -
VOLUMES(VOL001) -
RECATALOG -
LINEAR)
/*
Uses IDCAMS ALTER NEWNAME to back up existing cataloged non-VSAM libraries and then promote replacement libraries if the first rename step succeeds.
//* ------------------------------------------------------------
//* Rename current libraries to backup names, then promote new ones.
//* ------------------------------------------------------------
//RENAME1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER YOURHLQ.PRODUCT.CMDLIB -
NEWNAME(YOURHLQ.PRODUCT.CMDLIB.BACKUP)
ALTER YOURHLQ.PRODUCT.COPYLIB -
NEWNAME(YOURHLQ.PRODUCT.COPYLIB.BACKUP)
/*
//IF1 IF (RENAME1.RC = 0) THEN
//RENAME2 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER YOURHLQ.PRODUCT.NEW.CMDLIB -
NEWNAME(YOURHLQ.PRODUCT.CMDLIB)
ALTER YOURHLQ.PRODUCT.NEW.COPYLIB -
NEWNAME(YOURHLQ.PRODUCT.COPYLIB)
/*
//IF1 ENDIF
Renames a cataloged non-VSAM data set with IDCAMS ALTER NEWNAME. This example intentionally avoids member-level notation, which is not a data-set rename.
//JOBNAME JOB
//RENAME EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER YOURHLQ.ABC.DEF.GHI -
NEWNAME(YOURHLQ.ABC.DEF.GHI.BACKUP)
/*
Rename a VSAM cluster:
//RENAME EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER 'YOURHLQ.XPEDITER.SITE.XOPTIONS' -
NEWNAME('YOURHLQ.SITE.DATA.XOPTIONS')
ALTER 'YOURHLQ.SITE.XOPTIONS.DATA' -
NEWNAME('YOURHLQ.DATA.XOPTIONS.DATA')
ALTER 'YOURHLQ.SITE.XOPTIONS.INDEX' -
NEWNAME('YOURHLQ.DATA.XOPTIONS.INDEX')
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP001 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //INFILE DD DISP=SHR,DSN=YOURHLQ.PRODUCT.TEST.INPUT //OUTFILE DD DISP=(,CATLG),DSN=YOURHLQ.DATA.WORK.FILE, // UNIT=SYSDA,SPACE=(CYL,(30,0),RLSE), // DCB=(RECFM=V,LRECL=2060) //SYSIN DD * REPRO INFILE(INFILE) - OUTFILE(OUTFILE) - FROMKEY(61) TOKEY(61) //
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * /* CHANGE THE BELOW MAXCC TO A NUMBER BETWEEN 0 AND 16*/ SET MAXCC=16 /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JS00100 EXEC PGM=IDCAMS //DDDMMY DD DUMMY //DDOUT DD DSN=HLQ.FIRST.FILE, // DISP=OLD //SYSIN DD * REPRO IFILE(DDDMMY) OFILE(DDOUT) //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=*
For SMS managed volumes:
//JOBNAME JOB
//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER YOURHLQ.ZFS.DATA.DATA -
ADDVOLUMES(* *)
/*
For non-SMS managed volumes:
//JOBNAME JOB
//STEP01 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
ALTER YOURHLQ.ZFS.DATA.DATA -
ADDVOLUMES(VOL001 VOL002)
/*
The restriction that VSAM data sets must be extended-format, and therefore SMS-managed, in order to use extended addressability, is removed for VSAM linear data sets (LDSes). A new parameter on the IDCAMS ALTER command, EXTENDEDADDRESSABLE, lets you make an existing non-SMS VSAM LDS eligible for extended addressability, so it can grow beyond the four GB size limit of SMS-managed data sets.
//JOBNAME JOB //STEP01 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * ALTER YOURHLQ.OMVS.ZFS.DATA - EXTENDEDADDRESSABLE /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTCAT ENTRIES(YOUR.FILE.NAME.HERE) ALL /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
// IF //* (YOURHLQ.DATA.SAS.RC NE 0) OR (YOURHLQ.DATA.SAS.RC NE 4) THEN //STEP3 EXEC PGM=MYPROG // ENDIF
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Rename a non-VSAM data set on a known volume.
//RENAME EXEC PGM=IEHPROGM
//SYSPRINT DD SYSOUT=*
//DD1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD
//SYSIN DD *
RENAME DSNAME=YOURHLQ.SAMPLE.OLD,
VOL=3390=VOL001,
NEWNAME=YOURHLQ.SAMPLE.NEW
/*
*ADR497E (001)-CATLG(07), A CATALOG ERROR OCCURRED WHILE DELETING UNCATALOGED DATA SET prodhlq.product.LINKLIB. RETURN CODE IS 102, REASON CODE IS FP-007
//JOBNAME JOB
//* Copy selected SMP/E target libraries to runtime names.
//COPYLIB EXEC PGM=ADRDSSU,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY DS(INCLUDE( -
YOURHLQ.PRODUCT.SMP.LOAD -
YOURHLQ.PRODUCT.SMP.PANELS -
YOURHLQ.PRODUCT.SMP.SAMPLES -
)) -
RENAMEU( -
(YOURHLQ.PRODUCT.SMP.LOAD,YOURHLQ.PRODUCT.RUNTIME.LOAD) -
(YOURHLQ.PRODUCT.SMP.PANELS,YOURHLQ.PRODUCT.RUNTIME.PANELS) -
(YOURHLQ.PRODUCT.SMP.SAMPLES,YOURHLQ.PRODUCT.RUNTIME.SAMPLES) -
) -
OUTDYNAM(VOL001) -
REPLACEUNCONDITIONAL CATALOG
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Back up a product runtime library tree to a DFSMSdss dump data set.
//BACKUP EXEC PGM=ADRDSSU,REGION=0M,PARM='TYPRUN=NORUN'
//SYSPRINT DD SYSOUT=*
//OUT DD DSN=YOURHLQ.PRODUCT.RUNTIME.BACKUP,
// UNIT=SYSDA,SPACE=(CYL,(75,25),RLSE),
// DISP=(NEW,CATLG,DELETE),RETPD=30
//FILTERDS DD *
INCLUDE(YOURHLQ.PRODUCT.RUNTIME.**)
//SYSIN DD *
DUMP DATASET(FILTERDD(FILTERDS)) -
OUTDDNAME(OUT) -
CANCELERROR OPTIMIZE(4) SHARE SPHERE -
ALLDATA(*) ALLEXCP TOLERATE(ENQFAILURE)
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Refresh runtime copies after product maintenance is validated.
//COPYLOAD EXEC PGM=IEBCOPY,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSUT3 DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSUT4 DD UNIT=SYSDA,SPACE=(CYL,(1,1))
//INLOAD DD DSN=YOURHLQ.PRODUCT.SMP.LOAD,DISP=SHR
//OUTLOAD DD DSN=YOURHLQ.PRODUCT.RUNTIME.LOAD,DISP=SHR
//SYSIN DD *
COPYGROUP INDD=((INLOAD,R)),OUTDD=OUTLOAD
/*
//* Refresh non-load libraries as logical data-set copies.
//COPYDATA EXEC PGM=ADRDSSU,REGION=0M,COND=(0,NE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
COPY DS(INCLUDE( -
YOURHLQ.PRODUCT.SMP.PANELS -
YOURHLQ.PRODUCT.SMP.SAMPLES -
)) -
RENAMEU( -
(YOURHLQ.PRODUCT.SMP.PANELS,YOURHLQ.PRODUCT.RUNTIME.PANELS) -
(YOURHLQ.PRODUCT.SMP.SAMPLES,YOURHLQ.PRODUCT.RUNTIME.SAMPLES) -
) -
REPLACEUNCONDITIONAL CATALOG
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Restore selected runtime libraries from a DFSMSdss dump data set.
//RESTORE EXEC PGM=ADRDSSU,REGION=0M,PARM='TYPRUN=NORUN'
//SYSPRINT DD SYSOUT=*
//IN DD DSN=YOURHLQ.PRODUCT.RUNTIME.BACKUP,DISP=SHR
//FILTERDS DD *
INCLUDE( -
YOURHLQ.PRODUCT.RUNTIME.LOAD -
YOURHLQ.PRODUCT.RUNTIME.PANELS -
YOURHLQ.PRODUCT.RUNTIME.SAMPLES -
)
//SYSIN DD *
RESTORE DATASET(FILTERDD(FILTERDS)) -
INDDNAME(IN) -
REPLACE CATALOG
/*
Dump:
//JOBNAME JOB //* /*ROUTE //* XEQ USUAJES2 //* JOBPARM SYSAFF=M104 //* ***************************************************************** //* //* DUMP DATASETS FROM DIFFERENT VOLUMES INTO A SINGLE BACKUP FILE //* ***************************************************************** //* STEP01 EXEC PGM=ADRDSSU,PARM='TYPRUN=NORUN' //STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //INDD1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //INDD2 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //OUTDD DD DSN=&SYSUID..YOURHLQ.DATA.DATA.DUMP, // UNIT=3390,VOL=SER=VOL001,DISP=(NEW,CATLG) //SYSIN DD * DUMP INDDNAME(INDD1,INDD2) OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.FAT.CUST.DATA - YOURHLQ.DATA.**)) - ALLDATA(*) - ALLEXCP TOL(ENQF) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //OUTDD DD DSN=&SYSUID..YOURHLQ.DATA.DATA.DUMP, // UNIT=3390,VOL=SER=VOL001,DISP=(NEW,CATLG), // SPACE=(CYL,(1000,100),RLSE) //SYSIN DD * DUMP OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.INFO.PWXX.**)) - ALLDATA(*) - ALLEXCP TOL(ENQF) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //INDD1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //INDD2 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //OUTDD DD DSN=YOURHLQ.DATA.DATA.DUMP, // UNIT=CART,DISP=(NEW,CATLG) //SYSIN DD * DUMP INDDNAME(INDD1,INDD2) OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.FAT.CUST.DATA - YOURHLQ.DATA.**)) - ALLDATA(*) - ALLEXCP TOL(ENQF) /*
Dumps a selected data-set mask to tape with ADRDSSU. Retention, tape management and ADMINISTRATOR authority must match local standards.
//STEP01 EXEC PGM=ADRDSSU,REGION=0M
//SYSPRINT DD SYSOUT=*
//BACKUP DD DSN=YOURHLQ.SYSTEM.BACKUP,
// UNIT=TAPE,DISP=(NEW,CATLG),LABEL=(1,SL),RETPD=30
//SYSIN DD *
DUMP DATASET(INCLUDE(YOURHLQ.DATA.**)) -
OUTDDNAME(BACKUP) -
OPTIMIZE(4) -
ADMINISTRATOR
/*
Restore:
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //INDD DD DSN=YOURHLQ.DATA.DATA.DUMP, // UNIT=3390,VOL=SER=VOL001,DISP=OLD //OUTDD DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //SYSIN DD * RESTORE INDDNAME(INDD) OUTDDNAME(OUTDD) - DATASET(INCLUDE(YOURHLQ.INFO.PWXX.**) - EXCLUDE(YOURHLQ.INFO.PWXX.LOAD - YOURHLQ.PWXX.DATA.USERLIB)) - NOPACKING(YOURHLQ.INFO.PWXX.**) - CATALOG TOL(ENQF) /*
Shows a non-destructive ADRDSSU restore trial using TYPRUN=NORUN and a rename mask. Remove TYPRUN only after the selection and target names have been reviewed.
//RESTORE EXEC PGM=ADRDSSU,PARM='TYPRUN=NORUN'
//SYSPRINT DD SYSOUT=*
//DDIN DD DISP=SHR,DSN=YOURHLQ.FDR.DATA.DUMP,
// UNIT=3390,VOL=SER=VOL001
//SYSIN DD *
RESTORE INDDNAME(DDIN) -
DS(INCLUDE(YOURHLQ.PRODUCT.DATA.**)) -
RENAMEU( -
(YOURHLQ.PRODUCT.DATA.**,YOURHLQ.PRODUCT.RESTORE.**))
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //OUTDD DD DUMMY //SYSIN DD * DUMP OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.INFO.PWXX.**)) - DELETE PURGE /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //INDD DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //OUTDD DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //SYSIN DD * COPY LOGINDDNAME(INDD) OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.INFOGIX.ACR.DATA.**)) - CATALOG DELETE PURGE - BYPASSACS(**) - NULLSTORCLAS - ALLDATA(*) - ALLEXCP TOL(ENQF) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=ADRDSSU //SYSPRINT DD SYSOUT=* //INDD1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //INDD2 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //INDD3 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //INDD4 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //OUTDD DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //SYSIN DD * COPY LOGINDDNAME(INDD1,INDD2,INDD3,INDD4) OUTDDNAME(OUTDD) - DATASET(INCLUDE( - YOURHLQ.ENF.DATA.MVSA.**)) - CATALOG DELETE PURGE - BYPASSACS(**) - NULLSTORCLAS - ALLDATA(*) - ALLEXCP TOL(ENQF) /*
Copy data from tape dataset to disk
//STEP1 EXEC PGM=IEBGENER //SYSUT1 DD DISP=SHR,DSN=TAPEDATASET //SYSUT2 DD DISP=(NEW,CATLG,DELETE), // DSN=OUTPUTDATASET, // DCB=*.SYSUT1, // UNIT=3390, VOL=SER=VOL001, // SPACE=(CYL,(2000,1000),RLSE) //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY
Copy from one PS to another PS file
//GENER1 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY //SYSUT1 DD DISP=SHR,DSN=YOURHLQ.SAVE.BETA.LICX, // UNIT=3390,VOL=SER=VOL001 //SYSUT2 DD DISP=SHR,DSN=YOURHLQ.BETA.BSA.LICX, // UNIT=3390,VOL=SER=VOL001
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //STEP1 EXEC PGM=IEBGENER //SYSUT1 DD DUMMY //SYSUT2 DD DSN=<dataset name>, // DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD * GENERATE MAXFLDS=2 /* //SYSOUT DD SYSOUT=* //*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* CREATE A PS FILES USING IEFBR14 //* //STEP1 EXEC PGM=IEFBR14 //DD1 DD DSN=YOURHLQ.JCL.CNTL.PS, // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(1,1)), // UNIT=3390,VOLUME=SER=VOL001, // DCB=(DSORG=PS,RECFM=FB,LRECL=80,BLKSIZE=800) //* //* CREATE A PDS FILES USING IEFBR14 //* //STEP2 EXEC PGM=IEFBR14 //DD1 DD DSN=YOURHLQ.JCL.CNTL.PDS, // DISP=(NEW,CATLG,DELETE), // SPACE=(TRK,(20,10,5)), // UNIT=3390,VOLUME=SER=VOL001, // DCB=(DSORG=PO,RECFM=FB,LRECL=80,BLKSIZE=800)
Using LIKE and DCB parameter:
//STEP2 EXEC PGM=IEFBR14 //DD1 DD DSN=YOURHLQ.DATA.MVSA.CAAXDATV, // DISP=(NEW,CATLG,DELETE), // UNIT=3390,VOLUME=SER=VOL001, // LIKE=YOURHLQ.DATCOMAD.DATA.CAAXDATV, // DCB=YOURHLQ.DATCOMAD.DATA.CAAXDATV //DD2 DD DSN=YOURHLQ.DATA.MVSA.CAAXLOAD, // DISP=(NEW,CATLG,DELETE), // UNIT=3390,VOLUME=SER=VOL001, // LIKE=YOURHLQ.DATCOMAD.DATA.CAAXLOAD, // DCB=YOURHLQ.DATCOMAD.DATA.CAAXLOAD
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* ************************************************************ //* DELETE DATASET //* ************************************************************ //STEPNAME EXEC PGM=IEFBR14 //SYSPRINT DD SYSOUT=* //DDNAME DD DSN=dsname,DISP=(OLD,DELETE,DELETE) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* ************************************************************ //* COPY ONE PDS TO ANOTHER PDS //* ************************************************************ //CAICOPY EXEC PGM=IEBCOPY //AAL2XML DD DSN=YOURHLQ.DATA.V12R1M0.AAL2XML, // UNIT=3390,VOL=SER=VOL001,DISP=SHR //AAL2XMLN DD DISP=SHR,DSN=YOURHLQ.V12R1M0.NEW.AAL2XML //CAL2XML DD DSN=YOURHLQ.DATA.V12R1M0.CAL2XML, // UNIT=3390,VOL=SER=VOL001,DISP=SHR //CAL2XMLN DD DISP=SHR,DSN=YOURHLQ.V12R1M0.NEW.CAL2XML //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=AAL2XML,O=AAL2XMLN COPY I=CAL2XML,O=CAL2XMLN /*
Note: LIKE parameter (LIKE=dsname) is used for SMS managed datasets, for non-sms managed datasets use DCB=dsname
//* ************************************************************ //* COPY ALL MEMBERS WITH CONTENT FROM ONE PDS TO //* A NEW PDS //* ************************************************************ //STEP1 EXEC PGM=IEBCOPY //DD1 DD DSN=YOURHLQ.DATA.JCL.CNTL,DISP=SHR //DD2 DD DSN=YOURHLQ.DATA.JCL.DATA,DISP=(NEW,CATLG,DELETE), // LIKE=YOURHLQ.DATA.JCL.CNTL //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=DD1,O=DD2 /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COPY EXEC PGM=IEBCOPY //INDD01 DD DISP=SHR,DSN=YOURHLQ.DATA.DATA.LOAD //OUTDD01 DD DSN=YOURHLQ.BETA.DATA.LOAD, // DISP=(NEW,UNCATLG,DELETE), // LIKE=YOURHLQ.DATA.DATA.LOAD, // UNIT=3390,VOL=SER=VOL001 //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=INDD01,O=OUTDD01 /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* ************************************************************ //* COPY ONE MEMBERS OF A PDS TO ANOTHER PDS //* ************************************************************ //STEP1 EXEC PGM=IEBCOPY //DD1 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.CNTL //DD2 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.DATA //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=DD1,O=DD2 SELECT MEMBER=IEFBR14 /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* ************************************************************ //* COPY ONE MEMBERS OF A PDS TO ANOTHER PDS //* ************************************************************ //STEP1 EXEC PGM=IEBCOPY //DD1 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.CNTL //DD2 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.DATA //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=DD1,O=DD2 SELECT MEMBER=IEFBR14,IEBGNER /*
Compress a PDS in place that is in use:
//COMPRESS EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //A DD DSNAME='SYS1.PARMLIB''',DISP=SHR //B DD DSNAME='SYS1.PARMLIB''',DISP=SHR //SYSIN DD * COPY OUTDD=B,INDD=A
Copy and rename:
//* ************************************************************ //* COPY ONE MEMBERS OF A PDS TO ANOTHER PDS //* ************************************************************ //STEP1 EXEC PGM=IEBCOPY //DD1 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.CNTL //DD2 DD DISP=SHR,DSN=YOURHLQ.DATA.JCL.DATA //SYSPRINT DD SYSOUT=* //SYSIN DD * COPY I=DD1,O=DD2 S M=((IEFBR14,IEFBR14@)) COPY I=DD1,O=DD3 S M=((AXCUS00@,AXCUS00)) S M=((AXRIM01@,AXRIM01)) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP1 EXEC PGM=IEBCOPY,REGION=4M,PARM='WORK=4M' //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSUT3 DD UNIT=VIO,SPACE=(CYL,(1,1)) //SYSUT4 DD UNIT=VIO,SPACE=(CYL,(1,1)) //IN1 DD DSN=YOURHLQ.SYNCSORT.DATA.SYNCLINK,DISP=SHR, // UNIT=SYSALLDA,VOL=SER=VOL001 //OUT1 DD DSN=YOURHLQ.SYNCLINK,DISP=SHR, // UNIT=SYSALLDA,VOL=SER=?????? (LIVE ISV SYSRES) //IN2 DD DSN=YOURHLQ.SYNCSORT.DATA.SYNCRENT,DISP=SHR, // UNIT=SYSALLDA,VOL=SER=VOL001 //OUT2 DD DSN=YOURHLQ.SYNCRENT,DISP=SHR, // UNIT=SYSALLDA,VOL=SER=?????? (LIVE ISV SYSRES) //SYSIN DD * COPY INDD=((IN1,R)),OUTDD=OUT1 S M=SS31XFPT S M=SYNCSORT COPY INDD=((IN2,R)),OUTDD=OUT2 S M=SS31A13 S M=SS31NS39 S M=SS31N00A S M=SS31N01D S M=SS31N02A S M=SS31X09A /*
Copy a PDS to PS (Unloading a dataset) IEBCOPY can be used to create a backup copy of a partitioned data set by copying (unloading) it to a sequential data set on DASD, tape, or other device supported by QSAM. Attention: Do not change the DCB parameters of an unload data set after IEBCOPY finishes creating it, or IEBCOPY might not be able to reload it.
//COPY1 EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=dsname,DISP=SHR //SYSUT2 DD DSN=dsname,DISP=(NEW,CATLG), // SPACE=(CYL,(20,10),RLSE),DSORG=PS // UNIT=3390,VOL=SER=VOL001 //SYSIN DD * COPY INDD=SYSUT1,OUTDD=SYSUT2 /*
Loading a dataset: In this example, a sequential data set that was created by an IEBCOPY unload operation is loaded.
//JOBNAME JOB //STEPA EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=A //SYSUT1 DD DSNAME=UNLOADSET,UNIT=tape,LABEL=(,SL), // VOL=SER=VOL001,DISP=OLD //SYSUT2 DD DSNAME=DATASET4,UNIT=disk,VOL=SER=VOL001, // DISP=(NEW,KEEP),SPACE=(CYL,(10,5,10)) //SYSUT3 DD DSN=TEMP1,UNIT=disk,VOL=SER=VOL001, // DISP=(NEW,DELETE),SPACE=(80,(15,1)) //SYSIN DD DUMMY /*
Rename members in a dataset:
//STEP01 EXEC PGM=IEBCOPY //IN DD DISP=SHR,DSN=Your.Dataset //OUT DD DISP=SHR,DSN=Your.Dataset //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSIN DD * COPY OUTDD=OUT,INDD=IN SELECT MEMBER=(ABP12345,CDP12345,R) SELECT MEMBER=(ABP12346,CDP12346,R) /*
Issue SDSF commands:
//SDSF01 EXEC PGM=IKJEFT01 //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //ISFOUT DD SYSOUT=* //SYSTSIN DD * SDSF //ISFIN DD * /$AJ(JOBNAME) /C U=racfid
TSO Receive:
//STEP1 EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSTSIN DD *
RECEIVE
INDS('YOURHLQ.DATA.MASTER.XMI')
DSNAME('YOURHLQ.DATA.UNI.MASTER')
UNIT(3390) VOL(VOLSER)
/*
Mount a filesystem:
//MOUNT EXEC PGM=IKJEFT01,COND=(0,LT)
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
MOUNT FILESYSTEM('YOURHLQ.OMVS.SAMPLE.ZFS')
-
MOUNTPOINT('/products/prod/sample/install') -
TYPE(ZFS) MODE(RDWR)
PARM('AGGRGROW')
TYPE(ZFS) MODE(RDWR) PARM('AGGRGROW') /* Unmount a filesystem:
//UNMOUNT EXEC PGM=IKJEFT1B //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * PROF MSGID WTPMSG
UNMOUNT FILESYSTEM('YOURHLQ.DATA.ETC.ZFS') IMM /* Delete a dataset:
//STEP1 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSTSIN DD * DEL 'YOURHLQ.DATASET' /*
Submits several JCL members from a partitioned data set through batch TSO.
//SUBJOBS EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * SUBMIT 'YOUR.PO.LIBRARY(JOB001)' SUBMIT 'YOUR.PO.LIBRARY(JOB002)' SUBMIT 'YOUR.PO.LIBRARY(JOB003)' /*
Copy the contents of a filesystem to another:
//* //* Copy the z/OS 2.5 CPAC ETC to a copy of the current ETC //* //* The pax command is piped to "su" to //* run as superuser. //* //OSHELL EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSEXEC DD DSN=SYS1.SBPXEXEC,DISP=SHR //SYSTSIN DD * oshell + cd /service/; + echo pax -rvwkC -pe * /servz25 | su;
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP01 EXEC PGM=FTP //SYSPRINT DD SYSOUT=* //SYSIN DD * 192.0.2.10 userid password CD 'YOURHLQ.CSILIST' MVSGET 'YOURHLQ.CSILIST' 'YOURHLQ.CSILIST' QUIT //*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //FTP EXEC PGM=FTP,REGION=2M,COND=(0,NE) //SYSFTPD DD DISP=SHR,DSN=YOURHLQ.FTPS.DATA(IBM) //SYSPRINT DD SYSOUT=* // OUTPUT DD SYSOUT=* //INPUT DD * YOURHLQ.boulder.ibm.com E-cimv4GHDgs 81mq-jEH9-Stek-CEQ6-1tA8 cd /toibm/mvs/ bin put 'YOURHLQ.DATA.DATA.TRS' YOURHLQ.NEW.TRS quit
Generic batch FTP upload example. Prefer the vendor-supported secure transfer method (for example FTPS/HTTPS) when available, and do not store reusable passwords in JCL.
//JOBNAME JOB //FTP EXEC PGM=FTP,REGION=0M //SYSPRINT DD SYSOUT=* //OUTPUT DD SYSOUT=* //INPUT DD * <USERID> <PASSWORD> cd /support/case-directory binary put 'YOURHLQ.SUPPORT.DATA.TRS' SUPPORT.DATA.TRS quit /*
Uses IBM PDUU (AMAPDUPL) to upload diagnostic data to IBM ECuRep over HTTPS. Use the transfer ID, case number and keyring issued/configured for your installation.
//PDUU EXEC PGM=AMAPDUPL,REGION=0M,TIME=NOLIMIT //SYSUDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //DEBUG DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=YOURHLQ.DIAG.DATA //SYSIN DD * USERID=<IBM_TRANSFER_ID> PASSWORD=<PASSWORD> TARGET_SYS=www.ecurep.ibm.com TARGET_DSN=YOURHLQ.DIAG.DATA WORK_DSN=YOURHLQ.PDUU.WORK WORK_DSN_SIZE=100 DIRECTORY=/toibm/mvs CASE=TS123456789 USE_HTTPS=Y HTTPS_TLS12=Y HTTPS_KEYRING=<KEYRING> /*
Using FTP:
//JOBNAME JOB //FTP EXEC PGM=FTP,REGION=2M,COND=(0,NE) //SYSFTPD DD DISP=SHR,DSN=YOURHLQ.JCL.CNTL.NEW(FTP) //SYSPRINT DD SYSOUT=* // OUTPUT DD SYSOUT=* //INPUT DD * YOURHLQ.boulder.ibm.com E-a2ryPUMI6z bVO3-Olc8-Gc9V-t8iH-7SA1 cd /toibm/mvs/ bin put 'YOURHLQ.DATA.DATA.TRS' YOURHLQ.DATA.CICSREGN.TRS quit
TERSE a PS/PDS file:
//TERSE EXEC PGM=AMATERSE,PARM= PACK //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=your.input.dataset.name //SYSUT2 DD DISP=(NEW,CATLG),DSN=your.output.dataset.name, // SPACE=(CYL,(500,100),RLSE),UNIT=3390
UNTERSE a PS file:
//TERSE EXEC PGM=AMATERSE,PARM=UN PACK //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=your.input.dataset.name //SYSUT2 DD DISP=(NEW,CATLG),DSN=your.output.dataset.name, // SPACE=(TRK,(500,100),RLSE),UNIT=3390
UNTERSE a PDS file:
//UNTERSE EXEC PGM=AMATERSE,PARM= UNPACK ,REGION=5000K //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=your.input.dataset.name //SYSUT2 DD DISP=(NEW,CATLG),DSN=your.output.dataset.name, // DCB=(RECFM=VB,BLKSIZE=9076,LRECL=9072), // SPACE=(TRK,(500,100,50),RLSE),UNIT=3390
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //* Transmit a PDSE into an XMIT data set. //XMIT EXEC PGM=IKJEFT01,REGION=4M //FILEIN DD DISP=SHR,DSN=YOUR.HLQ.LINKLIB //FILEOUT DD DSN=YOUR.HLQ.LINKLIB.XMIT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(100,100),RLSE) //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * XMIT <NODE>.<USERID> FILE(FILEIN) OUTFILE(FILEOUT) + SYSOUT(Z) NOEPILOG NOLOG NOPROLOG /* //* Pack the XMIT data set. //AMATERSE EXEC PGM=AMATERSE,PARM=PACK,REGION=5M //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=YOUR.HLQ.LINKLIB.XMIT //SYSUT2 DD DSN=YOUR.HLQ.LINKLIB.XMIT.TRS, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(25,10),RLSE)
The resulting file, YOUR.HLQ.LINKLIB.XMIT.TRS, can then be sent as binary to Connect Support or used however you need for a tersed file. To unterse the tersed file so that it can be used once again as a PDSE library, you will need to first pre-allocate the PDSE library, then run an unterse (UNPACK) on the tersed file followed by a TSO RECEIVE. The following sample JCL can be used for this (NOTE: the PDSE 'YOUR.HLQ.LINKLIB.PDSE' must be pre-allocated):
//JOBNAME JOB
//* Unpack the transmitted data set.
//AMATERSE EXEC PGM=AMATERSE,PARM=UNPACK,REGION=5M
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=SHR,DSN=YOUR.HLQ.LINKLIB.XMIT.TRS
//SYSUT2 DD DSN=YOUR.HLQ.LINKLIB.XMIT,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(TRK,(100,100),RLSE)
//* Receive into a preallocated PDSE.
//RECVPDS EXEC PGM=IKJEFT01,COND=(0,NE)
//INPUT DD DISP=SHR,DSN=YOUR.HLQ.LINKLIB.XMIT
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
RECEIVE INFILE(INPUT) NONAMES +
DSNAME('YOUR.HLQ.LINKLIB.PDSE')
/*
Multiple jobs can be submitted by using IEBGENER utility. It can be used to submit jobs at once or after completion of jobs one by one.
//* //SUBMIT1 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&JCLLIB1(&JCL1),DISP=SHR //SYSUT2 DD SYSOUT=(A,INTRDR) //SYSIN DD DUMMY //* //SUBMIT2 EXEC PGM=IEBGENER //SYSPRINT DD SYSOUT=* //SYSUT1 DD DSN=&JCLLIB2(&JCL2),DISP=SHR //SYSUT2 DD SYSOUT=(A,INTRDR) //SYSIN DD DUMMY //*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COPY EXEC PGM=FDRCOPY,REGION=4M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.LOAD //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DISK1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //TAPE1 DD UNIT=3390,VOL=SER=VOL001,DISP=OLD //SYSIN DD * COPY TYPE=DSF,NOCAT SELECT DSN=YOURHLQ.ACR.DATA.CMDLIB, NEWN=YOURHLQ.ACR.DATA.CMDLIB SELECT DSN=YOURHLQ.ACR.DATA.COPYLIB, NEWN=YOURHLQ.ACR.DATA.COPYLIB
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COPY EXEC PGM=FDRCOPY,REGION=4M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.LOAD //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSIN DD * COPY TYPE=DSF,DSNENQ=NONE,ENQERR=NO SELECT DSN=YOURHLQ.PLUSP44J.CONTROL,VOL=VOL001, NEWN=YOURHLQ.SEA.JCLPLUS.CONTROL,NVOL=VOL001 SELECT DSN=YOURHLQ.PLUSP44J.JCLLIB,VOL=VOL001, NEWN=YOURHLQ.SEA.JCLPLUS.JCLLIB,NVOL=VOL001
Using CATDSN for multi volume datasets:
//COPY EXEC PGM=FDRCOPY,REGION=4M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.LOAD //SYSPRINT DD SYSOUT=* //SYSPRIN1 DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSIN DD * COPY TYPE=DSF,DSNENQ=NONE,ENQERR=NO SELECT CATDSN=YOURHLQ.DATCOMAD.PROD.CAAXDATV, NEWN=YOURHLQ.DATCOMAD.PROD.CAAXDATV SELECT CATDSN=YOURHLQ.DATCOMAD.PROD.CAAXLPA, NEWN=YOURHLQ.DATCOMAD.PROD.CAAXLPA
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COPYJOB EXEC PGM=FDRCOPY,REGION=4M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.LOAD //SYSPRINT DD SYSOUT=* //SYSPRIN1 DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //SYSIN DD * COPY TYPE=DSF SELECT CATDSN=YOURHLQ.DATCOMAD.PROD.CAAXDATV, NEWN=YOURHLQ.DATCOMAD.PROD.CAAXDATV,NVOL=VOL001 SELECT CATDSN=YOURHLQ.DATCOMAD.PROD.CAAXLPA, NEWN=YOURHLQ.DATCOMAD.PROD.CAAXLPA,NVOL=VOL001
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//MOVE EXEC PGM=FDRCOPY,REGION=0M //STEPLIB DD DISP=SHR,DSN=YOURHLQ.LOAD //SYSPRINT DD SYSOUT=* //SYSUDUMP DD SYSOUT=* //DISK1 DD UNIT=SYSALLDA,VOL=SER=VOL001,DISP=OLD //TAPE1 DD UNIT=SYSALLDA,VOL=SER=VOL001,DISP=OLD //SYSIN DD * MOVE TYPE=DSF EXCLUDE ALLDSN,DSORG=EF EXCLUDE DSN=**.PROFILE SELECT DSN=**ISPF** /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //* Requires the PDS 8.6 (PDS86) freeware package from CBT Tape. //EMPTY01 EXEC PGM=IKJEFT01,REGION=4M //STEPLIB DD DSN=YOURHLQ.CBT.PDS86.LOAD,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * PDS86 'YOURHLQ.PRODUCT.LOAD' FIX RESET /*
Delete a Member and its Aliases, In the following example, the member MYTEST and its aliases will be deleted, from the YOURHLQ.LOAD library.
//S1 EXEC PGM=PDSM32 //PDSMPDS DD DSN=YOURHLQ.LOAD,DISP=SHR //PDSMRPT DD SYSOUT=A //SYSIN DD * DELETE MYTEST ALIAS //
Creates a generic SMP/E CSI data set and primes it with IBM GIMZPOOL. Space and naming are examples; use the product installation guide and your SMP/E standards for production sizing.
//JOBNAME JOB
//DEFINE EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//ZPOOL DD DISP=SHR,DSN=SYS1.MACLIB(GIMZPOOL)
//SYSIN DD *
DELETE YOURHLQ.SMPE.CSI CLUSTER
SET MAXCC=0
DEFINE CLUSTER ( -
NAME(YOURHLQ.SMPE.CSI) -
CYLINDERS(10 5) -
FREESPACE(10 5) -
KEYS(24 0) -
RECORDSIZE(24 143) -
SHAREOPTIONS(2 3)) -
DATA(NAME(YOURHLQ.SMPE.CSI.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX(NAME(YOURHLQ.SMPE.CSI.INDEX))
REPRO INFILE(ZPOOL) OUTDATASET(YOURHLQ.SMPE.CSI)
/*
Illustrates the zone relationship in a new SMP/E CSI. Real environments also require OPTIONS, UTILITY and DDDEF entries appropriate to the product and installation.
//SMPE EXEC PGM=GIMSMP,REGION=0M,PARM='PROCESS=WAIT'
//SMPCSI DD DISP=OLD,DSN=YOURHLQ.SMPE.CSI
//SMPOUT DD SYSOUT=*
//SMPRPT DD SYSOUT=*
//SMPLIST DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
UCLIN.
ADD GLOBALZONE ZONEINDEX( -
(TGTZONE,YOURHLQ.SMPE.CSI,TARGET), -
(DLBZONE,YOURHLQ.SMPE.CSI,DLIB)).
ENDUCL.
SET BDY(TGTZONE).
UCLIN.
ADD TARGETZONE RELATED(DLBZONE).
ENDUCL.
SET BDY(DLBZONE).
UCLIN.
ADD DLIBZONE RELATED(TGTZONE).
ENDUCL.
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* ------------------------------------------------------------
//* Build a compact SMP/E environment with GLOBAL/TARGET/DLIB
//* zones in one CSI. Review sizing and DDDEFs for the product.
//* ------------------------------------------------------------
//ALLOC EXEC PGM=IEFBR14
//SMPPTS DD DSN=YOURHLQ.SMPE.SMPPTS,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(10,5,20)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SMPSCDS DD DSN=YOURHLQ.SMPE.SMPSCDS,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(5,2,20)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SMPMTS DD DSN=YOURHLQ.SMPE.SMPMTS,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(5,2,20)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SMPSTS DD DSN=YOURHLQ.SMPE.SMPSTS,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(5,2,20)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//* ------------------------------------------------------------
//DEFCSI EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER( -
NAME(YOURHLQ.SMPE.CSI) -
CYLINDERS(10 5) -
FREESPACE(10 5) -
KEYS(24 0) -
RECORDSIZE(24 143) -
SHAREOPTIONS(2 3)) -
DATA(NAME(YOURHLQ.SMPE.CSI.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX(NAME(YOURHLQ.SMPE.CSI.INDEX))
/*
//INITCSI EXEC PGM=IDCAMS
//ZPOOL DD DISP=SHR,DSN=SYS1.MACLIB(GIMZPOOL)
//SMPCSI DD DISP=OLD,DSN=YOURHLQ.SMPE.CSI
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO INFILE(ZPOOL) OUTFILE(SMPCSI)
/*
//BUILD EXEC PGM=GIMSMP,REGION=0M,PARM='PROCESS=WAIT'
//SMPCSI DD DISP=OLD,DSN=YOURHLQ.SMPE.CSI
//TGTZONE DD DISP=OLD,DSN=YOURHLQ.SMPE.CSI
//DLBZONE DD DISP=OLD,DSN=YOURHLQ.SMPE.CSI
//SMPOUT DD SYSOUT=*
//SMPRPT DD SYSOUT=*
//SMPLIST DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
UCLIN.
ADD GZONE
ZONEINDEX(
(TGTZONE,YOURHLQ.SMPE.CSI,TARGET),
(DLBZONE,YOURHLQ.SMPE.CSI,DLIB)).
ADD OPTIONS(OPT1) RETRYDDN(ALL).
ENDUCL.
SET BDY(TGTZONE).
UCLIN.
ADD TARGETZONE(TGTZONE) OPTIONS(OPT1)
SREL(<SREL>) RELATED(DLBZONE).
ENDUCL.
SET BDY(DLBZONE).
UCLIN.
ADD DLIBZONE(DLBZONE) OPTIONS(OPT1)
SREL(<SREL>) RELATED(TGTZONE).
ENDUCL.
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* ------------------------------------------------------------
//* Create separate GLOBAL, TARGET and DLIB CSI data sets.
//* Repeat DEFCSI/INITCSI for each CSI before defining zones.
//* ------------------------------------------------------------
//DEFGLOB EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER( -
NAME(YOURHLQ.SMPE.GLOBAL.CSI) -
CYLINDERS(3 1) FREESPACE(10 5) -
KEYS(24 0) RECORDSIZE(24 143) -
SHAREOPTIONS(2 3)) -
DATA(NAME(YOURHLQ.SMPE.GLOBAL.CSI.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX(NAME(YOURHLQ.SMPE.GLOBAL.CSI.INDEX))
DEFINE CLUSTER( -
NAME(YOURHLQ.SMPE.TARGET.CSI) -
CYLINDERS(8 3) FREESPACE(10 5) -
KEYS(24 0) RECORDSIZE(24 143) -
SHAREOPTIONS(2 3)) -
DATA(NAME(YOURHLQ.SMPE.TARGET.CSI.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX(NAME(YOURHLQ.SMPE.TARGET.CSI.INDEX))
DEFINE CLUSTER( -
NAME(YOURHLQ.SMPE.DLIB.CSI) -
CYLINDERS(8 3) FREESPACE(10 5) -
KEYS(24 0) RECORDSIZE(24 143) -
SHAREOPTIONS(2 3)) -
DATA(NAME(YOURHLQ.SMPE.DLIB.CSI.DATA) -
CONTROLINTERVALSIZE(4096)) -
INDEX(NAME(YOURHLQ.SMPE.DLIB.CSI.INDEX))
/*
//INITCSI EXEC PGM=IDCAMS
//ZPOOL DD DISP=SHR,DSN=SYS1.MACLIB(GIMZPOOL)
//GLOBAL DD DISP=OLD,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//TARGET DD DISP=OLD,DSN=YOURHLQ.SMPE.TARGET.CSI
//DLIB DD DISP=OLD,DSN=YOURHLQ.SMPE.DLIB.CSI
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
REPRO INFILE(ZPOOL) OUTFILE(GLOBAL)
REPRO INFILE(ZPOOL) OUTFILE(TARGET)
REPRO INFILE(ZPOOL) OUTFILE(DLIB)
/*
//BUILD EXEC PGM=GIMSMP,REGION=0M,PARM='PROCESS=WAIT'
//SMPCSI DD DISP=OLD,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//TGTZONE DD DISP=OLD,DSN=YOURHLQ.SMPE.TARGET.CSI
//DLBZONE DD DISP=OLD,DSN=YOURHLQ.SMPE.DLIB.CSI
//SMPOUT DD SYSOUT=*
//SMPRPT DD SYSOUT=*
//SMPLIST DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
UCLIN.
ADD GZONE
ZONEINDEX(
(TGTZONE,YOURHLQ.SMPE.TARGET.CSI,TARGET),
(DLBZONE,YOURHLQ.SMPE.DLIB.CSI,DLIB)).
ENDUCL.
SET BDY(TGTZONE).
UCLIN.
ADD TARGETZONE(TGTZONE)
SREL(<SREL>) RELATED(DLBZONE).
ENDUCL.
SET BDY(DLBZONE).
UCLIN.
ADD DLIBZONE(DLBZONE)
SREL(<SREL>) RELATED(TGTZONE).
ENDUCL.
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Reject received-but-not-installed SYSMODs for one FMID.
//* Run a LIST/REPORT first and review the REJECT summary afterwards.
//REJECT EXEC PGM=GIMSMP,REGION=0M,PARM='PROCESS=WAIT'
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPPTS DD DISP=OLD,DSN=YOURHLQ.SMPE.SMPPTS
//SMPOUT DD SYSOUT=*
//SMPRPT DD SYSOUT=*
//SMPLIST DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
REJECT FUNCTIONS PTFS APARS USERMODS
FORFMID(<FMID>).
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//UNZIP EXEC PGM=GIMUNZIP,REGION=0M,PARM='HASH=NO'
//SYSUT3 DD UNIT=SYSALLDA,SPACE=(CYL,(50,10))
//SYSUT4 DD UNIT=SYSALLDA,SPACE=(CYL,(25,5))
//SMPJHOME DD PATH='/usr/lpp/java/current/',PATHDISP=KEEP
//SMPCPATH DD PATH='/usr/lpp/smp/classes/',PATHDISP=KEEP
//SMPOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPDIR DD PATH='/u/userid/order/SMPRELF',PATHDISP=KEEP
//SYSIN DD *
<GIMUNZIP>
<ARCHDEF
name="YOURHLQ.PRODUCT.PAX.Z"
volume="VOL001"
newname="YOURHLQ.PRODUCT.PACKAGE">
</ARCHDEF>
</GIMUNZIP>
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //RECEIVE EXEC PGM=GIMSMP //SMPCSI DD DSN=SMPE.GLOBAL.CSI,DISP=SHR //SMPNTS DD PATH='/u/smpe/smpnts/',PATHDISP=KEEP //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SMPCNTL DD * SET BOUNDARY(GLOBAL). RECEIVE SYSMODS HOLDDATA ORDER( /* Place an order for service */ ORDERSERVER(ORDRSRVR) CLIENT(MYCLIENT) CONTENT( PTFS(UQ12345,UQ98765) /* Get these PTFs, and any.. */ ) /* ..requisites.. */ FORTGTZONES(ZOS14) /* ..for this target zone */ ). /* //ORDRSRVR DD * <ORDERSERVER url="https://YOURHLQ.boulder.ibm.com/services/projects/ecc/ws/" keyring="MRWKYRNG" certificate="SMPE Client Certificate"> </ORDERSERVER> /* //MYCLIENT DD * <CLIENT javahome="/usr/lpp/java/YOURHLQ.4" classpath="/usr/lpp/smp/classes"> </CLIENT>
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//SMPECV EXEC PGM=GIMSMP,REGION=0M,PARM='PROCESS=WAIT' //SMPCSI DD DISP=SHR,DSN=YOURHLQ.GLOBAL.CSI //SMPNTS DD PATHDISP=KEEP,PATH='/u/sysprog/smpnts/order' //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPLOG DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SMPCNTL DD * SET BOUNDARY(GLOBAL). RECEIVE FROMNETWORK( SERVER(SERVINFO) CLIENT(CLNTINFO) TRANSFERONLY ). /* //SERVINFO DD * <SERVER host="<IBM_DELIVERY_HOST>" user="<IBM_USER>" pw="<IBM_PASSWORD>"> <PACKAGE file="<ORDER_PATH>/GIMPAF.XML" hash="<PACKAGE_HASH>" id="<ORDER_ID>"> </PACKAGE> </SERVER> /* //CLNTINFO DD * <CLIENT javahome="/usr/lpp/java/current" classpath="/usr/lpp/smp/classes/" ftpccc="no"> <FTPOPTIONS>-v</FTPOPTIONS> </CLIENT> /*
ADD THE 'LIST' PARAMETER TO THE RECEIVE COMMAND, IF A DESCRIPTION IS DESIRED. RECEIVE SYSMODS LIST
//SMPPTFIN DD DISP=SHR, // DSN=YOURHLQ.BSA.INPUT.DATA(BSAMCS) //* //SMPCNTL DD * SET BDY(GLOBAL) . RECEIVE SYSMODS RFPREFIX(YOURHLQ.BETA.BSA.INPUT) . //
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* Sample RECEIVE ORDER JCL //* //RECEIVE EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.DATA.DATA.CSI //SMPJHOME DD PATHDISP=KEEP,PATH='/usr/lpp/java/YOURHLQ.0/' //* SMPNTS DD PATHDISP=KEEP,PATH='/SMPNTS1/' SITE //SMPNTS DD PATHDISP=KEEP,PATH='/download/zos/' site //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SMPCNTL DD * SET BDY(GLOBAL). RECEIVE ORDER( ORDERSERVER(ORDSERVR) CLIENT(CLNTINFO) CONTENT(ALL) /* CONTENT(RECOMMENDED) */ /* CONTENT(CRITICAL) */ /* CONTENT(HOLDDATA) */ /* CONTENT(APARS(OA19111)) */ /* CONTENT(PTFS(UA92338)) */ /* TRANSFERONLY */ FORTGTZONES(TZN) WAIT(300) ) DELETEPKG. /* //ORDSERVR DD * <ORDERSERVER url="https://YOURHLQ.eapi.broadcom.com/receiveorder" keyring="SMPEUSR/SMPEService" certificate="Broadcom Certificate" inventory="all"> </ORDERSERVER> //CLNTINFO DD * <CLIENT downloadmethod="https" classpath="/usr/lpp/smp/classes/"> </CLIENT> /*
) ORDERSERVER and CLIENTINFO: Broadcom:
//ORDSERVR DD * <ORDERSERVER url="https://YOURHLQ.eapi.broadcom.com/receiveorder" keyring="SMPEUSR/SMPEService" certificate="Broadcom Certificate" inventory="all"> </ORDERSERVER> //CLNTINFO DD * <CLIENT downloadmethod="https" classpath="/usr/lpp/smp/classes/"> </CLIENT> /*
BMC:
//ORDSERVR DD * <ORDERSERVER url="https://ws-YOURHLQ.prod.bmc.com/smpe" keyring="SMPEUSR/SMPEService" certificate="BMC Certificate" inventory="all"> </ORDERSERVER> //CLNTINFO DD * <CLIENT downloadmethod="https" classpath="/usr/lpp/smp/classes/"> </CLIENT> /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//CLNTINFO DD * <CLIENT ftpccc="no" classpath="/usr/lpp/smp/classes/"> <FTPOPTIONS>-v -f "//'YOURHLQ.FTPS.DATA(BMC)'" </FTPOPTIONS> </CLIENT> /*
IBM:
//ORDSERVR DD * <ORDERSERVER url="https://YOURHLQ.boulder.ibm.com/services/projects/ecc/ws" keyring="SMPEUSR/SMPEService" certificate="SMPE Client Certificate"> </ORDERSERVER> //CLNTINFO DD * <CLIENT javahome="/usr/lpp/java/YOURHLQ.0" classpath="/usr/lpp/smp/classes/" ftpccc="no"> <FTPOPTIONS>-v -f "//'YOURHLQ.FTPS.DATA(IBM)'" </FTPOPTIONS> </CLIENT> /*
Receives an SMP/E order staged in an SMPNTS directory. Replace ORDERID and the SMPNTS path with values from the downloaded service package.
//S1 EXEC PGM=GIMSMP,PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPNTS DD PATH='/u/userid/smpnts',PATHDISP=KEEP
//SMPCNTL DD *
SET BDY(GLOBAL).
RECEIVE FROMNTS('ORDERID') DELETEPKG.
/*
Receives selected SYSMODs from an SMPNTS order instead of receiving the entire order.
//RCVNTS EXEC PGM=GIMSMP,REGION=300M,PARM='PROCESS=WAIT'
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPNTS DD PATH='/u/userid/smpnts',PATHDISP=KEEP
//SMPCNTL DD *
SET BDY(GLOBAL).
RECEIVE SELECT(UZ00001,UZ00002) -
FROMNTS('ORDERID').
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* Sample APPLY CHECK JCL //* //APPLYCK EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.DATA.V12R1M0.CSI //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPHRPT DD SYSOUT=* //SMPCNTL DD * SET BDY(TZN). APPLY PTFS FORFMID(CAL2C10) GROUPEXTEND BYPASS(HOLDSYSTEM,HOLDUSER) CHECK .
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* Sample APPLY JCL //* //APPLY EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.DATA.V12R1M0.CSI //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPHRPT DD SYSOUT=* //SMPCNTL DD * SET BDY(TZN). APPLY PTFS FORFMID(CAL2C10) GROUPEXTEND C(ALL) BYPASS(HOLDSYSTEM) /* CHECK */ .
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JS010 EXEC PGM=GIMSMP, // PARM='PROCESS=WAIT' //SMPCSI DD DISP=SHR,DSN=YOURHLQ.JCHK.V1200HA.CSI //SMPCNTL DD * SET BOUNDARY (PCLC00T) . APPLY CHECK SELECT ( LU00209, LU00596, LU00807, LU00972, LU04801, SO16087 ) BYPASS(HOLDSYS) . /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JS010 EXEC PGM=GIMSMP, // PARM='PROCESS=WAIT' //SMPCSI DD DSN=YOURHLQ.JCHK.V1200HA.CSI, // DISP=SHR //* //* ADD RELFILES HERE IF NEEDED. //* //* ADD SYSLIB DATA SETS HERE IF //* NEEDED. //* //SMPCNTL DD * SET BOUNDARY (PCLC00D) . ACCEPT PTFS GEXT BYPASS ( HOLDSYSTEM ) ASSEM COMPRESS(ALL) NOJCLINREPORT RETRY(YES) . /*
For more examples refer LIST command examples in SMPE commands IBM workbook List all the PTFs
//LIST EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN= your .CSI //SMPLOG DD DUMMY //SMPLOGA DD DUMMY //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPCNTL DD * SET BDY( targetzone ). LIST PTFS. /*
List SYSMODS that are received but not installed
//LIST EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.SAMVANTG.V14R1M0.CSI //SMPLOG DD DUMMY //SMPLOGA DD DUMMY //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPCNTL DD * SET BDY(GLOBAL). LIST SYSMODS NOAPPLY(TZN).
List all DDDEF entries defined in Target zone
//LIST EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.XPEDITER.DATA.CSI //SMPLOG DD DUMMY //SMPLOGA DD DUMMY //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPCNTL DD * SET BDY(TZN). LIST DDDEF. /*
To determine whether a SYSMOD has been installed in target zone
//LIST EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.XPEDITER.DATA.CSI //SMPLOG DD DUMMY //SMPLOGA DD DUMMY //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPCNTL DD * SET BDY(TZN). LIST SYSMOD(UR12345). /*
To see a list of the actions associated with system holds for all the SYSMODS that are received but not applied yet
//LIST EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.XPEDITER.DATA.CSI //SMPLOG DD DUMMY //SMPLOGA DD DUMMY //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SMPCNTL DD * SET BDY(GLOBAL). LIST SYSMODS HOLDDATA NOAPPLY(TZN). /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* Sample JCL to generate Error SYSMOD report //* //REPORT EXEC PGM=GIMSMP,REGION=0M //SMPCSI DD DISP=SHR,DSN=YOURHLQ.DATA.V12R1M0.CSI //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPPUNCH DD SYSOUT=* //SMPCNTL DD * SET BDY(GLOBAL). REPORT ERRSYSMODS ZONES(TZN). /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JS010 EXEC PGM=GIMSMP, // PARM='PROCESS=WAIT' //SMPCSI DD DSN=YOURHLQ.JCHK.V1200HA.CSI, // DISP=SHR //SMPOUT DD SYSOUT=(,) //SMPRPT DD SYSOUT=(,) //SMPPUNCH DD DUMMY //SMPCNTL DD * SET BOUNDARY (GLOBAL) . REPORT MISSINGFIX ZONES(PCLC00T) FIXCAT(*) . /* //*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Report missing service for selected target zones and z/OS FIXCATs.
//SMPRPT EXEC PGM=GIMSMP,REGION=100M,
// PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
REPORT MISSINGFIX
ZONES(TGT001,TGT002)
FIXCAT(
IBM.TargetSystem-RequiredService.z/OS.*
IBM.Coexistence.z/OS.*
IBM.Coexistence.z/OSMF.*
IBM.Coexistence.ICSF.*
IBM.Function.HealthChecker
).
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB
//* Report missing fixes for hardware/function compatibility categories.
//SMPRPT EXEC PGM=GIMSMP,REGION=100M,
// PARM='PROCESS=WAIT',DYNAMNBR=120
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
REPORT MISSINGFIX
ZONES(TGT001,TGT002)
FIXCAT(
IBM.Device.Server.*
IBM.Function.ParallelSysplex*
IBM.Function.ServerTimeProtocol
IBM.Function.zHighPerformanceFICON
IBM.Function.HyperLink
IBM.Function.DataSetEncryption
IBM.Coexistence.ICSF.*
).
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JS010 EXEC PGM=GIMSMP, // PARM='PROCESS=WAIT' //SMPCSI DD DSN=YOURHLQ.JCHK.V1200HA.CSI, // DISP=SHR //* //SMPCNTL DD * SET BOUNDARY (GLOBAL) . REJECT PURGE(PCLC00D) APARS PTFS FUNCTIONS . /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* //* //* CLEANUP & COMPRESS SMPLTS, SMPMTS, SMPSTS, AND SMPSCDS DATA SETS. //* //SMPE EXEC PGM=GIMSMP,REGION=100M, // PARM='PROCESS=WAIT', // DYNAMNBR=120 //SMPCSI DD DISP=SHR,DSN=YOURHLQ.DATA.GLOBAL.CSI //SMPOUT DD SYSOUT=* //SMPRPT DD SYSOUT=* //SMPLIST DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SMPCNTL DD * SET BOUNDARY(RESME01) . CLEANUP COMPRESS(ALL) . /*
Generic three-stage skeleton for cloning a release volume set: full-volume copy, controlled recataloging, then SMP/E zone/DDDEF adjustment when a CSI is cloned. A real SYSRES clone requires a release-specific inventory and validation plan.
//JOBNAME JOB
//* ------------------------------------------------------------
//* 1. Physical full-volume copy to the new target volume.
//* ------------------------------------------------------------
//COPYRES EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//INPUT DD UNIT=3390,DISP=SHR,VOL=SER=SRC001
//OUTPUT DD UNIT=3390,DISP=OLD,VOL=SER=TGT001
//SYSIN DD *
COPY FULL -
INDDNAME(INPUT) -
OUTDDNAME(OUTPUT) -
CANCELERROR PURGE
/*
//* ------------------------------------------------------------
//* 2. Recatalog / rename only the data sets that require it.
//* Build this list from the cloned release design.
//* ------------------------------------------------------------
//CATALOG EXEC PGM=IDCAMS,COND=(4,LT)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER ( -
NAME(YOURHLQ.OMVS.NEWROOT.ZFS) -
VOLUMES(TGT001) -
RECATALOG -
LINEAR)
/*
//* ------------------------------------------------------------
//* 3. If an SMP/E CSI is cloned, rename the cloned zone and
//* adjust DDDEF volume references in a controlled copy.
//* ------------------------------------------------------------
//SMPE EXEC PGM=GIMSMP,COND=(4,LT),PARM='PROCESS=WAIT'
//SMPCSI DD DISP=SHR,DSN=YOURHLQ.SMPE.GLOBAL.CSI
//SMPOUT DD SYSOUT=*
//SMPRPT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SMPCNTL DD *
SET BDY(GLOBAL).
ZONERENAME(OLDTGT) TO(NEWTGT) -
NEWDATASET(YOURHLQ.SMPE.NEW.CSI).
SET BDY(NEWTGT).
ZONEEDIT DDDEF.
CHANGE VOLUME(SRC001,TGT001).
ENDZONEEDIT.
/*
An AMBLIST is useful in determining the module load points depending on exactly what PTFs and test fixes are/are not applied. The MEMBER= depends on which load module the abend occurs.
//AMBLIST EXEC PGM=AMBLIST,REGION=16M //SYSPRINT DD SYSOUT=* //SYSLIB DD DISP=(SHR),DSN=YOURHLQ.PDSE //SYSIN DD * LISTIDR MEMBER=(APP1) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//AMBLIST EXEC PGM=AMBLIST,REGION=16M //SYSPRINT DD SYSOUT=* //LOADLIB DD DISP=(SHR),DSN=YOURHLQ.PDSE //SYSIN DD * LISTLOAD DDN=LOADLIB,MEMBER=(APP1) /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//AMBLIST EXEC PGM=AMBLIST,REGION=16M //SYSPRINT DD SYSOUT=* //LOADLIB DD DSN=YOURHLQ.PDSE,DISP=(SHR) //SYSIN DD * LISTLOAD DDN=LOADLIB,MEMBER=(APP1),OUTPUT=XREF /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//EXAMPLE2 EXEC PGM=AMBLIST,REGION=16M //SYSPRINT DD SYSOUT=* //LOADLIB2 DD DSN=YOURHLQ.PDSE,DISP=(SHR) //SYSIN DD * LISTLOAD DDN=LOADLIB2,MEMBER=(APP1),OUTPUT=MODLIST /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//EXAMPLE3 EXEC PGM=AMBLIST,REGION=16M //SYSPRINT DD SYSOUT=* //HFS1 DD PATH='/u/userid/main',PATHDISP=(KEEP,KEEP) //SYSIN DD * LISTLOAD DDN=HFS1,OUTPUT=MODLIST /*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//* ******************************************************************* //* //* Create DIRs in the /service25 mount point for z/OS 2.5 under UID(0) //* - some of these may already exist //* ******************************************************************* //MKDIR EXEC PGM=IKJEFT01,REGION=100M //SYSEXEC DD DSN=SYS1.SBPXEXEC,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * oshell echo mkdir /service25/usr/lpp/cobol | su; oshell echo mkdir /service25/usr/lpp/IBM/cobol/igyv6r3 | su; oshell echo mkdir /service25/usr/lpp/IBM/zosconnect | su; oshell echo mkdir /service25/usr/lpp/netview | su; oshell echo mkdir /service25/usr/lpp/ing | su; oshell echo mkdir /service25/usr/lpp/TWS | su; oshell echo mkdir /service25/usr/lpp/ixm | su; oshell echo mkdir /service25/usr/lpp/psf | su; oshell echo mkdir /service25/usr/lpp/IBM/zexpl | su; oshell echo mkdir /service25/usr/lpp/IBM/zee | su; oshell echo mkdir /service25/usr/lpp/Rocket/rsusr/ported | su; oshell echo mkdir /service25/usr/lpp/IBM/ucd | su; oshell echo mkdir /service25/usr/lpp/IBM/ucd/YOURHLQ.DATA.0.0 | su; oshell echo mkdir /service25/usr/lpp/IBM/dbb | su; oshell echo mkdir /service25/usr/lpp/IBM/debug | su; oshell echo mkdir /service25/usr/lpp/java | su; oshell echo mkdir /service25/usr/lpp/java/YOURHLQ.0 | su; oshell echo mkdir /service25/usr/lpp/java/YOURHLQ.1 | su; oshell echo mkdir /service25/usr/lpp/java/YOURHLQ.0 | su; oshell echo mkdir /service25/usr/lpp/java/YOURHLQ.0_64 | su; oshell echo mkdir /service25/usr/lpp/java/YOURHLQ.0_64 | su; /* //* ******************************************************************* //* //* Change permissions of DIRs created //* ******************************************************************* //CHMOD EXEC PGM=IKJEFT01,REGION=100M //SYSEXEC DD DSN=SYS1.SBPXEXEC,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * oshell echo chmod 755 /service25/usr/lpp/cobol | su; oshell echo chmod 755 /service25/usr/lpp/IBM/cobol/igyv6r3 | su; oshell echo chmod 775 /service25/usr/lpp/IBM/zosconnect | su; oshell echo chmod 755 /service25/usr/lpp/netview | su; oshell echo chmod 755 /service25/usr/lpp/ing | su; oshell echo chmod 755 /service25/usr/lpp/TWS | su; oshell echo chmod 755 /service25/usr/lpp/ixm | su; oshell echo chmod 755 /service25/usr/lpp/psf | su; oshell echo chmod 755 /service25/usr/lpp/IBM/zexpl | su; oshell echo chmod 755 /service25/usr/lpp/IBM/zee | su; oshell echo chmod 755 /service25/usr/lpp/Rocket/rsusr/ported | su; oshell echo chmod 755 /service25/usr/lpp/IBM/ucd | su; oshell echo chmod 755 /service25/usr/lpp/IBM/ucd/YOURHLQ.DATA.0.0 | su; oshell echo chmod 755 /service25/usr/lpp/IBM/dbb | su; oshell echo chmod 755 /service25/usr/lpp/IBM/debug | su; oshell echo chmod 755 /service25/usr/lpp/java | su; oshell echo chmod 755 /service25/usr/lpp/java/YOURHLQ.0 | su; oshell echo chmod 755 /service25/usr/lpp/java/YOURHLQ.1 | su; oshell echo chmod 755 /service25/usr/lpp/java/YOURHLQ.0 | su; oshell echo chmod 755 /service25/usr/lpp/java/YOURHLQ.0_64 | su; oshell echo chmod 755 /service25/usr/lpp/java/YOURHLQ.0_64 | su; /* //* ******************************************************************* //* //* Create symbolic links //* ******************************************************************* //SYMLNK EXEC PGM=IKJEFT01,REGION=100M //SYSEXEC DD DSN=SYS1.SBPXEXEC,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * oshell echo + ln -s /usr/lpp/Rocket/rsusr/ported/bin/bash /service25/bin/bash | su;
The CFRM reference material is preserved as separate report, define and delete scenarios. Real coupling-facility names, policy names, structure names, CPC serials and system identifiers have been replaced with placeholders.
Read-only IXCMIAPU report of the active CFRM policy and its structure definitions.
//CFRMRPT EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) /*
Template showing the policy, coupling-facility attributes, preferred lists and representative XCF/JES2/LOGR structure definitions.
//CFRMDEF EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) DEFINE POLICY NAME(YOURPOL) REPLACE(YES) CF NAME(CF01) TYPE(<MACHINE-TYPE>) MFG(IBM) PLANT(02) SEQUENCE(<CPC-SERIAL>) PARTITION(<PARTITION>) CPCID(<CPCID>) DUMPSPACE(5000) CF NAME(CF02) TYPE(<MACHINE-TYPE>) MFG(IBM) PLANT(02) SEQUENCE(<CPC-SERIAL>) PARTITION(<PARTITION>) CPCID(<CPCID>) DUMPSPACE(5000) STRUCTURE NAME(IXC_YOURPLEX01) SIZE(9000) PREFLIST(CF01,CF02) REBUILDPERCENT(1) STRUCTURE NAME(JES2CKPT1_YOURPLEX) INITSIZE(25000) SIZE(25000) PREFLIST(CF01,CF02) REBUILDPERCENT(1) STRUCTURE NAME(OPERLOG_YOURPLEX) INITSIZE(5000) SIZE(10000) FULLTHRESHOLD(0) PREFLIST(CF02,CF01) REBUILDPERCENT(1) STRUCTURE NAME(LOGREC_YOURPLEX) INITSIZE(5000) SIZE(10000) FULLTHRESHOLD(0) PREFLIST(CF02,CF01) REBUILDPERCENT(1) /*
Deletes a named policy definition after it is no longer required.
//DELETE EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) DELETE POLICY NAME(YOURPOL) /*
Points IXCMIAPU at a specified CFRM couple data set rather than relying only on the active policy context.
//CFRMRPT EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) DSN(YOURHLQ.YOURPLEX.CFRM.CDS01) /*
Shows the reference pattern for keeping a long CFRM policy definition in a separate PDS member rather than embedding the entire policy inline.
//CFRMDEF EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) DEFINE POLICY NAME(YOURPOL) REPLACE(YES) //POLICY DD DISP=SHR,DSN=YOURHLQ.SYSPLEX.CNTL(YOURPOL) /*
IXCMIAPU LOGR report retained from the CFRM notes because it is commonly used while validating CF-backed logger configuration.
//LOGRRPT EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) LIST STRUCTURE NAME(*) LIST LOGSTREAM NAME(*) /*
Template for two CF-backed CICS log streams using a named logger structure, data classes, staging sizes and offload thresholds.
//LOGRDEF EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(YES) DEFINE LOGSTREAM NAME(YOUR.CICS.DFHLOG) STRUCTNAME(YOUR_DFHLOG_STRUCT) LS_DATACLAS(YOURDATACLAS) HLQ(YOURHLQ) MODEL(NO) LS_SIZE(2000) STG_DATACLAS(YOURDATACLAS) STG_SIZE(5000) LOWOFFLOAD(50) HIGHOFFLOAD(80) STG_DUPLEX(YES) DUPLEXMODE(UNCOND) RETPD(0) AUTODELETE(NO) OFFLOADRECALL(YES) DASDONLY(NO) DIAG(NO) DEFINE LOGSTREAM NAME(YOUR.CICS.DFHSHUNT) STRUCTNAME(YOUR_DFHSHUNT_STRUCT) LS_DATACLAS(YOURDATACLAS) HLQ(YOURHLQ) MODEL(NO) LS_SIZE(1000) STG_DATACLAS(YOURDATACLAS) STG_SIZE(2000) LOWOFFLOAD(50) HIGHOFFLOAD(80) STG_DUPLEX(YES) DUPLEXMODE(UNCOND) RETPD(0) AUTODELETE(NO) OFFLOADRECALL(YES) DASDONLY(NO) DIAG(NO) /*
System Logger administration is split into read-only display/report examples and change examples. The original IBM LOGR keyword reference link is retained with each recipe.
Operational warning: a generated DEFINE LOGSTREAM statement must not contain keywords with null values; remove such keywords before submitting the definition.Lists log streams without the detailed administrative report.
//LIST EXEC PGM=IXCMIAPU,REGION=0M //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(NO) LIST LOGSTREAM NAME(*) DETAIL(NO) /*
Produces the detailed LOGR administrative report for all log streams.
//LIST EXEC PGM=IXCMIAPU,REGION=0M //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(YES) LIST LOGSTREAM NAME(*) DETAIL(YES) /*
Updates selected log-stream sizing values. Treat as a change-controlled example and first report the current definition.
//LOGDEFN EXEC PGM=IXCMIAPU,REGION=0M //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(YES) UPDATE LOGSTREAM NAME(YOUR.LOGSTREAM.NAME) LS_SIZE(6000) STG_SIZE(4000) /*
Deletes the named log stream definition. Use only after confirming retention, connections and product ownership.
//DELETE EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(NO) DELETE LOGSTREAM NAME(YOUR.LOGSTREAM.NAME) /*
Defines a DASD-only log stream and exposes the common sizing, offload, retention, duplexing and allocation keywords .
//DEFINE EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(YES) DEFINE LOGSTREAM NAME(YOUR.LOGSTREAM.NAME) DASDONLY(YES) STG_DUPLEX(YES) STG_SIZE(3000) DUPLEXMODE(UNCOND) HLQ(YOURHLQ) HIGHOFFLOAD(80) LOWOFFLOAD(40) LS_SIZE(0) MODEL(NO) RETPD(0) AUTODELETE(NO) OFFLOADRECALL(YES) WARNPRIMARY(NO) LS_ALLOCAHEAD(0) DIAG(NO) LOGGERDUPLEX(UNCOND) GROUP(YOURGROUP) MAXBUFSIZE(64000) /*
Deletes a named LOGR structure definition. This is destructive administrative work and requires confirmation that nothing still depends on it.
//DELETE EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSABEND DD SYSOUT=* //SYSIN DD * DATA TYPE(LOGR) REPORT(YES) DELETE STRUCTURE NAME(YOUR.CF.STRUCTURE) /*
The couple-data-set examples are kept separately for SYSPLEX, ARM and CFRM because their DATA TYPE and item capacities differ. The reference's IBM “considerations for all couple data sets” link is retained below.
Operational note: use an appropriate STORCLAS(...) approach for non-SMS allocation according to the installation standard.Defines a pair of SYSPLEX couple data sets with capacity items for groups, members and GRS-related data.
//STEP1 EXEC PGM=IXCL1DSU //STEPLIB DD DISP=SHR,DSN=SYS1.MIGLIB //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.SYSPLEX.CDS01) VOLSER(VOL001) CATALOG MAXSYSTEM(8) DATA TYPE(SYSPLEX) ITEM NAME(GROUP) NUMBER(200) ITEM NAME(MEMBER) NUMBER(500) ITEM NAME(GRS) NUMBER(1) ITEM NAME(CLUSTER) NUMBER(1) ITEM NAME(SSTATDET) NUMBER(1) DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.SYSPLEX.CDS02) VOLSER(VOL001) CATALOG MAXSYSTEM(8) DATA TYPE(SYSPLEX) ITEM NAME(GROUP) NUMBER(200) ITEM NAME(MEMBER) NUMBER(500) ITEM NAME(GRS) NUMBER(1) ITEM NAME(CLUSTER) NUMBER(1) ITEM NAME(SSTATDET) NUMBER(1) /*
Defines a pair of ARM couple data sets and their policy/element capacities.
//STEP10 EXEC PGM=IXCL1DSU //STEPLIB DD DSN=SYS1.MIGLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.ARM.CDS01) VOLSER(VOL001) MAXSYSTEM(8) CATALOG DATA TYPE(ARM) ITEM NAME(POLICY) NUMBER(5) ITEM NAME(MAXELEM) NUMBER(25) ITEM NAME(TOTELEM) NUMBER(250) DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.ARM.CDS02) VOLSER(VOL001) MAXSYSTEM(8) CATALOG DATA TYPE(ARM) ITEM NAME(POLICY) NUMBER(5) ITEM NAME(MAXELEM) NUMBER(25) ITEM NAME(TOTELEM) NUMBER(250) /*
Defines a pair of CFRM couple data sets with capacities for policies, coupling facilities, structures, connectors and system-managed rebuild data.
//STEP1 EXEC PGM=IXCL1DSU //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.CFRM.CDS01) VOLSER(VOL001) CATALOG MAXSYSTEM(8) DATA TYPE(CFRM) ITEM NAME(POLICY) NUMBER(8) ITEM NAME(CF) NUMBER(8) ITEM NAME(STR) NUMBER(255) ITEM NAME(CONNECT) NUMBER(80) ITEM NAME(SMREBLD) NUMBER(1) DEFINEDS SYSPLEX(YOURPLEX) DSN(YOURHLQ.YOURPLEX.CFRM.CDS02) VOLSER(VOL001) CATALOG MAXSYSTEM(8) DATA TYPE(CFRM) ITEM NAME(POLICY) NUMBER(8) ITEM NAME(CF) NUMBER(8) ITEM NAME(STR) NUMBER(255) ITEM NAME(CONNECT) NUMBER(80) ITEM NAME(SMREBLD) NUMBER(1) /*
One-stage SADMP generation for the currently running z/OS release. Replace XXXX/ YYYY/ ZZZ with the residence-device, output-device and console addresses, and keep the AMDSADMP continuation marks in the required columns.
//JOBNAME JOB
//* ------------------------------------------------------------
//* Build SADMP for the z/OS level currently executing this job.
//* ------------------------------------------------------------
//SCRATCH EXEC PGM=IEHPROGM
//DD1 DD UNIT=3390,VOL=SER=SAD001,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
SCRATCH DSNAME=SYS1.PAGEDUMP.VSAD001,PURGE,
VOL=3390=SAD001
/*
//OSG EXEC PGM=AMDSAOSG
//STEPLIB DD DISP=SHR,DSN=SYS1.LINKLIB
//SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB
// DD DISP=SHR,DSN=SYS1.MODGEN
//DPLTEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSADPL)
//IPLTEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSAIPD)
//PGETEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSAPGE)
//IPITEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSAIPI)
//DVITEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSADVI)
//TRK0TEXT DD DSN=&&TRK0TEXT,DISP=(,PASS),
// SPACE=(4096,(2,1)),UNIT=3390
//DSFSYSIN DD DSN=&&DSFSYSIN,DISP=(,PASS),
// SPACE=(80,(4,1)),UNIT=3390
//GENPRINT DD SYSOUT=*
//GENPARMS DD *
AMDSADMP IPL=D/XXXX,VOLSER=SAD001, X
MINASID=ALL, X
DDSPROMPT=YES, X
OUTPUT=(DYYYY,SYS1.SADMP), X
CONSOLE=((ZZZ,3278)), X
REAL=USED
END
/*
//PUTIPL EXEC PGM=ICKDSF,REGION=4M
//IPLDEV DD DISP=SHR,UNIT=3390,
// VOL=(PRIVATE,RETAIN,SER=SAD001)
//TRK0TEXT DD DSN=&&TRK0TEXT,DISP=(OLD,DELETE)
//SYSIN DD DSN=&&DSFSYSIN,DISP=(OLD,DELETE),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=8000)
//SYSPRINT DD SYSOUT=*
//DSFDUMP DD SYSOUT=*
Two-stage SADMP generation separates macro assembly from the generated initialization job. Use it when building for a different target release or when maintaining multiple SADMP levels.
//JOBNAME JOB
//* ------------------------------------------------------------
//* Stage 1: assemble an AMDSADMP definition for a target level.
//* Use the target release SYS1.MACLIB/SYS1.MODGEN libraries.
//* ------------------------------------------------------------
//ASM EXEC PGM=ASMA90,PARM='DECK,NOOBJECT'
//SYSLIB DD DISP=SHR,DSN=TARGET.SYS1.MACLIB
// DD DISP=SHR,DSN=TARGET.SYS1.MODGEN
//SYSUT1 DD UNIT=SYSDA,SPACE=(CYL,(5,2))
//SYSPRINT DD SYSOUT=*
//SYSPUNCH DD DSN=YOURHLQ.SADMP.STAGE2.JCL,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(TRK,(20,10)),DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
//SYSIN DD *
AMDSADMP IPL=D/XXXX,VOLSER=SAD001, X
MINASID=ALL, X
DDSPROMPT=YES, X
OUTPUT=(DYYYY,SYS1.SADMP), X
CONSOLE=((ZZZ,3278)), X
REAL=USED
END
/*
//* Stage 2 is the generated job stream in YOURHLQ.SADMP.STAGE2.JCL.
//* Review the generated device, volume and target-library references
//* before submitting it to initialize the SADMP residence volume.
Uses IBM AMDSADDD to allocate and initialize a multi-volume stand-alone dump data set. Size and volume count must be based on the largest real-storage configuration the dump must capture, and the data set must be excluded from migration/movement.
//JOBNAME JOB
//STEP001 EXEC PGM=IKJEFT1B
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
EXEC 'SYS1.SBLSCLI0(AMDSADDD)' +
'DEFINE (SAD002,SAD003,SAD004,SAD005) +
(SYS1.SADMP) 3390 10015 Y LARGE'
/*
Creating a GDG base: /DEFGDG1 JOB ...
//STEP1 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=A //SYSIN DD * DEFINE GDG - (NAME(YOURHLQ.DATA) - EMPTY - NOSCRATCH - LIMIT(15)) /*
Create the new generations :
//JOBNAME JOB //STEP1 EXEC PGM=IEFBR14 //GDSDD1 DD DSN=YOURHLQ.DATA(+1),DISP=(NEW,CATLG), // SPACE=(TRK,(5,2)),STORCLAS=GRPVOL1,DATACLAS=ALLOC01 //SYSPRINT DD SYSOUT=A //SYSIN DD * /*
Modify existing GDG parameters : Use ALTER command to change the parameter of the GDG Base
//STEP010 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * ALTER MYDATA.IBM.SAMPLE.GDG LIMIT(50) /*
Deleting a GDG : Delete the individual data sets (G0001V00, G0002V00, etc.) and then run this IDCAMS job to delete the GDG
//STEP010 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DELETE (MYDATA.IBM.SAMPLE.GDG) GDG FORCE /*
Using GDG in a JCL :
//JOBNAME JOB //* //STP01 EXEC PGM=MYCOBB //IN1 DD DSN=YOURHLQ.IBM.SAMPLE.GDG(0),DISP=SHR //OUT1 DD DSN=YOURHLQ.IBM.SAMPLE.GDG(+1),DISP=(,CALTG,DELETE) // LRECL=100,RECFM=FB
Reading multiple GDGs: Sample SMF dump job for dumping the type 30 SMF records from 3 systems (GDG files) into a single dataset.
//STEP010 EXEC PGM=IFASMFDP //DUMPIN DD DISP=SHR,DSN=YOURHLQ.CR.SMF.SYSBDUMP // DD DISP=SHR,DSN=YOURHLQ.CR.SMF.SYSCDUMP // DD DISP=SHR,DSN=YOURHLQ.CR.SMF.SYSADUMP // DD DISP=SHR,DSN=YOURHLQ.CR.SMF.SYSADALY(0) //DUMP30 DD DSN=YOURHLQ.DP.SMF.SYSDUMP(+1),DISP=(,CATLG,DELETE), // DCB=(LRECL=32756,BLKSIZE=19069,RECFM=VBS), // UNIT=DASTG,SPACE=(CYL,(80,40),RLSE) //SYSOUT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SORTWK01 DD UNIT=SYSDA,SPACE=(CYL,(199)) //SORTWK02 DD UNIT=SYSDA,SPACE=(CYL,(199)) //SORTWK03 DD UNIT=SYSDA,SPACE=(CYL,(199)) //SYSIN DD DSN=YOURHLQ.PRODAF(DPDP2001),DISP=SHR
The SMF section is kept as a set of separate scenarios rather than collapsing it into one generic dump job. That distinction matters because allocation/formatting, dumping a MAN data set, selecting record types, splitting an existing extract, and reading an SMF log stream are different operational tasks.
The operational notes specifically warn that a newly defined SMF data set should be formatted before first use; otherwise SMF may do the formatting during initialization or a switch, extending that operation. Always verify IFASMFDP/IFASMFDL control statements against the z/OS release in use.
Defines a reusable non-indexed VSAM cluster suitable for an SMF MAN data set; replace sizing values with the installation standard.
//CREATE EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * DEFINE CLUSTER (NAME(SYS1.MANX) - VOLUME(VOL001) - NONINDEXED - CYLINDERS(nn) - REUSE - RECORDSIZE(4086 32767) - SPANNED - SPEED - CONTROLINTERVALSIZE(nnnn) - SHAREOPTIONS(2)) /*
Clears/formats the new MAN data set with IFASMFDP before it is placed into the active SMF configuration.
//FORMAT EXEC PGM=IFASMFDP //SYSPRINT DD SYSOUT=* //NEWDS DD DSN=SYS1.MANX,DISP=SHR //SYSIN DD * INDD(NEWDS,OPTIONS(CLEAR)) /*
Copies all SMF record types from a MAN data set to an output data set while using IFASMFDP dump processing. Apply your site switch/clear procedure before destructive use.
//DUMPSMF EXEC PGM=IFASMFDP //SMFIN DD DSN=SYS1.MANX,DISP=SHR //SMFOUT DD DSN=YOURHLQ.SMF.DUMP, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(50,10),RLSE) //SYSPRINT DD SYSOUT=* //SYSIN DD * INDD(SMFIN,OPTIONS(ALL)) OUTDD(SMFOUT,TYPE(0:255)) /*
Uses MAXDAYS and RECORDID selection to build a smaller diagnostic extract from an SMF input data set.
//DUMP EXEC PGM=IFASMFDP //INDD DD DSN=SYS1.MAN1,DISP=SHR //OUTDD DD DSN=YOURHLQ.SMF.EXTRACT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(50,10),RLSE) //SYSPRINT DD SYSOUT=* //SYSIN DD * INDD(INDD) OUTDD(OUTDD) MAXDAYS(5) RECORDID(14,15,30,70,72) /*
Processes the input with IFASMFDP and sends the selected output to DUMMY; useful as a validation/read pass.
//STEP1 EXEC PGM=IFASMFDP //SMFIN DD DSN=YOURHLQ.SMF.INPUT,DISP=SHR //SMFOUT DD DUMMY //SYSPRINT DD SYSOUT=* //SYSIN DD * INDD(SMFIN,OPTIONS(DUMP)) OUTDD(SMFOUT,TYPE(0:255)) /*
Reads an IFASMFDP-created extract and writes separate RMF and type-30 outputs for the requested date/time window.
//STEP1 EXEC PGM=IFASMFDP //SMFIN DD DSN=YOURHLQ.SMF.DAILY,DISP=SHR //SMFOUT1 DD DSN=YOURHLQ.SMF.TYPE30,DISP=SHR //SMFOUT2 DD DSN=YOURHLQ.SMF.RMF,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSIN DD * INDD(SMFIN,OPTIONS(DUMP)) OUTDD(SMFOUT2,TYPE(70:78)) OUTDD(SMFOUT1,TYPE(30(2:3))) DATE(YYYYDDD,YYYYDDD) START(0800) END(1700) /*
Uses IFASMFDL to read an SMF log stream, select a date/time/system window, and write records to a sequential extract.
//DUMPX EXEC PGM=IFASMFDL,REGION=0M //OUTDD1 DD DSN=YOURHLQ.SMF.LOGSTREAM.DUMP, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(10,5),RLSE), // DCB=(LRECL=32760,RECFM=VBS,BLKSIZE=0) //SYSPRINT DD SYSOUT=* //SYSIN DD * LSNAME(YOUR.SMF.LOGSTREAM,OPTIONS(DUMP)) OUTDD(OUTDD1,TYPE(0:255),START(0000),END(2400)) DATE(YYYYDDD,YYYYDDD) SID(SYSA) /*
Uses IFASMFDL as the SMF log-stream dump program and selects common accounting/performance record types for a specified Julian-date window.
//DUMPSEL EXEC PGM=IFASMFDL,REGION=0M //OUTDD1 DD DSN=YOURHLQ.SMF.LOGSTREAM.SELECT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(10,5),RLSE), // DCB=(RECFM=VBS,LRECL=32760,BLKSIZE=0) //SYSPRINT DD SYSOUT=* //SYSIN DD * LSNAME(YOUR.SMF.LOGSTREAM,OPTIONS(DUMP)) OUTDD(OUTDD1,TYPE(30,70:79,89)) DATE(YYYYDDD,YYYYDDD) /*
Runs a small set of MVS display commands through batch SDSF and writes the captured output to a sequential data set.
//SDSF EXEC PGM=SDSF //ISFOUT DD DUMMY //DATAOUT DD DSN=YOURHLQ.SDSF.CAPTURE, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(1,1)),DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0) //ISFIN DD * D T D IPLINFO D PARMLIB /*
Uses the SDSF batch interface to enter the ST panel and print selected panel output to a data set. Add installation-specific filters only after testing them interactively in SDSF.
//PFIN1 EXEC PGM=ISFAFD,PARM='++60,133' //SYSUDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //ISFOUT DD DUMMY //OUT1 DD DSN=YOURHLQ.SDSF.PRINT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(TRK,(5,5)),DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0) //ISFIN DD * ST OWNER * PREFIX * PRINT FILE OUT1 PRINT CLOSE /*
Example allocation that requests up to five 3390 units and a large-format sequential data set. UNIT count is not a substitute for SMS storage policy; use only where explicit unit allocation is appropriate.
//ALLOC EXEC PGM=IEFBR14 //OUT DD DSN=YOURHLQ.LARGE.DATA, // DISP=(NEW,CATLG,DELETE),UNIT=(3390,5), // SPACE=(CYL,(2200,500),RLSE),DSNTYPE=LARGE, // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
Lists the RACF user profile including TSO/OMVS segments and then lists the selected group.
//STEP1 EXEC PGM=IKJEFT01 //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * LISTUSER USERA TSO OMVS LISTGRP GROUP1 /*
Illustrative RACF/ICF catalog workflow for creating a user. Real sites commonly automate UID assignment, password policy, catalog aliases, groups and TSO procedures; use security standards rather than these sample values.
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE ALIAS(NAME(USERA) RELATE(YOUR.USER.CATALOG))
/*
//STEP2 EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
ADDUSER USERA NAME('SAMPLE USER') OWNER(SECADMIN) +
DFLTGRP(GROUP1) PASSWORD(TEMP123) UACC(NONE)
ALTUSER USERA TSO(ACCTNUM(ACCT) PROC(ISPFPROC) SIZE(200000))
ALTUSER USERA OMVS(HOME('/u/usera') PROGRAM('/bin/sh') UID(12345))
ADDSD 'USERA.**' OWNER(USERA) UACC(NONE) GENERIC
PERMIT 'USERA.**' ID(USERA) ACCESS(ALTER) GENERIC
CONNECT USERA GROUP(GROUP1)
/*
Shows a basic review/delete sequence. Before DELUSER, remove group connections, owned resources and access-list references according to the installation offboarding procedure; IRRUT100/IRRRID00 can help find references.
//STEP1 EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
LISTUSER USERA
LISTDSD DATASET('USERA.**') ALL
DELDSD 'USERA.**'
DELUSER USERA
/*
Connects an existing RACF user to additional groups. The command issuer needs the appropriate group authority.
//STEP1 EXEC PGM=IKJEFT01 //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * CONNECT USERA GROUP(GROUP1) CONNECT USERA GROUP(SYSPROG) /*
Lists a RACF data-set profile and its ownership/access information.
//STEP1 EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
LISTDSD DATASET('USERA.**') ALL
/*
Adds a user to a generic RACF data-set profile access list and refreshes generic data-set profiles.
//STEP1 EXEC PGM=IKJEFT01 //SYSPRINT DD SYSOUT=* //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * PERMIT 'YOURHLQ.CICS.**' ID(USERA) ACCESS(ALTER) GENERIC SETROPTS GENERIC(DATASET) REFRESH /*
Resets a RACF user password and resumes the user. Use the installation password/phrase policy and secure delivery procedure for temporary credentials.
//STEP1 EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * ALTUSER USERA PASSWORD(TEMP123) RESUME /*
Runs the RACF cross-reference utility for a user or group name. IRRUT100 lists many, but not every, reference to the ID in the RACF database.
//STEP1 EXEC PGM=IRRUT100 //SYSUT1 DD UNIT=SYSDA,SPACE=(TRK,(50,10)) //SYSPRINT DD SYSOUT=* //SYSIN DD * USERA /END /*
Example DD statement for capturing a utility report into a cataloged sequential data set instead of SYSOUT.
//SYSPRINT DD DSN=YOURHLQ.PRODUCT.WORK, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(1000,500),RLSE), // DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0)
Copies an MVS data set to a z/OS UNIX path in binary mode with BPXCOPY. Verify BPXCOPY parameters for the z/OS release and target file permissions.
//STEP060 EXEC PGM=BPXCOPY, // PARM='ELEMENT(SAMPLE) TYPE(BINARY) PATHMODE(0,6,6,4)' //SYSUT1 DD DSN=YOURHLQ.BINARY.INPUT,DISP=SHR //SYSUT2 DD PATH='/u/userid/data/input.bin', // PATHOPTS=(OWRONLY,OCREAT,OTRUNC), // PATHMODE=(SIRUSR,SIWUSR),FILEDATA=BINARY //SYSTSPRT DD SYSOUT=*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//COPYSTEP EXEC PGM=IKJEFT01 //INMVS DD DSN=YOURHLQ.USS.TO.MVS,DISP=OLD //OUTHFS DD PATH='/SYSTEM/tmp/YOURHLQ.MVS.TO.DATA', // PATHOPTS=(OCREAT,OWRONLY),PATHMODE=(SIRUSR,SIWUSR) //SYSTSPRT DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSTSIN DD * OCOPY INDD(INMVS) OUTDD(OUTHFS) BINARY CONVERT(NO) /*
Copies a text file from z/OS UNIX into an existing MVS data set using OCOPY with text conversion.
//STEP5 EXEC PGM=IKJEFT01 //INUNIX DD PATH='/u/userid/input.txt',PATHOPTS=ORDONLY //OUTMVS DD DSN=YOURHLQ.TEST.MVS.OUTDS,DISP=SHR //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * OCOPY INDD(INUNIX) OUTDD(OUTMVS) TEXT CONVERT(YES) /*
Copies a binary z/OS UNIX file, such as a JAR, into an MVS data set without character conversion.
//STEP01 EXEC PGM=IKJEFT01 //INUNIX DD PATH='/u/userid/classes/sample.jar',PATHOPTS=ORDONLY //OUTMVS DD DSN=YOURHLQ.TEST.JAR, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(200,50),RLSE) //SYSTSPRT DD SYSOUT=* //SYSTSIN DD * OCOPY INDD(INUNIX) OUTDD(OUTMVS) BINARY /*
Broadcom PDSMAN PDSM10 execution skeleton. Replace <FUNCTION> with a documented PDSM10 function such as RELEASE, EMPTYO or EMPTY.
//PDSM10 EXEC PGM=PDSM10,PARM='<FUNCTION>' //PDSMPDS DD DSN=YOURHLQ.LOADLIB,DISP=OLD
Examples Release Unused Extents This example releases unused extents of library YOURHLQ.LOADLIB.
//RELEASE EXEC PGM=PDSM10,PARM=RELEASE //PDSMPDS DD DSN=YOURHLQ.LOADLIB,DISP=OLD
Empty a Library This example deletes all members from library YOURHLQ.LOADLIB.
//EMPTYO EXEC PGM=PDSM10,PARM=EMPTYO //PDSMPDS DD DSN=YOURHLQ.LOADLIB,DISP=OLD
Empty a Library and Releasing Extents This example deletes all members from library YOURHLQ.LOADLIB and releases all unused secondary extents.
//EMPTY EXEC PGM=PDSM10,PARM=EMPTY //PDSMPDS DD DSN=YOURHLQ.LOADLIB,DISP=OLD
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//STEP010 EXEC PGM=SORT //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SORTIN DD * VASU /* //SORTOUT DD SYSOUT=* //SYSIN DD * SORT FIELDS=COPY /*
SORTIN dummy:
//STEP01 EXEC PGM=SYNCSORT
//SORTIN DD DUMMY,DCB=(RECFM=F,LRECL=80)
//SORTOUT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSOUT DD SYSOUT=*
//SYSIN DD *
SORT FIELDS=COPY
OUTFIL NODETAIL,TRAILER1=(' DATE IS
',&DATE)
Starts the IBM external writer program with a simple DASD output definition. Writer selection and data format must match the intended SYSOUT class/output processing.
//XWTR EXEC PGM=IASXWR00,REGION=256K,PARM='PA' //IEFRDER DD DSN=YOURHLQ.EXTERNAL.WRITER.OUTPUT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(50,10),RLSE), // DCB=(RECFM=VBM,LRECL=137,BLKSIZE=0)
External-writer procedure skeleton for writing SYSLOG-style output to a sequential data set. Confirm the IASXWR00 PARM value and DCB requirements against the current External Writer documentation.
//IEFPROC EXEC PGM=IASXWR00,PARM='P',REGION=256K, // TIME=NOLIMIT //IEFRDER DD UNIT=SYSDA,VOL=SER=VOL001, // DISP=(NEW,CATLG,DELETE), // DSN=YOURHLQ.SYSLOG.OUTPUT, // DCB=(BLKSIZE=0,LRECL=137,RECFM=VBM), // SPACE=(CYL,(150,50),RLSE)
Minimal IASXWR00 external-writer skeleton using an existing output data set. Validate the PARM selection and output disposition for the installed z/OS release and intended writer function.
//IEFPROC EXEC PGM=IASXWR00,PARM='PL' //IEFRDER DD DSN=YOURHLQ.OUTPUT.DATA,DISP=MOD
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //* IEAMDBLG is supplied as source in SYS1.SAMPLIB and must be //* assembled/link-edited into an executable library before use. //OPERLOG EXEC PGM=IEAMDBLG, // PARM='COPY(>0),DELETE(>0),HCFORMAT(CENTURY)' //STEPLIB DD DSN=YOURHLQ.IEAMDBLG.LOAD,DISP=SHR //VDSBYPAS DD DUMMY //SYSLOG DD DSN=YOURHLQ.OPERLOG.ARCHIVE(+1), // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(300,90),RLSE), // DCB=(RECFM=VB,LRECL=132,BLKSIZE=0) /*
Runs the Broadcom SYSVIEW batch interface and writes command output to SYSPRINT. Verify the installed SYSVIEW load-library name and batch command syntax for the product release.
//SYSVIEW EXEC PGM=GSVXBAT,REGION=512K, // PARM='LINECNT=66,MENUOFF,SHOWINP=NO' //STEPLIB DD DISP=SHR,DSN=YOURHLQ.SYSVIEW.CNM4BLOD //SYSPRINT DD SYSOUT=* //SYSIN DD * COMMAND=(ACTIVITY) SCROLL COMMAND=(END) /*
Uses the Broadcom SYSVIEW batch interface to open SYSLOG output, select a requested range, print it, and close the print destination. Replace the placeholders with the syntax supported by the installed SYSVIEW release.
//STEP0001 EXEC PGM=GSVXBAT,PARM='LINECNT=66,SHOWINP=YES' //STEPLIB DD DISP=SHR,DSN=YOURHLQ.SYSVIEW.CNM4BLOD //SYSPRINT DD SYSOUT=* //SYSIN DD * COMMAND=(SYSLOG) COMMAND=(PRINT OPEN <USERID>) COMMAND=(PRINT FROM <START> TO <END>,NOHEADER) COMMAND=(PRINT CLOSE) /*
Runs SARINIT with the product load library and database name supplied as placeholders. The exact SARINIT control statement is product-release specific, so verify it in the installed Broadcom View documentation before execution.
//STEP1 EXEC PGM=SARINIT //STEPLIB DD DISP=SHR,DSN=YOURHLQ.VIEW.LOADLIB //SYSPRINT DD SYSOUT=* //SYSIN DD * NAME=YOURHLQ.VIEW.DATABASE /*
Filters an SMF extract for type 17 records and formats matching data-set deletion activity with ICETOOL. Record offsets vary with the record layout and release; verify the fields against the applicable SMF record description before relying on the report.
//JOBNAME JOB
//STEP0010 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//RAWSMF DD DISP=SHR,DSN=YOURHLQ.SMF.INPUT
//SMF17 DD DSN=YOURHLQ.SMF.TYPE17.WORK,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(15,15),RLSE)
//SMF17REP DD SYSOUT=*
//TOOLIN DD *
COPY FROM(RAWSMF) TO(SMF17) USING(SMFI)
DISPLAY FROM(SMF17) LIST(SMF17REP) -
TITLE('SMF TYPE-17 RECORDS') DATE TIME PAGE -
HEADER('TIME') ON(7,4,TM1,E'99:99:99') -
HEADER('DATE') ON(11,4,DT3,E'9999-999') -
HEADER('SYS') ON(15,4,CH) -
HEADER('SMF#') ON(6,1,BI) -
HEADER('JOBNAME') ON(19,8,CH) -
HEADER('DATASETNAME') ON(45,44,CH) BLANK
/*
//SMFICNTL DD *
INCLUDE COND=(6,1,BI,EQ,17,AND,
45,44,CH,EQ,C'YOURHLQ.TARGET.DATA')
OPTION VLSHRT
/*
Filters an SMF extract for type 14 records and formats matching input/open activity with ICETOOL. Verify field offsets against the applicable SMF type 14 record layout before production use.
//JOBNAME JOB
//RPT14 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//RAWSMF DD DISP=SHR,DSN=YOURHLQ.SMF.INPUT
//SMF14 DD DSN=YOURHLQ.SMF.TYPE14.WORK,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(55,65)),
// DCB=(RECFM=VB,LRECL=32756,BLKSIZE=32760)
//SMFREP14 DD SYSOUT=*
//TOOLIN DD *
COPY FROM(RAWSMF) TO(SMF14) USING(SMFI)
DISPLAY FROM(SMF14) LIST(SMFREP14) -
TITLE('INPUT DATASET ACTIVITY') DATE(4MD/) TIME -
HEADER('SYS') ON(15,4,CH) -
HEADER('SMF#') ON(6,1,BI) -
HEADER('DATE') ON(11,4,DT1,E'9999/99/99') -
HEADER('TIME') ON(7,4,TM1,E'99:99:99') -
HEADER('JOBNAME') ON(19,8,CH) -
HEADER('DATASET NAME') ON(69,44,CH) BLANK
/*
//SMFICNTL DD *
INCLUDE COND=(6,1,BI,EQ,14,AND,
50,44,SS,EQ,C'YOURHLQ.TARGET.DATA')
OPTION VLSHRT
/*
Filters an SMF extract for type 15 records and formats matching output/close activity with ICETOOL. Verify field offsets against the applicable SMF type 15 record layout before production use.
//JOBNAME JOB
//RPT15 EXEC PGM=ICETOOL
//TOOLMSG DD SYSOUT=*
//DFSMSG DD SYSOUT=*
//RAWSMF DD DISP=SHR,DSN=YOURHLQ.SMF.INPUT
//SMF15 DD DSN=YOURHLQ.SMF.TYPE15.WORK,
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(CYL,(55,65)),
// DCB=(RECFM=VB,LRECL=32756,BLKSIZE=32760)
//SMFREP15 DD SYSOUT=*
//TOOLIN DD *
COPY FROM(RAWSMF) TO(SMF15) USING(SMFI)
DISPLAY FROM(SMF15) LIST(SMFREP15) -
TITLE('OUTPUT DATASET ACTIVITY') DATE(4MD/) TIME -
HEADER('SYS') ON(15,4,CH) -
HEADER('SMF#') ON(6,1,BI) -
HEADER('DATE') ON(11,4,DT1,E'9999/99/99') -
HEADER('TIME') ON(7,4,TM1,E'99:99:99') -
HEADER('JOBNAME') ON(19,8,CH) -
HEADER('DATASET NAME') ON(69,44,CH) BLANK
/*
//SMFICNTL DD *
INCLUDE COND=(6,1,BI,EQ,15,AND,
50,44,SS,EQ,C'YOURHLQ.TARGET.DATA')
OPTION VLSHRT
/*
Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.
//JOBNAME JOB //* IEASYMU2 updates installation-defined symbols in the active table. //* Changes are temporary unless reflected in the IEASYMxx definitions. //UPDSYM EXEC PGM=IEASYMU2, // PARM='LOC=VALUE1 HWNAME=VALUE2 PID=VALUE3 SMFID=VALUE4' /*
Utility and parameter references used throughout the library. Check the documentation that matches the installed product and z/OS release before submitting a change.
Diagnostics & Operations · MVS Commands
A practical z/OS command reference covering MVS, JES2, sysplex, storage, networking, dump services, z/OS UNIX and common subsystem administration. Destructive commands are deliberately separated from display-only checks.
D IPLINFOD PARMLIBD SYMBOLSD OPDATAD IOS,CONFIGD MD M=CPUD M=STORD M=DEVD U,VOL=<VOLSER>D U,,,<DEVNUM>,1D U,DASD,ONLINED U,TAPE,ONLINED A,LD A,TSOD A,<JOBNAME>D R,RD TD PROG,APFD PROG,LNKLSTD PROG,LPAD PROG,LPA,MODNAME=<MODULE>D PROG,EXITD LLAF LLA,UPDATE=<XX>SET PROG=<XX>SETPROG APF,ADD,DSNAME=<DSN>,VOLUME=<VOLSER>SETPROG APF,DELETE,DSNAME=<DSN>,VOLUME=<VOLSER>SETPROG APF,ADD,DSNAME=<DSN>,SMSSETPROG APF,DELETE,DSNAME=<DSN>,SMSSETPROG LPA,ADD,MODNAME=<MODULE>,DSNAME=<DSN>SETPROG LNKLST,TEST,NAME=<SET>,MODNAME=<MODULE>ROUTE <SYSNAME>,D IPLINFOROUTE *ALL,D IPLINFOTSO LISTCAT ENTRY('<DSN>') ALLS <PROCNAME>P <STCNAME>C <JOBNAME>C <JOBNAME>,DUMPC <JOBNAME>,A=<ASID>C U=<USERID>FORCE <JOBNAME>FORCE <JOBNAME>,ARMFORCE U=<USERID>RESET <JOBNAME>,QUIESCERESET <JOBNAME>,RESUMED GRSD GRS,CD GRS,RES=(SYSDSN,<DSN>)D GRS,RES=(*,<RNAME>)D GRS,DEPENDENCY,SYS=<SYSNAME>,JOB=<JOBNAME>,COUNT=20,DETAILD GRS,ANALYZE,LATCH,WAITER,COUNT=20,DETAILD GRS,ALLD ASMD SMSD SMS,STORGRP(ALL)D SMS,STORGRP(<STORGRP>),LISTVOLD SMS,STORGRP(<STORGRP>),DETAILD VIRTSTOR,LFAREAD VIRTSTOR,HVCOMMOND VIRTSTOR,HVSHARED WLMV WLM,POLICY=<POLICY>D LOGGER,STATUSD LOGGER,LD LOGGER,L,LSN=<LOGSTREAM>D LOGGER,CONN,LSN=<LOGSTREAM>D LOGGER,CONN,LSN=<LOGSTREAM>,DETAILD LOGGER,STR,STRN=<STRUCTURE>D XCF,COUPLE,TYPE=LOGRSETLOGR FORCE,DELETE,LSN=<LOGSTREAM>D SMFD SMF,SD SMF,OD SMF,MSWITCH SMFSET SMF=<XX>$JDDETAILS$JDDETAILS(RESOURCE)$JDHISTORY$DLIMITS$DLIMITS(SPOOL)$DLIMITS(JQE)$D JES2$P JES2$D SPOOL$D SPOOLDEF$D CKPTDEF$D CKPTSPACE$D JOBDEF$D OUTDEF$D PROCLIB$D DESTID(*)$D JOBQ,SPOOL=(%>2)$D O JOBQ,AGE>4$D OUTCLASS(*)$D OUTCLASS(<CLASS>)$D NETSRV(1)$D NETSRV(1),SESSIONS$D NETSRV(1),LONG$D SOCKET$D SOCKET(<NAME>)$T SOCKET(<NAME>),SECURE=YES,PORT=<PORT>$D NODE(<NODENAME>)D CFD XCFD XCF,SYSPLEX,ALLD XCF,COUPLED XCF,COUPLE,TYPE=SYSPLEXD XCF,COUPLE,TYPE=CFRMD XCF,POLICYD XCF,POLICY,TYPE=CFRMD XCF,STRD XCF,STR,STAT=ALLOCD XCF,STR,STRNAME=<STRUCTURE>D XCF,GROUPD XCF,LOCALMSGD XCF,PATHOUT,DEVICE=ALLD XCF,PATHIN,DEVICE=ALLSETXCF START,POLICY,TYPE=CFRM,POLNAME=<POLICY>D SSID SSI,STAT=ACT,DYN=YESD SSI,ALL,SUB=<SUBSYS>SETSSI ADD,SUBNAME=<SUBSYS>SETSSI ADD,SUBNAME=<SUBSYS>,INITRTN=<ROUTINE>,INITPARM='<PARM>'SETSSI DELETE,SUBNAME=<SUBSYS>,FORCEDUMP COMM=('DIAGNOSTIC DUMP')D DUMP,STATUSD DUMP,OPTIONSD DUMP,TITLED DUMP,TITLE,DSN=ALLD DUMP,TITLE,DUMPID=ALLCHNGDUMP SET,SDUMP,MAXSPACE=<SIZE>CHNGDUMP SET,SYSUDUMP,SDATA=SQACHNGDUMP DEL,SYSUDUMP,SDATA=SQACHNGDUMP RESET,SYSUDUMPDUMPDS CLEAR,DSN=<NN>DUMPDS CLEAR,DSN=ALLDUMPDS ADD,DSN=<NN>D SLIPD SLIP=<ID>SLIP SET,MSGID=<MSGID>,ACTION=SVCD,ENDSLIP SET,COMP=<CODE>,ACTION=SVCD,ENDSLIP MOD,ENABLE,ID=<ID>SLIP MOD,DISABLE,ID=<ID>F HZSPROC,DISPLAY,CHECK=(IBMDAE,DAE_SUPPRESSING),DETAILF HZSPROC,DISPLAY,CHECK=(IBMDAE,DAE_SHAREDSN),DETAILSET DAE=<XX>D NET,APPLSD NET,MAJNODESD NET,PENDINGD NET,LINESD NET,ID=<MAJNODE>,EV NET,INACT,ID=<MAJNODE>V NET,ACT,ID=<MAJNODE>,UPDATE=ALLTSO NETSTAT ROUTETSO NETSTAT HOMETSO NETSTAT DEVTSO NETSTAT STATSTSO NETSTAT VIPADCFGTSO NETSTAT SOCKETSTSO NETSTAT CONNTSO PING <HOST_OR_IP>TSO TRACERTE <HOST_OR_IP>TSO FTP <HOST_OR_IP>D TCPIPD TCPIP,<TCPIP_PROC>,NETSTAT,ROUTED TCPIP,<TCPIP_PROC>,NETSTAT,HOMED TCPIP,<TCPIP_PROC>,NETSTAT,CONND NET,EEOMVSISHELLD OMVSD OMVS,OD OMVS,PD OMVS,FD OMVS,A=ALLD OMVS,F,NAME=<FILESYSTEM>SETOMVS SYNTAXCHECK=(<XX>)MOUNT FILESYSTEM('<ZFS_DSN>') TYPE(ZFS) MOUNTPOINT('<PATH>') MODE(RDWR)UNMOUNT FILESYSTEM('<ZFS_DSN>') NORMALdf -P <PATH>mountdu -sk <PATH>/* | sort -nfind <PATH> -xdev -type f -size +100000 -printps -efls -l <PATH>ls -T <PATH>/<FILE>chtag -p <PATH>/<FILE>chtag -tc IBM-1047 <PATH>/<FILE>extattr <PATH>/<PROGRAM>ls -E <PATH>/<PROGRAM>mkdir -m 755 <PATH>chmod -R 775 <PATH>chown -R <USERID> <PATH>cp <SOURCE> <TARGET>mv <SOURCE> <TARGET>rm <FILE>zfsadm fsinfo -aggregate <ZFS_DSN>zfsadm aggrinfo <ZFS_DSN>zfsadm configqueryzfsadm grow -aggregate <ZFS_DSN> -size <KBYTES>zfsadm lsfs -aggregate <ZFS_DSN>zfsadm fileinfo <PATH>/<FILE>D CONSOLESD CONSOLES,CN=<CONSOLENAME>D CONSOLES,SSV <DEVNUM>,ONLINEV <DEVNUM>,OFFLINEV CN(<CONSOLENAME>),MSCOPE=(*ALL)TSO LU <USERID>XMIT <NODE>.<USERID> DS('<INPUT_DSN>') OUTDSN('<XMIT_DSN>')RECEIVE INDSN('<XMIT_DSN>')TSO TIMESection 1
Architecture, configuration and the core mechanics of how z/OS actually works — from the hardware underneath to the PARMLIB edits that change its behavior at runtime.
z/OS Internals · System Configuration
How I manage PARMLIB and PROCLIB as live configuration: concatenation and member precedence, dynamic versus IPL-time activation, started procedures and the change discipline needed to make a change survive the next IPL.
I think of PARMLIB as a logical concatenation rather than one physical SYS1.PARMLIB data set. Sites normally place installation/common and LPAR-specific libraries ahead of IBM-supplied libraries so local configuration can be maintained without editing the base library.
The important consequence is member precedence: if the same member exists in more than one library, the first matching member in the active concatenation is the one z/OS reads for searches that use the logical PARMLIB.
LOADxx (conceptual) PARMLIB SITE.LPAR.PARMLIB PARMLIB SITE.COMMON.PARMLIB ... SYS1.PARMLIB included according to LOADxx rules Duplicate member search: first matching member in the logical concatenation wins
LOADxx participates very early in IPL and helps establish system configuration, including the PARMLIB setup used for subsequent initialization. IEASYSxx then selects or supplies many system parameter suffixes. From there, individual components read members such as PROGxx, COMMNDxx, SMFPRMxx, BPXPRMxx, CONSOLxx and product-specific members.
I do not assume every member follows the same activation rule. Some are IPL-time only, some can be replaced with a SET command, and some have a component-specific MODIFY/SET interface.
A dynamic command changes the running system. A PARMLIB edit changes what the system will use the next time that configuration is loaded. Those are not automatically the same thing.
For example, I can dynamically add an APF library with SETPROG, but if the corresponding PROGxx is not updated the change may disappear at IPL. Conversely, editing PROGxx does nothing to the current system until I activate it or IPL.
PROCLIB is where JES and started-task processing find procedures. Sites commonly use multiple libraries and dynamic PROCLIB definitions. Procedure search order matters just like PARMLIB precedence: two members with the same name in different libraries can make one LPAR run a different PROC than another.
When a started task fails after a change, I verify the active PROCLIB concatenation, the PROC that was actually selected, symbol substitution, referenced datasets and the runtime library level.
The failure mode I try to prevent is “the change worked for three months and disappeared at IPL.” That is almost always a sign that runtime and persistent configuration were allowed to diverge.
z/OS Internals · System Configuration
The RACF knowledge I need as a sysprog: started-task identity, dataset and general-resource protection, product installation requirements, authorization failures and how I avoid solving security problems with excessive access.
I do not need to be the RACF administrator to do product installation or systems programming well, but I do need to understand what identity my started task runs under and which resources it is trying to use. Security is part of the product design, not something I hand over after the technical install is “finished.”
Typical sysprog changes touch product datasets, started-task identities, OPERCMDS, FACILITY-class resources, UNIX identities/files, certificates/key rings and sometimes PROGRAM or other installation-specific classes.
A started task needs a predictable user/group identity before I can reason about dataset, UNIX or general-resource access. The STARTED class is the modern mechanism I expect for mapping procedures/jobnames to identities.
* Conceptual pattern only — use site naming and security standards RDEFINE STARTED PRODUCT.* STDATA(USER(PRODUSER) GROUP(PRODGRP)) SETROPTS RACLIST(STARTED) REFRESH
I verify the actual identity after the STC starts. A perfectly defined profile that does not match the procedure naming pattern gives me a different user than I planned for.
Product libraries, configuration datasets, logs and work files should be protected according to what the STC and administrators genuinely need. For APF-authorized or executable system libraries, write access is particularly sensitive because changing trusted code can become a privilege path.
I avoid using UACC(READ) or broad ALTER access simply to make an install test pass. The failure message is evidence telling me which exact access is missing.
Products often document FACILITY, OPERCMDS or other resource profiles for privileged functions. The class/profile naming is product-specific, so I keep the vendor requirement with the change record and verify whether the class is active and RACLISTed before expecting a refresh to work.
For z/OSMF, consoles, commands, key rings, certificates and UNIX services, the profile is only one layer; the identity also needs any associated group/OMVS attributes and underlying dataset/file access.
I start with the exact message, user ID, class, profile/resource name and access requested. Then I check why that identity is being used and whether the access is documented. If the request is unexpected, I investigate the product configuration rather than granting it automatically.
“Give SPECIAL” or “give ALTER to the HLQ” is not troubleshooting. It removes the evidence that would have told me the minimum access the product actually needs.
z/OS Internals · System Management
What z/OSMF actually changes for a sysprog: a Liberty-based management server with SAF-controlled services, guided Workflows, Software Management and REST APIs that turn repeatable runbooks into automation.
I do not treat z/OSMF as “the web GUI for z/OS.” It is a management framework that exposes selected z/OS functions through a browser, workflows and REST APIs. The value is that the same platform can support human-guided administration and machine-driven automation without each team building a private interface to MVS commands, jobs and datasets.
For a sysprog, the most useful areas are Workflows, Software Management, jobs/dataset/file REST services, topology/sysplex services and the security/configuration model needed to expose those functions safely.
Browser / REST client
│ HTTPS
▼
+-----------------------------+
| z/OSMF server (IZUSVR1) |
| Liberty + z/OSMF services |
+-----------------------------+
│
├── SAF/RACF authorization
├── CEA and z/OS services
├── Jobs / data sets / files
├── Workflows
└── Software Management
Angel process: IZUANG1 (where required by services)
The server runs on WebSphere Liberty technology. The z/OSMF server and angel address spaces are therefore real z/OS started tasks with datasets, USS files, ports, certificates, Java/runtime dependencies and SAF permissions that I troubleshoot like any other system service.
I separate base/nucleus configuration from service-specific enablement. The base setup establishes the server, security, networking and core prerequisites. Individual z/OSMF services can have additional authorization and configuration.
IZUPRMxx and the documented z/OSMF configuration process define the environment. I avoid hard-coding old Java paths, ports or prerequisite assumptions from an old build document because these change across z/OS releases and site standards.
Successful HTTPS authentication only gets a user through the front door. Each z/OSMF function still relies on SAF/RACF authorization to the service and to the underlying z/OS resource. A REST request that submits a job, for example, also has to obey the same security boundaries around job submission and datasets.
That layered model is why I troubleshoot authorization from both ends: z/OSMF service access and the underlying system resource.
Workflows are where z/OSMF becomes especially interesting for systems programming. A workflow can turn a written implementation runbook into ordered steps with variables, instructions, JCL, REXX, shell actions and REST interactions. Some steps can be automated; others can deliberately require a human confirmation.
The useful design is not “automate every click.” I want the workflow to encode prerequisites, site variables, validation and backout points so another sysprog can execute the same process consistently.
Software Management provides inventory and management concepts around installed software and software instances. Portable software instances are part of the modern software-delivery story and can support movement/deployment of software content with metadata rather than treating every install as a loose collection of copied datasets.
For lifecycle work, this can help connect installed software information, deployment and workflows. It does not eliminate the need to understand SMP/E, product configuration or runtime activation—the sysprog still needs to know what is being deployed and how the product becomes active.
# Shape only — host/port/auth are site specific GET https://host:port/zosmf/restjobs/jobs?owner=USERID GET https://host:port/zosmf/resttopology/sysplexes
The REST services are what make z/OSMF important beyond the browser. Automation can submit and monitor jobs, work with datasets/files and query system information through documented HTTP interfaces. That is a cleaner integration point for modern tooling than screen-scraping ISPF or embedding console access into every script.
A product installation or upgrade already has the shape of a workflow: prerequisites, site inputs, installation jobs, configuration changes, validation and rollback. z/OSMF Workflows can encode that sequence. REST services can submit/monitor jobs and gather evidence. Software Management can add software-instance context.
That is also why I see a z/OSMF workflow skill as a natural extension for the lifecycle agent: the agent can produce a documented plan first, then eventually produce a controlled workflow definition for the steps that are safe to automate.
That sequence keeps me from calling every HTTP 403 or failed workflow “a z/OSMF problem.” Often the framework is healthy and the underlying SAF or system resource is what is rejecting the operation.
Section 2
Five detailed system-programming guides covering the complete software lifecycle: how a product is installed, serviced, upgraded, assessed for currency and z/OS compatibility, and finally retired. Each guide focuses on the decisions, evidence and control points a sysprog owns—not on reproducing one vendor manual.
How to read these guides: The workflow is reusable; the implementation details are not. Program directories, vendor installation/upgrade guides, current IBM service information, support matrices and the target site's change/security standards remain authoritative.
A reliable installation begins before any RECEIVE or vendor job is submitted. The engineering task is to understand the delivery model, convert the vendor's requirements into the site's architecture, preserve a clean rollback point, install only what is required and prove that the product is genuinely usable after activation.
| Delivery model | What it usually means | What the sysprog must control |
|---|---|---|
| SMP/E managed | Software is delivered as SYSMODs/FMIDs and installed into SMP/E target/distribution zones and libraries. | CSI/zones, RECEIVE source, HOLDDATA, requisites, APPLY CHECK, target/DLIB allocation, ACCEPT timing and runtime activation. |
| Non-SMP/E | Vendor jobs, pax/USS archives, load libraries, scripts, product installers or prebuilt runtime artifacts perform the installation. | Package integrity/version evidence, datasets and zFS, installation logs, configuration separation, repeatability and explicit rollback. |
| Hybrid | The base is SMP/E managed but configuration, web/UI components, USS content, databases or runtime libraries are built outside SMP/E. | Treat the SMP/E and runtime/configuration paths as separate change streams and document how they are synchronized. |
This classification matters because the rollback mechanisms are different. SMP/E gives you CSI-described software state and controlled APPLY/RESTORE behavior before ACCEPT; a vendor installer might instead require dataset backups, copied runtime libraries, exported configuration or a product-specific uninstall.
| Area | Questions to answer before implementation |
|---|---|
| z/OS / hardware | Supported z/OS release? Required architecture/CF level? Required z/OS functions? Target-system PTFs? |
| Dependent software | Minimum Db2/CICS/MQ/Java/runtime/security/network product levels? Coexistence restrictions? |
| SMP/E | Existing CSI or new CSI? Global/target/DLIB zones? FMIDs? DDDEFs? SMPPTS/SMPLOG space? Required enhanced HOLDDATA? |
| Storage | HLQs, SMS classes, volumes, target/DLIB/runtime libraries, work space, zFS size/growth, mount point and ownership? |
| System configuration | PROCLIB, PARMLIB, subsystem definitions, APF, LINKLIST, LPA, LLA, exits, symbols, health checks? |
| Security | STC identity, dataset profiles, FACILITY/OPERCMDS/PROGRAM/product classes, USS UID/GID, certificates/keyrings? |
| Network | Ports, VIPAs/interfaces, DNS, AT-TLS/System SSL, firewall requests, remote endpoints? |
| Operations | Startup/shutdown order, automation, WLM classification, monitoring, log retention, backup/recovery and scheduler dependencies? |
/* Illustrative SMP/E thought process — use product/program-directory syntax */ SET BDY(GLOBAL). RECEIVE ... SET BDY(target-zone). APPLY CHECK ... /* review requisites, HOLDs, link-edit output and target libraries */ APPLY ... /* configure / activate / validate product */ /* ACCEPT later according to site maintenance policy */
“The STC is active” is not an acceptance test. A good validation proves each layer:
| Layer | Evidence |
|---|---|
| Installation | SMP/E/package logs, installed FMID/version, expected libraries/files created. |
| Initialization | Documented ready messages; no unresolved WTOR, security, allocation or compatibility errors. |
| Function | Representative product function/transaction/batch/API completes successfully. |
| Integration | Dependencies and consumers connect; ports/interfaces/certificates work; automation and monitoring see the product. |
| Recovery | Stop/start or documented restart path is understood; backup/restore and rollback point are known. |
Maintenance is more than APPLYing a PTF. A sysprog must understand the service terminology, know why a fix is needed, identify what else it pulls in, choose a deployment scope, preserve recovery and prove that the executing code has actually changed.
| Term | Practical meaning |
|---|---|
| APAR | The formal record describing a product defect/problem and its resolution status. An APAR is not itself the installed fix package. |
| PTF | A Program Temporary Fix—the installable SMP/E service that resolves one or more problems or provides function. |
| PE PTF | A PTF found to be in error. Current ERROR HOLDDATA tells SMP/E that the PTF is an exception SYSMOD and identifies the problem/fixing information. |
| HIPER | High Impact or PERvasive service—problems IBM considers significant enough to warrant elevated attention. HIPER does not mean “apply blindly”; check applicability and requisites. |
| HOLDDATA | Exception information consumed by SMP/E. ERROR holds cover PTFs in error; SYSTEM holds identify special actions/notifications; USER holds are installation-defined. |
| FIXCAT | Enhanced HOLDDATA categories that associate APAR/PTF service with a target system, coexistence requirement, product-install requirement or other defined purpose. |
| RSU | Recommended Service Upgrade. IBM's recommended service level reflects service that has completed its consolidated test/recommendation process; RSU SOURCEIDs identify when service became recommended. |
| PUT SOURCEID | A source identifier associated with when PTF service closed; it is different from the RSU recommendation timing. |
| USERMOD | A locally supplied modification tracked by SMP/E. Vendor/IBM maintenance can intersect with USERMOD-modified elements, so MODID and rework are part of maintenance planning. |
/* Illustrative individual-PTF pattern — adapt to the CSI and product */ SET BDY(GLOBAL). /* RECEIVE service and current HOLDDATA */ SET BDY(target-zone). APPLY CHECK SELECT(UJxxxxx) GROUPEXTEND. /* review HOLDs, requisites, MODID and link-edit output */ APPLY SELECT(UJxxxxx) GROUPEXTEND. /* perform documented activation and verify the executing level */
Preventive maintenance has a different risk model from a one-PTF corrective change. The goal is not to chase every available PTF; it is to keep the estate on a tested, supportable service level with known HIPER/security/PE-correcting service.
FIXCAT is one of the most useful pieces of SMP/E data for lifecycle and upgrade work. A fix category identifies service required for a specific target, coexistence case, installation requirement or function. For a z/OS target release, IBM documents using REPORT MISSINGFIX against relevant zones to identify missing service.
SET BDY(GLOBAL). REPORT MISSINGFIX ZONES(target-zone) FIXCAT(IBM.TargetSystem-RequiredService.z/OS.3.2).
The important limitation: FIXCAT can identify required service for a target, but it does not magically tell you whether the product's release level itself is supported. Release compatibility still requires the vendor/IBM supported-level information.
| Activation pattern | Typical concern |
|---|---|
| Dynamic / no recycle | Product supports refresh/reload or the changed component is picked up on next invocation. |
| STC recycle | Confirm shutdown order, restartability, active library path and startup messages. |
| LLA/LINKLIST/LPA related | Know whether directory refresh, dynamic LPA action or next IPL is the supported activation path. |
| IPL | Bundle only when dependencies and fallback are understood; post-IPL validation becomes part of maintenance validation. |
| Copied runtime libraries | APPLY changes the SMP/E target but not necessarily the production execution copy—synchronize explicitly. |
A release upgrade is a migration project, not a larger PTF. The critical engineering decisions are whether old and new can coexist, how code/configuration/data move, where the last safe fallback point exists and what dependencies must move in the same window.
| Question | Side-by-side | In-place |
|---|---|---|
| Code/runtime | New release installed into separate libraries/zFS while old stays intact. | Existing runtime is changed/replaced directly. |
| Rollback | Usually stronger if data/config format remains compatible; execution paths can be switched back. | Depends heavily on backups, vendor uninstall/restore and whether data was converted. |
| Testing | Allows pre-cutover startup/testing where licenses/ports/data permit. | Testing generally happens inside the outage/change window. |
| Storage/config complexity | Requires parallel HLQs, ports, PROCs, config and sometimes duplicate persistent data. | Lower footprint, but greater blast radius. |
| Best fit | Major release migration, new runtime libraries, meaningful cutover or strong fallback requirement. | Vendor explicitly supports it, data model is unchanged and rollback is well defined. |
Side-by-side is not automatically safer. If the first start of the new release converts a shared database/control repository irreversibly, old code may no longer be a valid fallback even though its libraries still exist.
| Object | Migration questions |
|---|---|
| Configuration datasets | Can old members be copied? Must new samples be merged? Any renamed/removed keywords? |
| VSAM/control repositories | Is conversion required? Can old and new releases share it? Is conversion reversible? |
| Db2/database schema | DDL changes? Bind/rebind? Backward-compatible schema? Backup/restore requirement? |
| zFS | New home path or in-place update? Ownership/permissions? Persistent data versus replaceable runtime? |
| Load libraries | New HLQ? STEPLIB versus LINKLIST? APF? copied runtime libraries? LLA refresh? |
| Certificates/secrets | Can the new release use existing keyrings/labels? New algorithms or TLS requirements? |
A useful fallback plan answers three questions independently:
Critical rule: “Old libraries are still on disk” is not a rollback plan if the new release has converted shared persistent data.
This is the bridge between inventory and an executable upgrade roadmap. The difficult part is not colouring a spreadsheet red or green—it is proving what product/version is actually installed, using authoritative lifecycle evidence, separating release compatibility from service prerequisites and documenting unknowns instead of guessing.
Asset reports often contain features, FMIDs, shared components and historic datasets rather than one clean “product = version” row. I would use multiple evidence sources and record which one established the canonical version.
| Evidence source | What it can prove | Limitations |
|---|---|---|
| SMP/E CSI / FMIDs | Installed functions and service ownership in target zones; strong for SMP/E-managed IBM/ISV software. | FMID-to-marketing-product mapping may require program directory/vendor data; runtime might be copied elsewhere. |
| Product VERSION / STATUS command | The release the running address space believes it is executing. | Not every product has one; output may omit maintenance level. |
| Startup/job log messages | Often prints product release, build, FMID/service or module level at initialization. | Must prove the log belongs to the active instance, not an old spool entry. |
| Load-module metadata | Link-edit date, module ID or vendor-defined version text can corroborate runtime code. | Dates alone are weak evidence and copied libraries can confuse ownership. |
| USS manifest/properties/files | Useful for Java/web/USS products delivered outside classic SMP/E runtime. | File version may describe one component, not the licensed product. |
| Software asset discovery / TADz-style report | Broad estate discovery and candidate product/version mapping. | Requires normalization: features/components may be reported separately from the lifecycle-managed product. |
| z/OSMF software/CSI services | Can help model software instances and programmatically query SMP/E CSI information. | Only as accurate as the defined software instance/CSI and available product mapping. |
The safest record therefore stores canonical product name + installed release + evidence source + evidence date. If evidence conflicts, do not average it—resolve the active runtime path.
discovered component → canonical product → release. Keep the raw discovery name as evidence so the normalization can be audited later.Store the source URL/document, retrieved/verified date and confidence. “No public EOS date found” is a valid status; inventing a date from release age is not.
| Common term | What to capture |
|---|---|
| GA | When the release became generally available. |
| End of marketing / withdrawal | Ordering/sales status; not necessarily the support end date. |
| EOS / end of standard support | Last date for normal vendor support under the standard lifecycle. |
| Extended / sustaining support | Availability, duration and limitations—do not treat it as equivalent to normal support. |
| Latest release | Newest GA release, which may not yet be the best immediate upgrade target for a given estate. |
For every product against a target z/OS release ask separately:
Do not collapse these into one field. A product can be service-supported but too old for the target z/OS; conversely, the right product release can still require target-system PTFs before the z/OS upgrade.
Preventive Service Planning (PSP) buckets historically consolidated installation/upgrade service recommendations and cross-product dependencies. IBM now states that traditional PSP buckets for most IBM Z products are being phased out/no longer created for many current releases. For current work, use IBM's current installation/service recommendation information together with enhanced HOLDDATA/FIXCAT, product documentation, Red Alerts/security information and supported-release tables.
The useful PSP mindset remains: before introducing a target product/z/OS/hardware level, ask what service must already exist on the systems/products that will interact with it.
IBM.TargetSystem-RequiredService... — service required on other installed software to run with a target system/release/function.IBM.Coexistence... — service that allows old/new releases or systems to coexist/fallback where IBM defines the category.IBM.ProductInstall-RequiredService — service IBM recommends/requires when installing products, including important fixes identified after GA.SET BDY(GLOBAL). REPORT MISSINGFIX ZONES(CICS51T) FIXCAT(IBM.TargetSystem-RequiredService.z/OS.3.2).
Run the appropriate report against each relevant global/target-zone environment. A z/OS upgrade can be blocked by middleware in a different CSI from the base z/OS CSI.
| Product | Installed | Support status | Target z/OS release support | Required service | Action |
|---|---|---|---|---|---|
| <canonical product> | <release + evidence> | Current / EOS date / unknown | Supported / unsupported / vendor validation needed | FIXCAT/PTF/vendor list | None / maintain / upgrade / contact vendor |
Add source and verification-date columns in the real working repository even if the presentation dashboard hides them.
Decommissioning is not “delete the datasets.” It is a controlled proof that the software is no longer executed or depended on, followed by removal of every integration point in an order that preserves rollback and audit evidence.
Use multiple discovery methods: repository/search, scheduler search, PROCLIB/PARMLIB scans, automation definitions, product logs and a defined observation period. “Nobody remembers using it” is not dependency evidence.
| Model | Approach |
|---|---|
| Immediate replacement | Cut consumers to the replacement, leave old product stopped but intact through rollback period, then remove. |
| Feature absorbed elsewhere | Prove each old integration/job is removed; often more dependency discovery is needed than for a like-for-like replacement. |
| Unused product | Use observation, scheduler/config searches and owner sign-off to prove non-use before deleting. |
| License-driven urgent removal | Separate “stop usage by entitlement date” from physical cleanup; execution can be disabled before final archival/deletion. |
| Layer | Decommission check |
|---|---|
| PARMLIB / subsystem | Remove product members/references, IEFSSN or component-specific definitions only when no shared dependency remains. |
| PROCLIB / automation | Remove STC procedures, initialization commands, scheduler/automation rules and recovery actions. |
| APF / LINKLIST / LPA / LLA | Remove obsolete libraries from active and next-IPL definitions; verify modules are not required by another product. |
| RACF | Retire STARTED identity and product-specific profiles after shared-use review; remove certificate/keyring material only if dedicated. |
| WLM / monitoring | Remove product-specific classification/report classes, health checks, alert rules and dashboards. |
| Network | Remove dedicated ports, VIPA/DNS/firewall/AT-TLS definitions and remote endpoint configuration. |
Best evidence of a good decommission: no execution path, no unresolved dependency, no next-IPL reactivation path, retained audit/recovery artifacts and an inventory/license record that matches reality.
The lifecycle guides intentionally connect to the deep technical articles instead of duplicating them. Use SMP/E for CSI/SYSMOD mechanics, PARMLIB & PROCLIB for configuration activation, APF/LINKLIST/LPA for runtime search/authorization, RACF for product security integration, and z/OSMF for workflows, Software Management and REST-driven automation.
z/OS Internals
The hardware view I use as a sysprog: CPCs and LPARs, processor types, memory, channels, devices and the boundary between z/OS symptoms and physical infrastructure.
I find mainframe hardware easier to understand if I separate the physical box from the logical system that z/OS sees. IBM calls the physical machine the Central Processor Complex (CPC); most sysprogs simply say “the box.” Inside that CPC, PR/SM divides processor, memory and I/O resources into logical partitions. An LPAR is therefore not a small physical machine bolted inside the frame—it is a controlled logical view of shared hardware.
z/OS runs inside one of those LPARs. It sees logical processors, a defined amount of central storage and a set of I/O devices made visible through the I/O configuration. When I troubleshoot a hardware-looking problem, I keep asking which layer I am actually looking at: the z/OS image, the LPAR definition, the channel subsystem, the storage/network device, or the CPC itself.
A CPC can contain different processor types. General-purpose CPs execute normal z/OS work. Specialty engines exist so particular workloads can run on processors designed or licensed for those workloads—for example zIIPs for eligible work and ICF processors for Coupling Facility images. The important point operationally is that processor eligibility matters: adding idle specialty capacity does not automatically help work that can only run on general CPs.
PR/SM dispatches logical processors onto physical processors according to partition definitions, weights, caps and the overall CPC workload. That is why “LPAR CPU is high” is not a complete hardware diagnosis. I also want to know whether the LPAR is capped, whether shared processors are contended, whether logical processor configuration is sensible, and whether the workload is actually delayed for CPU.
D M=CPU D M=STOR
D M=CPU gives the z/OS view of processors. D M=STOR gives the storage configuration visible to the image. For real capacity questions I correlate those displays with RMF and, when needed, HMC/partition data.
Central storage is the real memory assigned to the LPAR. z/OS then builds virtual address spaces on top of it and pages less-active content as needed. I avoid comparing a process’s virtual size directly with CPC memory; the two are not equivalent. A 64-bit address space can reserve or address enormous ranges without all of that data being resident.
When memory pressure is suspected, I look for sustained paging, low frame headroom, auxiliary-storage pressure and the address spaces driving the working set. If the assigned LPAR storage itself changed, that becomes a PR/SM/HMC question rather than only a z/OS tuning question.
The channel subsystem is what lets processors and operating systems reach devices without the CPU micromanaging every I/O operation. The I/O definition describes channel paths, control units and devices, and z/OS works with the device numbers and paths made available to its LPAR.
The mental path I use is:
Application / subsystem
↓
z/OS access method / IOS
↓
Channel subsystem
↓
Channel path
↓
Control unit / storage or network adapter
↓
Device
If a job has high I/O delay, that does not immediately prove a bad disk. The delay can come from queueing, channel/path problems, control-unit response, serialization, a volume problem or the application’s own I/O pattern.
D IOS,CONFIG D M D U,,, D M=DEV(device)
RMF device and channel reports are normally what turn those displays into a performance diagnosis.
PR/SM owns the partitioning boundary. The Hardware Management Console is where operators or platform teams define and control LPAR resources, profiles, activation and many hardware operations. z/OS can report what it has, but it cannot by itself tell me every physical scheduling decision occurring outside the image.
That boundary matters during incidents. A z/OS team may see CPU delay; the cause may be WLM policy inside z/OS, a defined-capacity cap on the LPAR, competition elsewhere on the CPC, or simply valid high workload. The fastest diagnosis usually comes from aligning both views instead of arguing whether the problem is “hardware” or “software.”
The line I try not to cross is guessing at hardware from a single z/OS symptom. I want a chain of evidence from the workload down to the physical resource before I call the problem a CPC, channel or storage fault.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How I think about a Parallel Sysplex: systems first join and communicate through XCF, then products use XES and Coupling Facility structures to share state safely across those systems.
A Parallel Sysplex is not simply “several LPARs connected together.” The objective is to let multiple z/OS images cooperate closely enough that workloads can move, data can be shared and a single system failure does not have to become an application outage.
I break the technology into three layers. XCF handles membership, groups and signalling between systems. XES is the service applications use to exploit Coupling Facility structures. The Coupling Facility provides shared high-speed structures for locking, caching and lists. Couple data sets and policies hold the definitions that keep this coordinated across IPLs.
z/OS images
│
├─ XCF membership / signalling
├─ XES requests for shared structures
└─ shared DASD / subsystems
│
▼
Coupling Facility
├─ lock structures
├─ cache structures
└─ list structuresXCF is the base communication framework. Systems join the sysplex, applications form XCF groups, members join those groups, and XCF transports signalling between them. Some products expose their own higher-level functions, but underneath they still depend on healthy cross-system communication.
D XCF D XCF,SYSPLEX,ALL D XCF,GROUP D XCF,PATHIN,DEVICE=ALL D XCF,PATHOUT,DEVICE=ALL
When several unrelated sysplex-aware products degrade at the same time, I check XCF early. One failed signalling path may be tolerated because another path exists; the incident begins when redundancy or capacity is no longer enough.
A Coupling Facility runs CFCC, normally in an LPAR using ICF processors. Its memory is divided into structures requested by connected applications.
The structure name alone is not enough to diagnose a problem. I also want to know who connects to it, where it is allocated, its size, entry/element usage, whether duplexing or rebuild is active, and what the owning product expects during failure.
D XCF,CF D XCF,STR D XCF,STR,STAT=ALLOC D XCF,STR,STRNAME=<STRUCTURE> D CF
Couple data sets are persistent control data used by sysplex services. Depending on the function, there are couple data sets for SYSPLEX, CFRM, LOGR and other policy types. I think of them as the durable configuration that all members agree to use—not as ordinary data sets that should be edited directly.
D XCF,COUPLE D XCF,COUPLE,TYPE=SYSPLEX D XCF,COUPLE,TYPE=CFRM D XCF,COUPLE,TYPE=LOGR
The CFRM policy describes Coupling Facilities and structure attributes such as size, preference list and other allocation characteristics. The active policy lives in the CFRM couple-data-set environment.
The exact policy content is site- and product-specific, but the workflow is consistent: format the CFRM couple data sets, define a policy, activate it, then verify the structures and connectors rather than assuming the command completed the change.
//CFRMCDS EXEC PGM=IXCL1DSU
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINEDS SYSPLEX(YOURPLEX) TYPE(CFRM)
DSN(YOURHLQ.CFRM.PRIMARY) VOLSER(VOL001)
/*//CFRMPOL EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DATA TYPE(CFRM) REPORT(YES)
DEFINE POLICY NAME(CFRMPOL1) REPLACE(YES)
STRUCTURE NAME(APPL_LOCK)
SIZE(4096) INITSIZE(2048) PREFLIST(CF01)
/*SETXCF START,POLICY,TYPE=CFRM,POLNAME=CFRMPOL1 D XCF,POLICY,TYPE=CFRM D XCF,STR
I never treat a structure resize or relocation as a generic infrastructure change. The owning subsystem’s documentation determines whether the structure can be rebuilt, reallocated or altered dynamically and what persistence/recovery semantics apply.
Sysplex availability comes from planned redundancy and recovery behaviour. A CF or structure can fail, an XCF signalling path can disappear, or a system can stop responding. The technology provides mechanisms such as rebuild, alternate CF placement, duplexing and system-status detection, but those mechanisms only work well when the policies and alternate resources were designed beforehand.
During a structure incident I first determine whether the structure is full, unavailable, rebuilding or merely showing high utilization. Those are different conditions. A nearly full cache structure may need sizing analysis; a failed structure in active rebuild needs careful monitoring; a policy allocation failure points me back to CFRM definition, CF capacity or connectivity.
The main lesson is that Sysplex is shared infrastructure. If Db2, Logger, GRS and another sysplex consumer all become unhealthy at the same time, I do not start by restarting four products independently.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
A sysprog view of z/OS data sets: organization, DCB attributes, allocation, catalogs, GDGs, VSAM, DASD placement and the checks I use before changing or repairing anything.
The quickest way I learned to stop getting confused by z/OS data sets was to separate four questions: what is the data set called, how is it organized, where is it physically allocated, and how is it found? The catalog answers the naming/location question; the VTOC describes allocations on a volume; the data-set organization and access method describe how records are stored and accessed.
That separation becomes important during failures. “Dataset not found” can mean a missing catalog entry, an unavailable volume, a wrong GDG generation, a typo, or a security/allocation failure that was summarized badly by the application.
A sequential data set (PS) is a linear sequence of records. A PDS stores members in one library but uses a directory plus member extents and needs compression after enough replacements/deletions. A PDSE keeps the library/member model but removes many classic PDS limitations and is the normal choice for modern program and source libraries unless a product explicitly requires PDS behaviour.
For load libraries I also care about whether the consuming product supports PDSE, whether sharing rules are correct and whether the library participates in LINKLIST, LPA, APF or LLA management.
BLKSIZE=0 normally lets the system choose an efficient value.I do not copy DCB values blindly from old JCL. If the output is being created by a program or utility, I first check whether that program supplies or derives the attributes. Bad DCB assumptions commonly surface as allocation/open errors or records being interpreted incorrectly.
SPACE describes primary and secondary allocation. The primary quantity is what the data set asks for initially; secondary quantities are used when it extends. Repeated extents are normal up to a point, but a data set that constantly runs out of extents usually needs a sizing or storage-management correction, not repeated manual extension.
SMS can select storage class, data class, management class and volumes according to policy. Non-SMS allocation may explicitly use UNIT/VOL. I treat volume selection as storage policy, not application trivia, because catalog/VTOC state and storage-group capacity are part of the reliability of the workload.
The catalog maps a data-set name to the information needed to locate it. The master catalog also owns aliases that route high-level qualifiers to user catalogs. A VTOC exists on a DASD volume and records allocations on that volume. VSAM/SMS environments also use VVDS metadata.
When a catalog problem is suspected, I avoid “repairing” anything until I know which metadata layer is wrong. Re-cataloging a name when the on-volume components are not what I think they are can make a recoverable problem worse.
//LISTCAT EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTCAT ENTRY(YOURHLQ.DATASET) ALL /*
VSAM is a family of access methods and data-set organizations rather than one data-set type. The common structures are KSDS, ESDS, RRDS and LDS. KSDS uses keys and indexes; ESDS is entry-sequenced; RRDS provides relative-record access; LDS is essentially byte-oriented space used by products such as zFS and other system components.
For a sysprog, the important part is recognizing when IDCAMS definitions, catalog components, data/index components, share options or control interval/control area behaviour are involved. I do not assume a generic sequential copy utility is appropriate for a VSAM object.
//REPRO EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //INFILE DD DISP=SHR,DSN=YOURHLQ.INPUT //OUTFILE DD DISP=SHR,DSN=YOURHLQ.OUTPUT //SYSIN DD * REPRO INFILE(INFILE) OUTFILE(OUTFILE) /*
A Generation Data Group gives me a stable base name plus ordered generations. Relative references such as (0), (-1) and (+1) are convenient in batch, but they are evaluated in the context of job execution and catalog state. I am careful with restart/re-run scenarios because an extra created generation can shift what “current” means.
The GDG base controls the generation limit and rollover behaviour. Changing those parameters is a data-retention decision, not merely a JCL cleanup.
Data-set naming conventions matter because HLQs frequently drive catalog aliases, SMS rules, RACF profiles, automation and ownership. System libraries such as PARMLIB, PROCLIB, LINKLIB, LPALIB and product target libraries have additional operational meaning; moving or renaming them can affect IPL, program fetch and authorization.
For that reason, I try to understand a data set’s role before treating it as storage. Two equally sized PDSEs can have completely different risk if one is an application library and the other is APF-authorized and in LINKLIST.
That sequence keeps me from using IDCAMS ALTER/DELETE/RECATALOG as trial-and-error commands.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How z/OS finds executable modules, what LPA, LINKLIST and LLA each do, why APF is a separate security concept, and how I diagnose S806 or a wrong-level load module.
Program fetch problems become much easier once I keep two questions separate: where will z/OS search for the module? and is the library/module allowed to run authorized? Search order is about finding code. APF is about authorization. Mixing those concepts leads to bad fixes such as APF-authorizing a library just because a module was not found.
1. Already-loaded usable copy / job pack area 2. TASKLIB 3. STEPLIB, otherwise JOBLIB 4. LPA (dynamic / fixed / modified / pageable as applicable) 5. LINKLIST
The exact fetch path can be influenced by the environment and product, but this order is the useful working model for normal batch/STC program fetch. A private STEPLIB can deliberately override a module that also exists in LINKLIST, which is one reason wrong-level problems can affect only one started task.
The Link Pack Area holds shared executable modules so multiple address spaces can use the same common copy. Parts of LPA are established during IPL; dynamic LPA lets selected modules be added or removed without an IPL when supported and appropriate.
I treat LPA changes cautiously because they affect shared code. Before adding a module dynamically I confirm that the product actually expects LPA residency and that the module/library level matches the active configuration.
D PROG,LPA,MODNAME=<MODULE> SETPROG LPA,ADD,MODNAME=<MODULE>,DSNAME=<DSN>
LINKLIST is a logical concatenation of program libraries used for program fetch. LLA improves lookup efficiency for library members and is commonly associated with LINKLIST-managed libraries. Updating a data set on disk does not automatically mean every address space will begin executing the new member immediately; product restart, LLA refresh or other activation may be required.
D PROG,LNKLST D LLA F LLA,UPDATE=<XX>
When maintenance replaces load modules, I always ask what the activation mechanism is. “PTF applied” and “new code executing” are separate milestones.
APF identifies libraries trusted to contain authorized programs. An authorized program can perform privileged operations that normal application code cannot, so APF is part of the z/OS security boundary.
That means I do not add a library to APF as a convenience. I verify vendor requirements, library integrity, dataset protection and whether every library in the relevant authorization chain meets the rules for the execution path.
D PROG,APF SETPROG APF,ADD,DSNAME=<DSN>,SMS SETPROG APF,DELETE,DSNAME=<DSN>,SMS
PROGxx members can define APF lists, LNKLST sets and other program-management configuration. Dynamic SETPROG commands are useful, but I still make the persistent PARMLIB change when the configuration must survive IPL. Otherwise the system can look correct today and quietly revert at the next IPL.
SET PROG=<XX> SETPROG LNKLST,TEST,NAME=<SET>,MODNAME=<MODULE> D PROG,LNKLST
S806 is a search/fetch problem first. APF only enters the investigation if the eventual failure is about authorization.
A wrong-level problem is usually harder because the module is found. I compare all candidate copies: STEPLIB, LINKLIST and LPA. Then I check timestamps/service level, LLA state and whether a running address space must be recycled to pick up the replacement.
During upgrades I deliberately avoid leaving both old and new libraries ambiguously reachable. Side-by-side releases are useful only when the execution path for each release is explicit.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
A practical batch-abend reference: how I use the completion code, reason code, messages, PSW/registers and job context together instead of treating three characters as the diagnosis.
A system completion code such as S0C4 or SB37 tells me which broad failure class occurred. It does not tell me the root cause by itself. I want the message set, reason code, failing step/program, recent change and—when it is a program check—the PSW/register/module context.
The same code can have very different fixes. An 0C4 caused by a bad pointer after a software change is not approached the same way as an 0C4 caused by storage overlay. A B37 on a sequential output file is not the same as an extent problem on a heavily fragmented library.
Job name / job ID / failing step System and exact timestamp System completion code + reason code User abend code if present JESJCL / JESMSGLG / JESYSMSG Program or load-module level Relevant application/runtime messages PSW / registers / module + offset for program checks Dump or traceback identifiers Recent software, JCL or data change
For application code, compiler/runtime traceback information often gets me to the failing statement faster than raw IPCS. For system/product code, a dump and vendor symbol information may be required.
All three indicate a space/allocation failure family, but the exact code/reason matters. I check the data-set allocation, primary/secondary space, extent count, volume free space, SMS behaviour and whether the data set can extend to another eligible volume.
The right fix is not always “increase SPACE.” If a secondary quantity is missing, the volume is full, extents are exhausted or SMS cannot find eligible capacity, changing only the primary allocation may not solve anything.
Storage-related abends need the same discipline: identify which address space and which storage area was exhausted. Private storage, common storage, 64-bit storage and auxiliary-storage pressure are different problems.
D VIRTSTOR,HVCOMMON D VIRTSTOR,HVSHARE D ASM D A,L
Likewise, a job that appears “hung” before an abend may have been waiting on serialization. I check GRS when dataset/control-resource contention is possible.
D GRS,C D GRS,RES=(SYSDSN,<DSN>)
Some completion codes are operational outcomes rather than code defects: operator cancellation, time limits, spool/output limits or subsystem termination. I verify why the system ended the step and who/what initiated it before sending the problem to an application team.
If a timeout is involved, I also check whether the job was actually consuming CPU or spending the elapsed time waiting on ENQ, I/O, WLM or an external dependency.
Not every failed OPEN or allocation is a storage problem. RACF denial messages, catalog errors and SMS allocation failures can all surface near the failing DD statement. I read the accompanying IEC/IGD/ICH messages instead of diagnosing from the final abend line alone.
I try to preserve the failing evidence. Cancelling/restarting, increasing REGION, changing SPACE or granting broad access may make the next run succeed while destroying the explanation. A good escalation package contains the code/reason, messages, failing program/offset, input context and the exact difference from a known-good run.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
The IBM utilities I reach for most often, what each one is actually for, and how I choose between data-set, catalog, storage, sysplex, SMF and UNIX-oriented tools.
On z/OS there is usually more than one way to move, define or inspect data. I try not to choose a utility just because I remember its syntax. The right question is what object I am manipulating: a sequential data set, a library, VSAM/catalog metadata, whole volumes, couple data sets, SMF records or a UNIX file.
That matters because a utility that works perfectly for PS data can be the wrong tool for VSAM; a DFSMSdss dump is not the same thing as an IEBCOPY library copy; and IXCMIAPU is an administrative-policy tool, not a generic text editor.
//ALLOC EXEC PGM=IEFBR14 //NEWDD DD DSN=YOURHLQ.NEW.DATA, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(5,2)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0)
IEFBR14 itself does essentially nothing useful to the data. The allocation/deletion side effect comes from JCL allocation processing. I use it for simple dataset lifecycle tasks, not for copying content.
//COPY EXEC PGM=IEBGENER //SYSUT1 DD DISP=SHR,DSN=YOURHLQ.INPUT //SYSUT2 DD DSN=YOURHLQ.OUTPUT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(5,2)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=0) //SYSPRINT DD SYSOUT=* //SYSIN DD DUMMY
IEBGENER is a simple sequential copy tool. If I am dealing with partitioned libraries, VSAM, catalog metadata or volume-level movement, I pick something more appropriate.
//COPY EXEC PGM=IEBCOPY //SYSPRINT DD SYSOUT=* //SYSUT1 DD DISP=SHR,DSN=YOURHLQ.SOURCE.PDSE //SYSUT2 DD DISP=SHR,DSN=YOURHLQ.TARGET.PDSE //SYSIN DD * COPY INDD=SYSUT1,OUTDD=SYSUT2 /*
IEBCOPY understands libraries and members. It is the normal utility I expect when copying or reorganizing PDS/PDSE content, subject to the library type and product requirements.
//AMS EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSIN DD * LISTCAT ENTRY(YOURHLQ.DATA.SET) ALL /*
IDCAMS covers catalog services and VSAM definitions/operations such as DEFINE, LISTCAT, REPRO and DELETE. Because it can change catalog structures and data-set definitions, I treat recovery-oriented commands with much more care than a simple LISTCAT.
ADRDSSU is the DFSMSdss program used for data-set and volume dump/restore/copy operations. I reach for it when I need storage-aware movement or backup at a broader level than a record-by-record copy. SMS, serialization, filtering and target-volume considerations all matter.
//TSO EXEC PGM=IKJEFT1B
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
LISTCAT ENTRY('YOURHLQ.DATA.SET') ALL
/*
IKJEFT1B lets me run TSO commands or REXX/CLIST logic in batch. I use it when the function is naturally a TSO command rather than forcing it through another utility interface.
//REPORT EXEC PGM=IXCMIAPU //SYSPRINT DD SYSOUT=* //SYSIN DD * DATA TYPE(CFRM) REPORT(YES) /*
IXCL1DSU formats couple data sets. IXCMIAPU defines/reports administrative policies such as CFRM/LOGR-related definitions. I keep those roles distinct because formatting a CDS and changing a policy are different operational steps.
SMF has different dump programs depending on the recording model: IFASMFDP for traditional SMF data-set input and IFASMFDL for SMF log streams. For z/OS UNIX execution from batch, BPXBATCH is useful for invoking shell commands or programs.
//USS EXEC PGM=BPXBATCH //STDOUT DD SYSOUT=* //STDERR DD SYSOUT=* //STDPARM DD * SH ls -la /your/path /*
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
What actually happens from LOAD to a usable z/OS system, which configuration sources matter, and how I plan shutdown and post-IPL validation so “IPL complete” really means the LPAR is ready.
An IPL reloads z/OS and rebuilds a large part of the system state from hardware definitions, SYSRES content, LOADxx/IEASYSxx choices and PARMLIB members. That is why an IPL can expose configuration mistakes that stayed hidden while the system was running dynamically.
I separate the work into three phases: controlled shutdown, initialization, and validation. The third phase is the one that gets skipped most often. A console prompt and an active JES2 do not prove that Logger, XCF, TCP/IP, OMVS mounts, APF/LINKLIST, automation and critical STCs are all correct.
The hardware load profile identifies the device and load parameters used to begin loading the system. The bootstrap and nucleus initialization path brings in the nucleus, processes initialization modules and establishes core services before normal started tasks and subsystems become available.
LOADxx and IEASYSxx are central because they influence which PARMLIB concatenation and system-parameter suffixes are selected. From there, other members control areas such as master-scheduler commands, program libraries, consoles, SMF, dumps, UNIX, networking and subsystem-specific configuration.
I do not memorize IPL as one fixed list of modules. What matters operationally is knowing which choices are made before z/OS is fully available and which configuration can be changed dynamically afterward.
A normal IPL and a clear IPL are not equivalent operationally. A clear operation resets more state and is used only when the situation/procedure requires it. Likewise, re-IPL after maintenance, disaster recovery IPL and stand-alone-dump loading all have different objectives even though each begins from the hardware console.
I follow the site’s documented LOAD parameters and HMC profiles rather than constructing them during an outage.
The shutdown sequence is dependency-driven. Application work stops first, then middleware/subsystems, then shared/base services in the order required by the installation. The exact list varies, but the principle does not: stop consumers before the service they consume.
D A,L D R,R D OMVS,A=ALL D XCF $DJES2
Before shutting down I also confirm that recovery evidence is safe: SMF offload, Logger status, dumps, automation state and any product-specific checkpointing. For a planned maintenance IPL, I want a pre-IPL snapshot of active PARMLIB/PROCLIB, APF/LINKLIST/LPA, mounts, key STCs and sysplex state so the post-IPL comparison is objective.
D IPLINFO D A,L D XCF D XCF,STR D LOGGER,STATUS D OMVS,F D TCPIP D SMF D DUMP,OPTIONS D PROG,APF D PROG,LNKLST
Post-IPL failures are often configuration-activation failures rather than brand-new defects: wrong member suffix, missing PROCLIB library, APF/LINKLIST difference, a zFS not mounted, a dependency started too early, a CF/log stream unavailable, or a product still pointing to the previous release.
The most useful habit is to find the first failed layer. If ten STCs fail because one shared filesystem never mounted, I have one root problem, not ten product incidents.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
The working model I use for SMP/E: CSI zones are the record of truth, SYSMODs change that state through RECEIVE/APPLY/ACCEPT, and runtime activation is still a separate systems-programming step.
SMP/E is often introduced as “the tool used to install maintenance.” That is true but incomplete. The part I value is that SMP/E keeps a controlled record of what software elements and SYSMODs belong to the product, what level is installed, what prerequisites exist and what has been applied or accepted.
If I need to answer “is this PTF applied here?”, “what FMID owns this module?” or “what prerequisites block this service?”, the CSI is supposed to give me evidence instead of forcing me to infer the answer from library timestamps.
The zones describe state; the actual load/source/macro libraries hold the executable or build elements. I keep that distinction clear because a library being manually copied does not mean SMP/E’s CSI knows about the change.
Products arrive as function SYSMODs/FMIDs and are maintained through PTFs, APAR-related service and, where used, USERMODs. HOLDDATA adds conditions that SMP/E cannot simply resolve by dependency processing—manual actions, PE information, HIPER/security context, FIXCAT categories and other service considerations.
When maintenance fails APPLY CHECK, I read the requisites and HOLDDATA instead of trying to FORCE past them. The point of SMP/E is dependency control; bypassing it removes exactly the protection I am relying on.
External service / product package
│
▼
RECEIVE ──► Global zone + SMPPTS / SMPTLIB
│
▼
APPLY CHECK ──► prerequisites / HOLD / MODID analysis
│
▼
APPLY ──► Target zone + target libraries
│
▼
Runtime activation / validation
│
▼
ACCEPT CHECK / ACCEPT ──► DLIB zone + distribution libraries
RECEIVE makes SMP/E aware of the service/package. APPLY CHECK is my dry run for target-system impact. APPLY updates target-zone state and target libraries. ACCEPT advances the distribution-library level after the maintenance has passed the site’s stabilization policy.
I do not ACCEPT immediately just because APPLY succeeded. ACCEPT changes the backout/reconstruction position, so it belongs after validation according to the installation’s maintenance policy.
This is where SMP/E work becomes systems programming. A PTF can be successfully applied while the running system still uses the old code from LPA, LINKLIST/LLA, a STEPLIB-loaded address space or an already-loaded module.
For every maintenance change I identify the activation requirement: dynamic LPA update, LLA refresh, STC recycle, subsystem restart or IPL. Then I verify the new level is actually active.
I avoid “fixing” SMP/E by manually copying elements into target libraries unless the documented recovery process specifically calls for it. Manual copies create a split between the code on disk and the CSI record of truth.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How I use SMF as the system’s evidence stream: record selection, MAN versus log-stream recording, dumping/offload, common record families and the checks I make when records go missing.
Almost everything important on z/OS leaves an SMF record somewhere: jobs and steps, dataset activity, security decisions, performance data, software usage and subsystem accounting. I think of SMF as the evidence stream that lets me reconstruct what happened after the console has moved on.
That is why an SMF failure is more serious than “reporting will be late.” Capacity, chargeback, SCRT, security audit and incident analysis may all depend on those records. If recording stops during a problem window, the system may recover but the explanation can be gone.
SMFPRMxx controls the recording environment: which record types/subtypes are collected, subsystem-specific options, exits and the recording model. A PARMLIB edit is not enough—I verify the active configuration after a SET SMF=xx or other approved activation.
Before enabling a high-volume type I estimate the effect on recording I/O, storage, offload and downstream consumers. “Turn on everything” is not a safe diagnostic policy on a busy production system.
D SMF D SMF,O SET SMF=xx
In the traditional model, SMF writes to a set of MAN data sets. One is active while alternates are available. When a data set fills, SMF switches and the full data set must be dumped/cleared so it can return to service. The operational risk is obvious: if the dump process fails long enough, every usable target can eventually become unavailable.
IFASMFDP is the dump/extract program for SMF data-set input.
//DUMP EXEC PGM=IFASMFDP //INDD DD DISP=SHR,DSN=YOURHLQ.SMF.INPUT //OUTDD DD DSN=YOURHLQ.SMF.EXTRACT, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(50,10),RLSE) //SYSPRINT DD SYSOUT=* //SYSIN DD * INDD(INDD,OPTIONS(DUMP)) OUTDD(OUTDD,TYPE(0:255)) /*
A healthy MAN-data-set setup should not depend on somebody noticing that SYS1.MANx is full and manually submitting a dump job. When the active recording data set fills, SMF switches to an empty alternate automatically. The important part is making sure the data set that just became full is dumped and returned to the empty pool before SMF needs it again.
The standard exit point for that hand-off is IEFU29. SMF invokes it when a recording data set fills and also when recording is switched with SWITCH SMF. The exit does not magically archive the data by itself; an installation can use it to issue a WTO or, more usefully, submit the site IFASMFDP dump job through an internal reader. IBM explicitly recommends using IEFU29 to drive the dump process rather than making the operator the scheduler.
SUBSYS(STC,
EXITS(IEFU29,IEFU83,IEFU84,IEFACTRT))
IEFU29 is an STC-subsystem exit because the SMF writer runs under the master subsystem. If the installation does not define a SUBSYS(STC,...) statement, IEFU29 can instead be enabled on the SYS statement. Where the dynamic exits facility is used, the routine also has to be associated correctly through PROGxx/SETPROG; defining a routine in PROGxx alone does not make SMF call an exit that SMFPRMxx has disabled.
On a real system I also check whether an SMF management product owns this path. A vendor exit or automation product may already be intercepting the switch and performing the dump/accumulation work. Replacing that with the IBM sample path without understanding the existing chain can break the site's SMF pipeline.
The failure mode I watch for: switching is not the same as offload. The first MAN data set can fill and SMF can switch successfully, but if the dump job keeps failing, the pool of empty alternates gets smaller until recording has nowhere left to go.
SMF can also record through System Logger log streams. In that design, Logger policy, log-stream connectivity, staging/offload and Logger storage become part of SMF availability. IFASMFDL is used to dump SMF log-stream data.
When log-stream SMF fails I do not troubleshoot it as a MAN-data-set switch problem. I move down into Logger: log stream, connectors, CF/DASD staging and offload path.
The corresponding archive hook for log-stream recording is IEFU29L. It is invoked by SWITCH SMF; a site can use that hand-off to run IFASMFDL and archive log-stream data. I keep the two models separate in my head: IEFU29 is tied to MAN data-set switching/full conditions, while IEFU29L is the log-stream switch/archive path.
I always verify subtypes. Modern consumers frequently need a particular subtype, not just “type 30” or “type 80.”
SMF itself is the collection framework, not the final reporting tool. RMF writes/reads performance records, SCRT consumes software/capacity-related data, and products such as MXG/SAS or vendor analytics parse other record families. This is why downstream processing can fail even when SMF recording itself is healthy.
The distinction I make is simple: not selected, not recorded, not offloaded and not reported are four different failures.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
What actually happens to console messages after they scroll off the screen: the hardcopy message set, SYSLOG on JES spool, WRITELOG rotation, external-writer offload, OPERLOG and the failure modes I check when the history I need is not there.
During an incident I can usually recover from a missed screen refresh; I cannot recover a message that was never retained. The console log is where I go back to establish sequence: what failed first, what command was issued, which reply was given, whether a subsystem retried, and what changed immediately before recovery.
The piece that confused me when I first looked at this area is that “console”, “hardcopy”, “SYSLOG” and “OPERLOG” are related but not interchangeable. The console is where messages are presented. The hardcopy message set is the subset of console traffic z/OS has selected for durable logging. SYSLOG and OPERLOG are two different media that can receive that hardcopy set.
CONSOLxx controls the initial console and hardcopy environment. The HARDCOPY statement determines which command responses and routing codes belong in the hardcopy message set and which hardcopy medium is active. After IPL, operators can change hardcopy characteristics dynamically with VARY commands.
D CONSOLES,HARDCOPY D CONSOLES
The first display tells me whether the active hardcopy medium is SYSLOG, OPERLOG or both, along with the command/routing criteria currently being captured. If a tool expects SYSLOG and the system is configured for OPERLOG only, that distinction matters immediately.
V SYSLOG,HARDCPY
I treat changes to hardcopy selection carefully. Narrowing the set can remove evidence; broadening it can materially increase message/log volume on a noisy system.
SYSLOG is not an ordinary cataloged sequential data set that keeps growing forever. It is a system-managed SYSOUT data set on the primary JES spool for that z/OS system. It can contain the hardcopy message set plus entries written through mechanisms such as WTL and the operator LOG command.
That per-system scope is useful when I am reconstructing exactly what one LPAR saw. It also means that in a sysplex I may need to inspect more than one SYSLOG unless OPERLOG is available.
SYSLOG already has a rotation mechanism. When the active system-log data set reaches its configured message limit, z/OS closes it, queues it to the configured SYSOUT class and obtains a new SYSLOG. In other words, the current log does not simply grow until it consumes all remaining spool; the old generations become queued JES output.
WRITELOG lets operations force that boundary earlier. It can schedule the current SYSLOG for output processing, and the command also has forms for changing the output class or closing/restarting the log. I normally use it when I want a clean cut around an incident window or when the site's automation deliberately spins the log on a schedule.
WRITELOG
Message IEE043I is useful evidence because it tells me that a SYSLOG data set was queued and shows the SYSOUT class. That class is the next place to look if old logs are backing up on spool.
The real spool risk: rotation can be working perfectly while the queued SYSLOG data sets are not being processed. If the output class is held, has no writer, or retention is wrong, old logs accumulate on JES spool even though a fresh SYSLOG keeps opening.
The classic MVS mechanism for moving selected SYSOUT to another device or sequential data set is the external writer. The IBM-supplied writer runs IASXWR00 in its own started-task address space and selects SYSOUT using criteria such as output class. That makes it usable for a dedicated SYSLOG class that I want written to DASD or tape instead of left on spool.
This is the shape of a DASD example. I would not copy it into production unchanged—the output class, allocation, DCB, retention and naming standard all belong to the site.
//SYSLOGX PROC //IEFPROC EXEC PGM=IASXWR00,REGION=512K,PARM='PL' //IEFRDER DD UNIT=SYSDA, // DSN=YOURHLQ.SYSLOG.HARDCOPY(+1), // DISP=(NEW,CATLG,DELETE), // SPACE=(CYL,(40,10),RLSE), // DCB=(RECFM=FBM,LRECL=133,BLKSIZE=0,BUFNO=2)
S SYSLOGX
In PARM='PL', P selects printer-type control-character handling and L is the eligible SYSOUT class in this example. The class must match the site's SYSLOG output class. More importantly, I prefer that class to be dedicated; otherwise an external writer selecting only by class can pick up unrelated SYSOUT along with the log.
Not every shop uses IASXWR00 for archival. Automation products, JES output management products, log collectors or retention tooling may own the process. The thing I verify is the end-to-end path: SYSLOG rotates → the closed log is queued → something processes that class → the archived log is actually retrievable.
| Area | SYSLOG | OPERLOG |
|---|---|---|
| Scope | One z/OS system | Console traffic from participating systems in the sysplex |
| Storage model | SYSOUT data set on JES spool | System Logger log stream |
| Operational concern | Rotation, SYSOUT class, writer/output retention and spool | Logger/log-stream connectivity, retention/offload and sysplex availability |
| When I reach for it | LPAR-specific command/message history and classic SDSF SYSLOG workflow | One chronological view across systems when I am following a sysplex-wide event |
IBM recommends OPERLOG when a permanent operations log across a sysplex is required, and SYSLOG can still be active alongside it. I do not assume that because OPERLOG exists every tool is reading it—some tooling specifically expects SYSLOG, so I check the configured hardcopy medium and the tool's input path.
D CONSOLES,HARDCOPY, routing/command-level criteria and whether SYSLOG/OPERLOG was active at the time.IEE043I and WRITELOG-related messages around the period.D CONSOLES,HARDCOPYShows active hardcopy medium and selection criteria.V SYSLOG,HARDCPYAssigns SYSLOG as a hardcopy medium for the current IPL.WRITELOGQueues the current SYSLOG for output processing and starts a new current log.$D OUTCLASS(x)JES2 view of the SYSOUT class receiving closed SYSLOG data sets.S XWTR... / S site-writerStarts the IBM external writer or the site's wrapper procedure when that is the archival method.I use the installed z/OS release documentation for command syntax and writer details because console/JES standards differ by site.
z/OS Internals
How WLM classifies work, assigns service goals and importance, measures Performance Index, and how I use RMF delay evidence to tell a policy problem from a capacity or application problem.
Every workload on a z/OS system is competing for finite CPU, storage and I/O. WLM’s job is not to make everything fast; it is to decide how the system should favor work so the most important business goals are met when resources are contested.
The useful mental model is: classify the work → assign it a service class and goal → measure how it is performing → let WLM/SRM adjust resource preference toward the defined goals. If the classification or goal is wrong, WLM can very efficiently optimize the wrong thing.
Service definition ├─ service policies ├─ workloads ├─ service classes / periods / goals / importance ├─ report classes ├─ resource groups └─ classification rules by subsystem type
Subsystem classification rules decide where work lands. JES batch, started tasks, TSO, CICS, IMS, Db2 and enclave-based workloads have different classification attributes. Before I tune a service class, I verify the affected work is actually in the class I think it is.
A bad rule can look exactly like “WLM is starving my job” because the job may have been placed in a lower-importance class or wrong period. That is a classification problem first, not a resource shortage.
A service class can contain periods so long-running work can move from an initial goal to a different goal after consuming a defined amount of service. Goals can be response-time oriented, execution-velocity oriented, discretionary or system-defined depending on workload type.
Importance matters when multiple service classes are missing goals and WLM must decide where scarce resources should go. I do not raise importance casually; giving one class more preference can reduce another class’s ability to meet its goal.
Performance Index (PI) is the simplest high-level signal of how a service class period is doing relative to its goal. Roughly, a PI around 1 means the goal is being met; above 1 means the work is missing it; below 1 means it is doing better than required. The exact calculation depends on the goal type.
PI tells me that a goal is being missed. It does not tell me why. That is where delay samples matter.
When a workload is slow I use RMF Monitor III or postprocessor data to identify the dominant delay. CPU delay, I/O delay, storage delay, enqueue delay and subsystem-specific waits point in completely different directions.
If the service class has poor PI but CPU is not the dominant delay, changing importance may simply move the symptom.
Modern transaction work may execute as an enclave across multiple address spaces. In those cases I follow the enclave/service class rather than assuming the front-end STC owns all the resource consumption.
Report classes give me additional reporting separation without necessarily changing service management. Resource groups can bound or protect resource use, so they are another place to check when work appears capped despite available system capacity.
D WLM D WLM,SYSTEMS D WLM,IRD D WLM,APPLENV=* D A,L D M=CPU
The displays confirm policy/system state. RMF is what I use to understand PI and delays over time.
A WLM policy change is shared-resource redistribution. I want a clear hypothesis and rollback before I activate one during a live performance incident.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How I choose and capture the right z/OS dump, why a dump request can still produce no dump, and how SVC dump, abend dumps, SYSMDUMP, SLIP, DAE and IPCS fit together.
A dump is a snapshot of storage and control information taken so the failing program or system path can be analyzed after the event. The important part is not “getting a dump” in the abstract; it is getting the right dump at the time the defect is present, with enough address spaces/storage included to answer the question.
I therefore choose the dump mechanism based on scope: one application step, one address space, a subsystem, or the whole system when normal z/OS dump services cannot be trusted.
//STEP2 EXEC PGM=A //SYSUDUMP DD SYSOUT=*
//STEP1 EXEC PGM=PROGRAM1 //SYSABEND DD DSN=YOURHLQ.SYSABEND, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(50,10))
//STEP EXEC PGM=PROGRAM1 //SYSMDUMP DD DSN=YOURHLQ.SYSMDUMP, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA, // SPACE=(CYL,(100,20))
The product/runtime can override or supplement these mechanisms. Language Environment, Fault Analyzer, Abend-AID and other tools may change what is produced, so I check the actual job log and product configuration instead of assuming a DD statement guarantees a specific artifact.
SVC dump is the workhorse for many z/OS and subsystem failures. A product can request it, an operator can request it, or a SLIP trap can be used to capture a dump when a precise event occurs.
SLIP is powerful because I can target an abend, module, address-space or other condition and define an action such as SVCD. It is also dangerous if the trap is too broad, so I build the narrowest trap possible and remove it after capture.
D SLIP D DUMP,OPTIONS
I think of the capture path as a chain:
Failure / operator request / SLIP
│
▼
dump request created
│
├─ dump mode / eligibility
├─ DAE duplicate suppression
├─ available dump data set / dynamic allocation
└─ product recovery logic
│
▼
dump written
If support says “there is no dump,” I check each layer. DAE may have suppressed a duplicate. CHNGDUMP may have disabled a dump type. The application may never have requested one. A SYS1.DUMPxx target may have been unavailable. These need different fixes.
DAE recognizes duplicate symptoms and can suppress repeated dumps. CHNGDUMP controls dump options/modes. SLIP creates event-driven traps/actions. I do not disable all three just to obtain one failure. The safest approach is the narrowest targeted change that captures the required event.
Once I have the dump, IPCS is where I establish what actually failed: dump title/time, failing ASID, system/abend context, PSW/registers, storage, control blocks and component-specific formatting.
IPCS SYSTRACE IPCS CTRACE IPCS VERBX MTRACE
The exact IPCS commands depend on the dump type and component. I preserve the original dump and work from a copy when the investigation is likely to be long or shared with support.
A dump without the failure context can become a very expensive binary file that nobody can reproduce.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals · Dump Services
How DAE identifies duplicate dump symptoms, what MATCH/UPDATE/SUPPRESS really mean, how ADYSETxx controls it, and how I obtain one fresh dump without wiping useful history.
Dump Analysis and Elimination protects the system from producing the same dump over and over for the same failure symptom. Without it, a looping defect could fill dump storage and create more damage than the original problem.
DAE does this by building a symptom string from identifying information about the failure, comparing that symptom with stored history, and then applying the active matching/update/suppression rules.
Failure / dump request
|
v
DAE builds symptom string
|
v
Compare with DAE history
/ \
No match Match
| |
Take dump Apply active suppression rulesMATCH tells DAE to compare symptoms with history. UPDATE lets DAE record/update symptom history. SUPPRESS controls whether a matching dump can be eliminated. Keeping these concepts separate matters when I temporarily want one new dump: I may want matching/history to remain active while removing suppression for the next occurrence.
DAE=START,RECORDS(400), SVCDUMP(MATCH,SUPPRESSALL,UPDATE,NOTIFY(3,30)), SYSMDUMP(MATCH,UPDATE)
ADYSETxx members live in PARMLIB and define the DAE operating options. I activate the intended member with SET DAE=xx and then verify the active state rather than assuming the edited member is in effect.
SET DAE=AA /* Example stop member */ DAE=STOP
Stopping DAE globally is a broad action. If my only objective is “capture one duplicate failure again,” I prefer a targeted method that keeps the rest of the protection intact.
DAE can use shared history so systems in a sysplex recognize the same failure consistently. That improves duplicate suppression across systems, but it also means a symptom captured on one LPAR can influence dump behaviour on another. I include the DAE data-set sharing model when I troubleshoot “why did this system suppress a dump?”
Shared DAE data set
|
+----+----+
| | |
MVSA MVSB MVSC
| | |
DAE DAE DAEThe DAE data set contains the symptom history. Clearing it can make future duplicates look new again, but that is intentionally broad—it removes useful history for unrelated failures too. I do not use “clear SYS1.DAE” as the normal way to obtain one repeat dump.
IPCS DAE panels or ADYDSP can be used to inspect the history.
IPCS 3.5 DAE /* or */ ADYDSP 'SYS1.DAE'
D DUMP,OPTIONS / CHNGDUMP state.I remember them this way: DAE decides whether a repeated symptom needs another dump; CHNGDUMP controls dump-service options; SLIP decides what event should trigger an action. They often appear in the same investigation but they are not interchangeable.
CHNGDUMP SET,SYSMDUMP,NODUMP CHNGDUMP SET,SYSMDUMP D DUMP,OPTIONS
The source guide was cross-checked against IBM z/OS documentation. Relevant IBM documentation topics include using DAE to suppress dumps, ADYSETxx statements, defining a DAE data set, IPCS Option 3.5 DAE, TAKEDUMP, DISPLAY DUMP/CHNGDUMP, and SYSZDAE serialization.
Always use documentation for the z/OS release installed on the target LPAR when executing a change.
z/OS Internals
How I choose between system trace, master trace, component trace, GTF and other tracing, collect only what is needed, and avoid turning a diagnostic trace into the next incident.
A dump gives me a snapshot of storage at a point in time. A trace gives me a sequence of events leading up to or occurring during the problem. I use tracing when the question is “what path did the system take?” rather than only “what did storage look like when it failed?”
Tracing can be extremely low overhead or very expensive depending on the component, options and volume. I therefore do not start broad traces first and filter later. I decide what event I need, how long I need it, and how I will stop/format it before enabling it.
System trace records selected low-level system events continuously in trace tables. It is valuable in dumps because it can show dispatching, interrupts, SVCs and other events immediately around a failure. IPCS SYSTRACE is a common way to format it from a dump.
IPCS SYSTRACE
Master trace captures console/message traffic and is useful when I need the message sequence around system activity. It is especially helpful when the operator log has rolled or I am working from a dump and need a time-ordered view of messages around the failure.
IPCS VERBX MTRACE
CTRACE is the mechanism many z/OS components use for detailed component-specific tracing. Each component defines its own options and formatting. Examples include XCF and BCPii-related tracing. I follow the component documentation because the correct PARM/options, writer and buffer size are component-specific.
D TRACE IPCS CTRACE
A vendor may ask for a particular CTRACE name/options and a defined collection window. I keep their exact request with the evidence package so the trace can be interpreted correctly.
Generalized Trace Facility can collect trace records from system components and applications that write GTF trace data. It is useful when the requested diagnostic source explicitly uses GTF. Buffering, event selection and external writer data sets determine both overhead and how much history survives.
IPCS GTFTRACE
Subsystems such as CICS, Db2, networking products and ISV software often have their own transaction or internal traces. I treat those as product diagnostics rather than assuming a system-wide trace will contain the needed detail. The owning product determines the trace classes, destination and formatter.
GETMAIN/FREEMAIN/STORAGE-related diagnostic tracing is specialized and can generate significant data. I only enable it when storage ownership/allocation behaviour is the actual question and the IBM/vendor procedure specifies the required scope.
The biggest tracing mistake is leaving a broad trace active because “support may need more data.” A diagnostic setting should always have an owner and a stop condition.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How I structure a z/OS disaster-recovery exercise: recovery objectives, replicated data, alternate hardware and sysplex dependencies, controlled bring-up, validation and the failback path.
I do not think of disaster recovery as “can we IPL the backup LPAR?” A useful DR test proves that the business service can be rebuilt from the alternate site with an understood data point, dependency order and operating procedure—and that we can later fail back without improvising.
The two numbers that drive the design are RPO (how much data loss is acceptable) and RTO (how long recovery can take). Storage replication, catalog recovery, database restart, network cutover and application validation all have to fit those objectives.
Before a DR exercise I want a dependency map covering:
If one of those layers is missing, an LPAR can IPL successfully and still be unusable.
Replication has to provide a recoverable consistency point, not merely copied volumes. Multi-volume databases, catalogs and log streams need the replication technology and recovery procedure to preserve whatever ordering/consistency the product requires.
I verify which volumes are replicated, their DR device mapping and what happens to in-flight data at the cut. “The storage team replicated it” is not enough evidence for application consistency.
The DR CPC/LPAR definitions must provide sufficient processors, central storage, channel paths, devices and network connectivity. HMC profiles, LOAD addresses and IODF/device mappings are checked before the event. Coupling Facility capacity and connectivity are equally important for a sysplex recovery.
The exact order is site-specific, but I bring services up from shared infrastructure toward consumers: system/core services, catalogs/SMS/security, sysplex/XCF/CF/Logger, UNIX/network, middleware, then applications.
I pause at each layer long enough to verify readiness. Starting everything at once makes it difficult to tell whether a later product failed because of its own configuration or because an earlier dependency never became healthy.
A DR site is not fully ready if it can run production but cannot capture a stand-alone dump during a severe failure. SADMP residence programs, output data sets, HMC profiles and console procedure should be validated at the alternate site too.
Failback is its own recovery event. I plan how data is resynchronized, which site becomes authoritative, how network routing is reversed, what outage is required, and how I prevent both sites from accepting conflicting updates.
After every exercise I want a defect list with owners and exact evidence: missing dataset, stale procedure, wrong port, insufficient CF capacity, certificate issue, manual step or timing problem. A DR test that ends with “successful” but does not update the runbook wastes much of the value.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
z/OS Internals
How I prepare and validate Stand-Alone Dump so it is usable when z/OS itself is not: release matching, residence program, output sizing, HMC profile, sysplex partitioning, COPYDUMP and re-arming.
Stand-Alone Dump is the fallback I need when normal z/OS dump services cannot be trusted because the system is hung or severely damaged. It is a small independent dump program loaded from the HMC/console path, and it writes real storage to pre-prepared dump output.
The important word is prepared. A SAD procedure cannot be invented after the system is already down. The residence program, output data sets, HMC load profile, console path and operator steps all have to be tested beforehand.
I generate the SADMP residence program for the z/OS release it is expected to dump. I do not carry an old residence program forward indefinitely just because the volume still IPLs. Release mismatch is exactly the sort of failure I do not want to discover during a real outage.
These are two separate objects. The residence program is what is IPLed to run SADMP. The output data set is where the storage image is written. Preparing one does not prepare the other.
I size SAD capacity for the largest target LPAR and the options actually used. Real storage can change over time, so a dump area sized years ago may no longer be adequate after an LPAR memory increase.
D M=STOR
The output must also remain available at the disaster/failure point: correct device type, volumes online/accessible to SADMP, no migration assumption and enough initialized capacity.
//SADDEF EXEC PGM=IKJEFT1B
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
EXEC 'SYS1.SBLSCLI0(AMDSADDD)' +
'DEFINE (SAD001,SAD002,SAD003,SAD004) +
(SYS1.SADMP) 3390 <TRACKS> Y LARGE'
/*
The exact AMDSADDD operands and capacity values must be calculated for the target release/configuration. I keep the job as a repeatable build artifact rather than relying on manual one-time allocation.
//OSG EXEC PGM=AMDSAOSG //STEPLIB DD DISP=SHR,DSN=SYS1.LINKLIB //SYSLIB DD DISP=SHR,DSN=SYS1.MACLIB // DD DISP=SHR,DSN=SYS1.MODGEN //DPLTEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSADPL) //IPLTEXT DD DISP=SHR,DSN=SYS1.NUCLEUS(AMDSAIPL)
Sites can use one-stage or two-stage generation procedures depending on the release and design. I keep the IBM-documented procedure for the active release with the DR/operations runbook.
The HMC profile identifies the SADMP residence device/load information. I verify that operators can select the profile, the residence volume remains IPLable and the expected console/input path works. A technically correct SAD program is useless if the night operator cannot locate or start it.
In a sysplex failure I also care about how the failed system is perceived by the remaining members. System Status Detection/partitioning behaviour can determine whether shared resources remain blocked. Before a planned SAD test I review the active sysplex/couple-data-set configuration and the installation’s failure-management procedure.
D XCF,COUPLE D XCF,COUPLE,TYPE=SYSPLEX F HZSPROC,DISPLAY,CHECK=(IBMXCF,XCF_SYSSTATDET_PARTITIONING)
The exact prompt sequence is release/configuration specific, but operationally I want the runbook to answer: which HMC profile, which console, which target system/storage selection, which output volumes and what confirms the dump completed successfully.
During a real outage I avoid experimenting with optional scope reduction unless the IBM/vendor procedure calls for it; the value of SAD is capturing enough system state to diagnose a catastrophic failure.
//COPY EXEC PGM=IKJEFT01 //SYSTSPRT DD SYSOUT=* //IN DD DISP=SHR,DSN=SYS1.SADMP, // UNIT=3390,VOL=SER=SAD001 //OUT DD DSN=YOURHLQ.SADMP.COPY, // DISP=(NEW,CATLG,DELETE),UNIT=SYSDA //SYSTSIN DD * COPYDUMP INDD(IN) OUTDD(OUT) /*
I copy the dump into normal z/OS-managed storage for IPCS/support handling, preserve the original until the copy is verified, and record which SAD volumes contain the source.
//SADCLR EXEC PGM=IKJEFT1B
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
EXEC 'SYS1.SBLSCLI0(AMDSADDD)' +
'CLEAR (SAD001,SAD002,SAD003,SAD004) +
(SYS1.SADMP) 3390'
/*
After the dump is safely copied, I clear/reinitialize according to the procedure so the facility is ready for the next emergency. “We successfully took a SAD last year” is not the same as being ready today.
Release-specific syntax and limits can change. Use the IBM documentation linked below for the z/OS and IBM Z level installed on the target system before making a configuration change.
Section 4
Browser-side utilities for recurring z/OS calculations and lookups: time-zone comparison, Julian dates, 3390 capacity, device geometry and zFS growth planning.
A compact timezone comparison grid. Drag rows to reorder them, use the arrow controls when dragging is inconvenient, and remove or add any zone. The color ramp follows each row's local hour so night, dawn, daytime and evening are visible before you read the numbers; DST changes come from browser time-zone data.
Leap-year aware: the converter uses Gregorian leap-year rules, including the century exception (for example, 2000 is a leap year; 2100 is not).
YYYYDDD
Reverse
3390 geometry
Planning
Raw 3390 geometry is not a DCB-aware record-capacity calculation; usable record capacity depends on the actual block/record layout.
Fixed models
Identify
ISHELL / df values
Headroom
Section 5
Practical tooling I build around z/OS work: the zDIAG diagnostic suite and utility roadmap first, followed by AI-assisted lifecycle and operations experiments.
A common ISPF and batch front end for focused z/OS diagnostic utilities. It standardizes job submission, evidence collection and report layout so CPU, storage, ENQ, ASID, XCF, zFS, JES2 and System Logger investigations produce a consistent interpreted report plus raw evidence.
Download links are preview placeholders for this publishing pass. The final hosted site can point the same controls at the real package, CRLF REXX sources, READMEs and sample reports.
The common ISPF front end and batch-launch framework for the diagnostic utilities. Users select a utility from one panel, provide any required parameter, enter or reuse a JOB card and submit the diagnostic as batch. The suite standardizes the resulting report, raw evidence and execution log DDs.
The hosted package will contain the zDIAG launcher/panels, common batch components and the currently published diagnostic utilities so the suite can be installed as one unit.
Diagnoses JES2 resource exhaustion and spool pressure. It is intended for shortages involving spool space and JES2 internal resources such as JQEs, JOEs/BERT-related capacity and heavy spool consumers, and for symptoms such as $HASP050 resource-shortage messages. JOBDIAG is the resource/capacity utility; it is not the general JES2 subsystem-health utility.
SYSPROC or SYSEXEC library.TSO JOBDIAG
TSO JOBDIAG HELP opens the built-in README-style help. TSO JOBDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Samples CPU-related indicators and summarizes system and address-space activity to distinguish sustained CPU pressure from short spikes or waits.
SYSPROC or SYSEXEC library.TSO CPUDIAG
TSO CPUDIAG HELP opens the built-in README-style help. TSO CPUDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Collects real/auxiliary and virtual-storage indicators, including the SDSF VMAP view where available, and flags likely storage-pressure conditions.
SYSPROC or SYSEXEC library.TSO STORDIAG
TSO STORDIAG HELP opens the built-in README-style help. TSO STORDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Collects GRS contention and dependency information, identifies holders/requesters and presents the wait chain with suggested diagnostic commands.
SYSPROC or SYSEXEC library.TSO ENQDIAG
TSO ENQDIAG HELP opens the built-in README-style help. TSO ENQDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Summarizes FREEASID/MAXASID and active-address-space indicators to help distinguish normal concurrency from an ASID shortage or leak pattern.
SYSPROC or SYSEXEC library.TSO ASIDDIAG
TSO ASIDDIAG HELP opens the built-in README-style help. TSO ASIDDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Takes a named long-running job and collects SDSF/job-state evidence to distinguish active processing, waiting, contention and other likely delay causes.
SYSPROC or SYSEXEC library.TSO LONGDIAG jobname
TSO LONGDIAG HELP opens the built-in README-style help. TSO LONGDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Analyzes a zFS by name or path, checks fullness/growth constraints and surfaces relevant zFS commands and likely resolution paths.
SYSPROC or SYSEXEC library.TSO ZFSDIAG zfs-name-or-path
TSO ZFSDIAG HELP opens the built-in README-style help. TSO ZFSDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Collects XCF system, group, path and structure information and turns the raw displays into a sysplex-health report.
SYSPROC or SYSEXEC library.TSO XCFDIAG
TSO XCFDIAG HELP opens the built-in README-style help. TSO XCFDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Checks JES2 subsystem and internal health: member state, checkpoint/MAS coordination, PCE and internal-processing delays, JES2 address-space symptoms and subsystem-level anomalies. JES2DIAG is the subsystem-health utility; JES2 resource and spool-shortage triage belongs to JOBDIAG.
SYSPROC or SYSEXEC library.TSO JES2DIAG
TSO JES2DIAG HELP opens the built-in README-style help. TSO JES2DIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Reports log-stream type, CF/DASD configuration, offload/staging state and common directory/offload/allocation shortage indicators.
SYSPROC or SYSEXEC library.TSO LOGRDIAG
TSO LOGRDIAG HELP opens the built-in README-style help. TSO LOGRDIAG SAMPLE produces the synthetic sample report used to show expected output and interpretation.
Started-task hang/unresponsive diagnostic utility being developed as a cross-layer check of task state, VTAM/network clues, locks/waits and available log evidence, with optional Runtime Diagnostics use when the product exists.
Pre/post-IPL assurance utility planned to capture the active system baseline before an IPL, take a second snapshot after restart and highlight configuration/service differences that need a system programmer to review.
PARMLIB/PROCLIB inventory, APF/LINKLIST/LPA state, critical STCs, XCF/Logger/OMVS/TCPIP/SMF checks and pre/post comparison.
Routine health-check utility planned to turn common daily system checks into one concise report rather than a sequence of manual SDSF and DISPLAY commands.
CPU/capacity, spool/JES2 resources, CSA/ECSA indicators, ASIDs, WTORs, IBM Health Checker exceptions, OMVS mounts and offload/service health.
Stand-alone dump readiness checker planned to validate whether the LPAR has a usable SADMP path before the day a standalone dump is actually needed.
SADMP configuration, eligible dump volumes, device/volume checks, page/SYSRES conflicts, protection rules and readiness exceptions.
An evidence-controlled planning agent for z/OS product lifecycle work. It turns vendor installation or upgrade documentation into concise implementation guidance, preserves source references, separates documented facts from site-specific values, and avoids inventing missing identifiers or configuration.
An AI-assisted z/OS operations concept intended to combine trusted diagnostic evidence and site knowledge so a system programmer can investigate current-state and incident questions without treating generated text as system truth.
The intended workflow is evidence-first: a system programmer can provide SYSLOG/OPERLOG extracts, JES job logs, SDSF or RMF snapshots, DISPLAY-command output, incident timelines and product documentation. zAssistant then correlates those inputs, highlights likely relationships and produces an RCA hypothesis with the evidence that supports it, the gaps that still need checking and the next diagnostic actions to take.
It is meant to assist the system programmer's reasoning, not replace it: conclusions stay traceable to the supplied evidence and uncertain findings remain explicitly marked as such.