SARATH.KB
SARATH.KB(HOME)

z/OS · Systems Engineering · Knowledge Base

z/OS systems engineering, documented from the way the work is actually done.

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.

20Diagnostic Runbooks
5Lifecycle Workflows
197JCL Examples
19z/OS Articles

Knowledge map

What this site is meant to demonstrate

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

Diagnostics & Operations

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

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.
Incident runbookSeverityStatus
Long-Running Batch Job / Suspected HangMEDLIVE

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.

What you are seeing

  • Elapsed time has crossed its normal baseline and downstream work is waiting.
  • SDSF shows the job ACTIVE, but the current step has not obviously progressed.
  • The application team may report “hung” even though the address space is still consuming some CPU or I/O.

First 10–15 minutes

  1. Establish the baseline. Record jobname, job ID, current step/program, start time, normal elapsed time for this step, input volume and whether the same job ran normally on the previous cycle.
  2. Take two snapshots. Compare CPU time, EXCP/I/O counters, elapsed time and step state several minutes apart. A single SDSF screen is not enough to distinguish a wait from useful work.
  3. Check the system around the job. Look for ENQ contention, WLM delay, device problems, outstanding WTORs and subsystem-specific waits before assuming an application loop.

Commands and evidence to collect

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

How to interpret the evidence

  • CPU and EXCP continue to increase: the job is doing work. Compare the rate with a known-good run and input volume before treating it as a defect.
  • CPU is flat and an ENQ wait exists: investigate the holder. The requester is usually not the component that must be fixed.
  • CPU is flat, no ENQ, high I/O response time: investigate the device, storage path, dataset placement or subsystem providing the I/O.
  • CPU is available but the service class shows significant CPU delay: examine WLM classification, importance, goal performance and LPAR capacity/capping.
  • Waiting for an operator reply: resolve the WTOR only after confirming the expected response with the owning procedure or product documentation.

Typical root causes

  • Legitimate high-volume processing or changed input distribution.
  • Dataset or GDG serialization.
  • Slow DASD/tape/network I/O.
  • WLM/LPAR CPU constraint.
  • Application loop or runaway sort/utility step.
  • A subsystem or STC the job depends on is degraded.

Recovery and follow-up

  1. If the job is progressing, avoid unnecessary cancellation; document why runtime is longer and monitor the trend.
  2. If blocked, resolve the underlying holder/resource first. Canceling requesters only hides the contention.
  3. If a loop is strongly suspected, capture the diagnostics the application/vendor needs before canceling: job log, CPU trend, dump/SLIP if required, and the failing step/input context.
  4. After recovery, compare the next run against the baseline and capture the root cause in the knowledge base.
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.

Deeper diagnostic path

  • Establish whether the step is consuming CPU or simply elapsed time. In SDSF/RMF compare CPU deltas across several samples rather than using one snapshot; a job whose elapsed time rises while CPU is flat is usually waiting, not looping.
  • Identify the exact executing step/program and its major data sets. Check SYSLOG/JESMSGLG/JESYSMSG for allocation waits, tape mounts, WTORs, subsystem messages and retries that can leave the address space active but make no business progress.
  • Check serialization with D GRS,C and, when a resource is identified, D GRS,RES=(qname,rname) and D GRS,ANALYZE,DEPENDENCY. Resolve the holder/root wait rather than repeatedly cancelling requesters.
  • Check I/O and service delay in RMF Monitor III. High I/O delay points toward a device/storage path, high CPU delay toward capacity/WLM, enqueue delay toward serialization, and low activity with an outstanding reply toward an operator/application wait.
  • Compare against a known-good execution of the same job, step, input volume and schedule. A job can be healthy but legitimately longer because input volume or downstream response time changed.

What confirms the diagnosis

  • A stable wait reason across repeated samples, a clear GRS holder chain, persistent device delay, or an outstanding message provides stronger evidence than elapsed time alone.
  • For a suspected loop, repeated CPU samples should show continuing TCB/SRB consumption with little corresponding I/O or step progress. Capture a dump before cancellation when the owning team needs code-level diagnosis.

Escalation / evidence package

  • Preserve jobname/jobid, step/program, start time, expected runtime, CPU/elapsed samples, service class, key data sets, GRS output, relevant SYSLOG/JES messages and RMF delay evidence.
  • If cancellation is considered, confirm restartability, data integrity and checkpoint/recovery behavior first. Use CANCEL/DUMP or an approved dump method when diagnostic evidence would otherwise be lost.
High CPU / Suspected Program Loop or Runaway Address SpaceHIGHLIVE

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.

What you are seeing

  • LPAR CPU is persistently high or capped and response time is degrading.
  • One job/STC dominates SDSF/RMF CPU columns.
  • A batch step accumulates CPU nearly as fast as wall clock with little apparent business progress.

First 10–15 minutes

  1. Identify whether the problem is LPAR-wide or address-space specific. If many workloads are elevated, investigate capacity, WLM and system activity before blaming the top consumer.
  2. Take multiple CPU samples. Confirm TCB versus SRB contribution, current step, dispatching priority/service class and whether work is completing.
  3. Check for recent changes: new release, maintenance, unusual workload volume, tracing, runaway logging or a product recovery loop.

Commands and evidence to collect

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

How to interpret the evidence

  • High TCB in one address space: likely application/product code, compression, sort, crypto or a loop. Correlate with step/module and workload volume.
  • High SRB: can indicate I/O, communications, exits, cross-memory or system component activity rather than the user program itself.
  • Many workloads show CPU delay: the top consumer may be legitimate; capacity or WLM policy is the broader problem.
  • CPU high but transaction/job throughput remains healthy: may be a busy system, not an incident. Compare to normal peak behavior.

Typical root causes

  • Program loop or retry loop.
  • Unexpected workload/input spike.
  • Tracing or diagnostic options left enabled.
  • Subsystem internal processing/recovery.
  • LPAR capacity limit/capping or insufficient general processors.
  • WLM classification causing important work to compete poorly.

Recovery and follow-up

  1. Preserve evidence before recycling or canceling a suspect address space if root cause analysis is required.
  2. If a product provides a safe MODIFY command or trace to identify the busy thread/task, use that before a hard cancel.
  3. If the issue is capacity rather than a defect, address WLM/LPAR entitlement and workload placement instead of repeatedly recycling work.
  4. Verify CPU returns to baseline and no backlog remains after recovery.
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.

Deeper diagnostic path

  • Confirm that the LPAR is actually CPU constrained. A high percentage for one address space does not by itself prove system saturation; correlate SDSF/RMF address-space CPU with LPAR logical/physical processor utilization, CPU delay and capping/weight information.
  • Sample the suspected address space repeatedly. A loop signature is sustained CPU growth with little I/O, little transaction/batch progress and the same program context. A legitimate CPU-heavy workload usually advances work and often correlates with input volume.
  • Separate TCB from SRB activity where possible. Heavy SRB can indicate subsystem, I/O-driver, cross-memory or system-service work rather than application instructions alone.
  • Check WLM service class, performance index and dominant delay. If the service class is missing goal because of CPU delay, determine whether the system is capped or physically constrained before changing policy.
  • For code-level analysis, capture an SVC dump or application-appropriate dump while the problem is occurring. IPCS, vendor diagnostics, or repeated program-counter samples are substantially stronger evidence than a post-cancel job log.

What confirms the diagnosis

  • Sustained CPU delta plus stable failing/program location across diagnostic samples strongly supports a loop or runaway path.
  • If CPU delay is high across many workloads and no single offender dominates, the incident is more likely capacity/capping/LPAR contention than one looping program.

Escalation / evidence package

  • Provide RMF interval/Monitor III evidence, top CPU consumers, service class and PI, LPAR cap/weight state, job step/program, recent changes and dump/trace identifiers.
  • Do not modify WLM policy or cap settings as a first reaction unless capacity evidence supports it; those changes redistribute shared resources and can move the outage elsewhere.
ENQ / GRS Contention Backing Up WorkHIGHLIVE

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.

What you are seeing

  • Jobs remain active with little CPU while a queue builds behind a common dataset/resource.
  • Batch SLA failures appear intermittently when normally separate workloads overlap.
  • Messages or product panels indicate resource busy/serialization waits.

First 10–15 minutes

  1. Run the GRS contention displays and capture QNAME, RNAME, holder and waiter.
  2. Build the dependency chain. A holder can itself be waiting on a second resource, so stopping at the first ENQ gives an incomplete diagnosis.
  3. Decide whether the resource is global/system scope and whether the same contention is visible on other sysplex members.

Commands and evidence to collect

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

How to interpret the evidence

  • One long-lived holder with many waiters: diagnose the holder. It may be hung on I/O, a WTOR or another ENQ while retaining the first resource.
  • Many short holders: often legitimate serialization exposed by excessive concurrency; the fix may be scheduling or data design rather than a failed job.
  • Same QNAME/RNAME repeatedly appears across days: treat it as a recurring design/capacity problem, not isolated incidents.

Typical root causes

  • Exclusive SYSDSN allocation.
  • GDG/catalog/control dataset contention.
  • Product internal ENQ held during a long operation.
  • Cross-system GRS contention.
  • Application or utility holding a resource while blocked elsewhere.

Recovery and follow-up

  1. Resolve the holder’s underlying wait or, with owner approval, terminate the holder in a controlled manner.
  2. Avoid canceling every waiter; the queue will usually reform while the holder remains.
  3. For recurring contention, redesign scheduling, split shared resources or change the access pattern.
  4. Record QNAME/RNAME, holder, waiter count and duration for future trend analysis.
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.

Deeper diagnostic path

  • Start with D GRS,C to identify contended resources. Record QNAME, RNAME, scope, holder and requester information; the resource name often tells you whether the contention is a data set, catalog, subsystem or application serialization issue.
  • Use D GRS,RES=(qname,rname) for the specific resource and D GRS,ANALYZE,DEPENDENCY to expose multi-resource wait chains. A requester can appear to be the problem while the true root is a holder waiting on a second resource.
  • Inspect the holder address space: CPU, I/O, messages, WTORs and its own ENQ dependencies. Long-held ENQs are frequently secondary symptoms of a hung holder.
  • Distinguish an abnormal long hold from a valid high-frequency serialization point. Many short holders against the same GDG/catalog/control file can require scheduling or design changes rather than cancellation.
  • In a sysplex, verify the scope and GRS topology before treating the issue as local. Cross-system ownership can make the holder reside on another LPAR.

What confirms the diagnosis

  • A dependency chain that terminates at a single long-lived holder is actionable evidence; simply seeing many jobs waiting is not enough.
  • If the holder changes rapidly but the resource remains continuously contended, the bottleneck is likely workload concurrency/design rather than one failed address space.

Escalation / evidence package

  • Capture D GRS,C, resource-specific display, dependency analysis, holder/requester jobnames and systems, elapsed hold/wait times, affected SLA and recent scheduling/application changes.
  • Never force/cancel a holder solely to clear the queue without understanding what the ENQ protects. It may be serializing catalog or data-integrity work.
ASID Shortage / Address-Space Creation FailuresHIGHLIVE

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.

What you are seeing

  • New work intermittently fails to start while existing address spaces continue running.
  • TSO logons or STCs fail during peak periods.
  • ASID consumption trends upward and does not fall as expected after workload completion.

First 10–15 minutes

  1. Capture the current active address-space population and compare with the configured limit.
  2. Determine whether growth tracks normal workload peaks or is monotonic across hours/days.
  3. Identify address spaces that repeatedly create/terminate subtasks or address spaces and correlate with recent product changes.

Commands and evidence to collect

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

How to interpret the evidence

  • Usage rises with workload and later drops: likely capacity sizing.
  • Usage rises steadily with no release pattern: suspect an address-space/subtask leak or product defect.
  • Issue appears only on one LPAR: compare IEASYS/MAXUSER and workload placement with peer systems.

Typical root causes

  • MAXUSER too low for current concurrency.
  • A product or workload leaking reusable address-space resources.
  • Unusual surge of initiators, STCs or TSO users.
  • Post-change behavior creating more address spaces than before.

Recovery and follow-up

  1. Recycle the leaking component only if the impact/risk is understood and evidence has been captured.
  2. For genuine capacity, plan the supported MAXUSER/configuration change according to your z/OS level and site standards.
  3. Verify the trend after corrective action; a temporary fall after recycle does not prove the defect is fixed.
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.

Deeper diagnostic path

  • Verify the actual symptom/messages and trend address-space usage rather than relying on a single count. Determine whether failures affect batch initiators, started tasks, TSO logons or all new address spaces.
  • Compare active address-space counts across workload peaks and after work completes. Capacity pressure should recede; a leak/reuse problem tends to ratchet upward or leaves abnormal terminated/reusable-ASID behavior.
  • Review the active IEASYSxx/MAXUSER context from IPL information and PARMLIB. Treat a MAXUSER increase as a capacity/configuration change, not the automatic fix for unexplained growth.
  • Identify products or automation creating unusually many address spaces or repeated short-lived tasks. Correlate the onset with software, scheduling or configuration changes.
  • Check adjacent resource pressure. A system that cannot start new work can also be suffering storage or subsystem limits, so confirm that messages specifically indicate ASID-related exhaustion.

What confirms the diagnosis

  • A repeatable peak that returns to baseline suggests sizing; monotonic growth or failure to recover after workload ends suggests abnormal address-space lifecycle behavior.
  • The relevant system messages and ASID trend are the primary proof; do not infer MAXUSER exhaustion from “job would not start” alone.

Escalation / evidence package

  • Collect active counts over time, IPL/PARMLIB context, affected start/logon failures, top address-space creators, recent changes and ASIDDIAG/history if available.
  • If changing MAXUSER, validate common-storage and installation limits for the target z/OS level and obtain a planned change window where required.
Real Storage Pressure / Paging / Auxiliary Storage RiskHIGHLIVE

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.

What you are seeing

  • System response time degrades while CPU may not be saturated.
  • Paging rate increases sharply or remains elevated.
  • Auxiliary storage usage grows and messages indicate shortage risk.
  • Large address spaces expand working sets or many workloads become resident simultaneously.

First 10–15 minutes

  1. Check real-storage availability, paging rate and auxiliary-storage status together; one metric alone is misleading.
  2. Identify top real/virtual storage consumers and recent growth.
  3. Check whether the pressure is local to one LPAR or coincides with a workload shift, restart storm or changed region sizes.

Commands and evidence to collect

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

How to interpret the evidence

  • Low available real storage + sustained paging: genuine pressure; identify consumers and workload cause.
  • Paging spike only during startup: may be transient after IPL/restart; verify it settles.
  • Auxiliary storage filling: more urgent than paging alone because exhaustion can prevent normal system operation.
  • One address space grows continuously: suspect storage leak or changed cache/buffer configuration.

Typical root causes

  • Workload concurrency increase.
  • Oversized caches/buffers/regions.
  • Storage leak.
  • LPAR memory reduction or changed partition configuration.
  • Restart storm causing many large address spaces to initialize simultaneously.

Recovery and follow-up

  1. Reduce or sequence non-critical workload only under established operational control.
  2. If a single product is leaking, collect storage diagnostics and recycle according to product procedure.
  3. Address structural capacity/configuration issues rather than treating paging messages as isolated events.
  4. Verify both paging rate and auxiliary usage return to normal.
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.

Deeper diagnostic path

  • Separate central-storage pressure from auxiliary-storage risk and from private/common virtual-storage exhaustion. D M=STOR describes configured/online storage; RMF is needed to understand frame demand, paging and delay.
  • Use D ASM to verify page data sets and auxiliary-storage configuration. Look for paging-related messages, page-data-set fullness or path/device issues that can turn memory pressure into a system-wide stall.
  • In RMF, trend available frames, paging rates, page-ins/page-outs, UIC/working-set indicators and storage delay. One short spike is different from sustained paging with goal misses.
  • Identify consumers with abnormal real/virtual storage growth, large memory objects or changed workload. Correlate with software changes and start times rather than blaming total workload first.
  • Check whether the LPAR definition itself changed: assigned storage, dynamic storage reconfiguration, additional workloads or virtualization changes can alter headroom without any z/OS parameter change.

What confirms the diagnosis

  • Sustained paging/storage delay plus low frame headroom and an identifiable demand increase supports real-storage pressure.
  • High virtual allocation alone is not proof: pageable virtual storage can be sparse, and 64-bit address-space size is not equivalent to resident real storage.

Escalation / evidence package

  • Provide RMF storage/paging intervals, D M=STOR, D ASM, page-data-set state, top storage consumers, LPAR storage assignment and change timeline.
  • Avoid reacting by blindly adding page data sets or changing storage thresholds unless you know whether the limiting resource is real frames, auxiliary space, common virtual storage or a single address-space limit.
CSA / ECSA / SQA / ESQA Common-Storage ShortageHIGHLIVE

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.

What you are seeing

  • Messages indicate CSA/ECSA/SQA/ESQA shortage or expansion pressure.
  • Unrelated address spaces begin failing storage requests.
  • Common-storage usage trends upward across time and does not recover after normal workload completion.

First 10–15 minutes

  1. Identify which common area is constrained and whether growth is above/below the 16 MB line or in extended common.
  2. Compare current usage with a prior healthy baseline or post-IPL level.
  3. Identify recent exits, subsystem maintenance, started tasks or products that allocate common storage.

Commands and evidence to collect

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

How to interpret the evidence

  • Steady common-storage growth: strong leak signature; determine ownership rather than simply raising thresholds.
  • SQA expands into CSA: can increase pressure on other common storage and may signal unusual system component demand.
  • Usage drops after recycling one product: useful evidence, but collect enough data to pursue permanent correction.

Typical root causes

  • Subsystem/product common-storage leak.
  • Exit or authorized code allocating and not freeing storage.
  • Changed buffer/control-block sizing.
  • Unusual volume of system resources or address spaces.

Recovery and follow-up

  1. Use vendor/IBM procedures to identify storage ownership before disruptive action.
  2. Recycle a suspected component only when supported and when freeing its allocations is expected.
  3. If common storage cannot be recovered and system risk is increasing, plan controlled workload move/LPAR restart rather than waiting for total exhaustion.
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.

Deeper diagnostic path

  • Treat CSA/ECSA/SQA/ESQA as shared system resources: a leak in one component can eventually affect unrelated address spaces. Confirm the shortage message and which common area is under pressure.
  • Use RMF/common-storage reports, IPCS VERBX VSMDATA or installation diagnostic tools to identify owners/keys/subpools consuming the affected area. Do not rely on generic 64-bit virtual-storage displays for CSA/SQA sizing.
  • Trend usage against IPL baseline and recent product starts/recycles. A steady monotonic increase is a leak signature; stable high usage may instead be sizing or a deliberate configuration change.
  • Review IEASYSxx/CSA/SQA-related configuration only after identifying why usage changed. Increasing a common area can mask a leak and reduce private-area addressability on affected architectures.
  • If the system is nearing critical exhaustion, preserve diagnostics before recycling the suspected component whenever practical; post-recycle evidence is often lost.

What confirms the diagnosis

  • A specific subpool/key/owner growing over successive samples is far stronger evidence than a single “percent used” reading.
  • If common-storage usage drops back after one STC recycle and then grows again at a similar rate, isolate that component/vendor path.

Escalation / evidence package

  • Collect shortage messages, common-area sizes/free values, owner/subpool detail, growth timeline, suspected STCs/modules, recent maintenance and dump/IPCS evidence.
  • When escalation is urgent, state remaining headroom and growth rate so the vendor/system team can judge how long the system can safely remain up.
zFS Full, Object/Space Pressure or Mount FailureHIGHLIVE

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.

What you are seeing

  • Applications receive ENOSPC/no-space errors or cannot create/update files.
  • A mount point disappears or applications start using the underlying directory unexpectedly.
  • zFS usage reaches warning thresholds or growth accelerates.

First 10–15 minutes

  1. Confirm the actual mounted filesystem for the path and its percent used; do not assume the path is on the expected aggregate.
  2. Check whether the problem is space, objects/inodes, mount state, read-only state or inability to extend the VSAM linear dataset.
  3. Find the largest directories/files and recently changed logs/work files.

Commands and evidence to collect

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

How to interpret the evidence

  • Filesystem full but large stale logs exist: clean only under application retention rules.
  • Aggregate cannot extend: examine underlying dataset allocation, storage class, volume space and maximum size.
  • Expected mount missing: stop writing to the fallback directory before remounting, otherwise data can become hidden beneath the mount.
  • Rapid recurring growth: treat the writer/retention process as root cause, not repeated manual cleanup.

Typical root causes

  • Unbounded application logs/dumps.
  • Housekeeping job failed.
  • Aggregate sized too small.
  • Underlying DASD/storage-group space shortage.
  • Mount processing failure after IPL.
  • Application writes to an unintended path because a mount was missing.

Recovery and follow-up

  1. Preserve/rotate files according to application policy; avoid deleting active logs blindly.
  2. Extend or replace the filesystem using your SMS/zFS standard if capacity is genuinely insufficient.
  3. If remounting, first understand what was written into the mount-point directory while it was absent.
  4. Confirm application health and free-space trend after recovery.
Operational caution: Deleting files is not automatically a fix. Determine who owns them, whether they are open, whether retention applies, and why growth occurred.

Deeper diagnostic path

  • First map the failing UNIX path to its mounted filesystem/aggregate. A full parent mount and a full target aggregate require different fixes; verify with D OMVS,F and z/OS UNIX filesystem commands.
  • Check total/free blocks, growth characteristics, aggregate size limits, secondary allocation and whether the dataset/aggregate can physically extend. ENOSPC can result from capacity, allocation constraints or storage-group/volume limits.
  • Identify the largest directories/files and recent growth sources. Logs, dumps, temporary files and product caches are common causes; deleting random files without ownership validation can damage middleware.
  • For mount failures, inspect BPXPRMxx/mount statements, dataset availability/cataloging, security, aggregate status and SYSLOG messages. Do not treat every zFS problem as “increase space.”
  • After cleanup or extension, verify that applications resume writes and that the filesystem is not immediately refilling. Set monitoring based on growth rate, not only a static percentage.

What confirms the diagnosis

  • Filesystem block counts plus a clear growth/extension constraint confirm a capacity incident. Mount-specific error messages confirm configuration/access failures.
  • If plenty of aggregate space exists, investigate directory/file limits, underlying dataset allocation, read-only state, security or application-specific errors instead.

Escalation / evidence package

  • Capture path, filesystem/aggregate dataset, mount mode, used/free blocks, extent/volume information, largest consumers, related BPX/IOE messages and recent growth trend.
  • If storage must be added, state the target utilization/headroom required and validate SMS/storage-group capacity before changing the aggregate.
JES2 Spool / JQE / BERT Resource PressureHIGHLIVE

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.

What you are seeing

  • Spool utilization rises toward critical thresholds.
  • Jobs cannot allocate/write SYSOUT or new work stops entering normal queues.
  • JES2 messages indicate shortage of spool, JQEs, BERTs or related resources.

First 10–15 minutes

  1. Determine whether the constraint is physical spool space or a JES2 logical resource.
  2. Identify jobs with unusually large SYSOUT/spool footprints and whether purge/output processing is keeping up.
  3. Check all spool volumes and checkpoint/MAS health, not just the LPAR where the alert surfaced.

Commands and evidence to collect

$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

How to interpret the evidence

  • One job owns extreme SYSOUT: likely runaway logging/loop; coordinate cancellation/purge.
  • Many held outputs accumulate: retention/output process may be the capacity issue.
  • Spool is balanced but JQE/BERT is exhausted: increasing DASD does not solve it; address the relevant JES2 resource/configuration.

Typical root causes

  • Runaway SYSOUT.
  • Long retention/held output backlog.
  • Under-sized JES2 resources for workload growth.
  • Output writer/process failure.
  • Spool volume loss or degraded access.

Recovery and follow-up

  1. Stop the growth source first, then purge only output that is safe to remove.
  2. Restore unavailable spool/output resources according to JES2 procedure.
  3. For recurring logical-resource exhaustion, size JES2 parameters based on observed peaks rather than emergency values.
Operational caution: Do not mass-purge held output simply to recover space without retention/operational approval. Spool can contain evidence and business-required reports.

Deeper diagnostic path

  • Use JES2 resource displays to determine which resource is actually constrained. Modern JES2 limit monitoring can expose SPOOL, JQE, JOE and BERT utilization; do not assume low free spool tracks are the only JES2 capacity failure.
  • Run $D LIMITS (and site-supported qualifiers such as LONG) to identify utilization and major consumers, plus $D SPOOL for spool-volume state. Review $HASP050/resource messages for the exact resource name.
  • Identify jobs generating excessive SYSOUT, held output, very large queue populations or unusual internal-resource consumption. A runaway print/logging job can consume shared JES2 resources while CPU remains normal.
  • Check spool volume availability and I/O health as well as logical resource limits. A volume/path problem can reduce usable spool capacity without a workload increase.
  • Separate immediate relief from permanent correction: purge only approved obsolete output, stop the producer of runaway SYSOUT, then review JES2 sizing/limits and retention policy.

What confirms the diagnosis

  • A named JES2 limit approaching/exceeding threshold plus identified consumers is conclusive. “Jobs are queued” alone can also be initiator, class, WLM or scheduling behavior.
  • If internal resources are healthy but JES2 processing is delayed, move to subsystem/PCE/checkpoint diagnostics rather than treating it as a spool-shortage incident.

Escalation / evidence package

  • Collect $D LIMITS, $D SPOOL, relevant $HASP messages, top consumers, spool volume state, queue counts and recent workload/retention changes.
  • Use JOBDIAG for JES2 resource/spool shortage diagnostics where installed; JES2DIAG is reserved for JES2 subsystem/internal health.
JES2 Long PCE Dispatch / Checkpoint or Internal Processing DelayHIGHLIVE

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.

What you are seeing

  • JES2 issues long PCE dispatch-duration alerts.
  • Job submission/output processing becomes sluggish while general LPAR CPU may appear normal.
  • The condition may be intermittent and tied to one processing function or checkpoint activity.

First 10–15 minutes

  1. Capture the exact HASP message text, PCE name/identifier, duration and time. Do not diagnose from the message number alone.
  2. Correlate with JES2 CPU, checkpoint status, spool I/O and workload changes at the same time.
  3. Check whether the event repeats on the same PCE and whether there are secondary JES2 messages before/after it.

Commands and evidence to collect

$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

How to interpret the evidence

  • High JES2 CPU during event: possible internal loop or very heavy processing; IBM may request traces/dump.
  • Low CPU with slow checkpoint/spool I/O: investigate device/path/storage delay.
  • Events correlate with extreme queue/output volume: workload/resource sizing may be the driver.
  • Repeated same PCE after maintenance/change: collect evidence for IBM/JES2 service review.

Typical root causes

  • Checkpoint I/O delay or contention.
  • Spool I/O issue.
  • Abnormally large queue/output processing.
  • JES2 defect or internal loop.
  • Exit or customization affecting a PCE path.

Recovery and follow-up

  1. Avoid restarting JES2 as the first response; capture the PCE identity and supporting evidence first.
  2. Resolve external I/O/checkpoint constraints if proven.
  3. If recurrence points to JES2 code, collect IBM-requested diagnostics and check maintenance/APAR level.
  4. After recovery verify job input, execution and output queues are draining normally.
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.

Deeper diagnostic path

  • A long PCE dispatch message is a subsystem-health symptom, not automatically CPU saturation. Correlate message timestamps with JES2 address-space CPU, system CPU delay, checkpoint activity, spool I/O and the specific PCE/function named by JES2 diagnostics.
  • Check JES2 member/MAS status and checkpoint health. Slow or contended checkpoint access can delay internal JES2 processing even when overall CPU is modest.
  • Review $HASP9203/$HASP-related messages around the event and determine whether the problem repeats for the same PCE. A recurring single PCE can point to an exit, device, resource or internal processing path.
  • Check exits and recent JES2 changes/maintenance if the onset follows a migration or configuration change. Site exits running inside JES2 can extend dispatch duration.
  • If the condition persists, collect vendor-requested JES2 diagnostics, dumps or traces before recycling JES2. Recycling clears symptoms but can destroy the best evidence.

What confirms the diagnosis

  • Repeated delay for the same PCE with checkpoint/I/O/exit evidence is materially different from a one-off warning during a transient CPU spike.
  • Healthy JES2 resources with persistent internal-delay messages support use of JES2DIAG/subsystem-health analysis rather than JOBDIAG resource-shortage analysis.

Escalation / evidence package

  • Provide exact $HASP messages, timestamps, member/MAS and checkpoint displays, JES2/RMF CPU and I/O context, recent exits/maintenance and any requested dumps/traces.
  • Do not issue destructive checkpoint or JES2 recovery actions based on a generic PCE warning; follow site and IBM recovery procedures for the actual diagnosed layer.
XCF Signalling Path Degradation / Sysplex Communication DelayHIGHLIVE

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.

What you are seeing

  • Cross-system functions become slow or intermittent.
  • XCF messages report path failures, retries, buffer pressure or member communication problems.
  • Multiple unrelated sysplex-aware products degrade at the same time.

First 10–15 minutes

  1. Confirm sysplex membership and whether all systems see the same member/path condition.
  2. Inspect inbound and outbound signalling paths, transport class usage and recent path changes.
  3. Correlate with CF connectivity, channel/device issues and network/CTC/structure path type used by the environment.

Commands and evidence to collect

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

How to interpret the evidence

  • One path failed but alternates healthy: may be resilient but capacity/redundancy is reduced; repair before a second failure.
  • All paths to one member degraded: focus on that member/connectivity rather than individual applications.
  • High path/buffer utilization: capacity/transport-class configuration may be limiting even without a hard path failure.

Typical root causes

  • Physical/link path failure.
  • Incorrect or insufficient signalling path configuration.
  • Transport class/buffer pressure.
  • System/CF connectivity disruption.
  • Member stalled or severely CPU constrained.

Recovery and follow-up

  1. Restore redundant paths and verify XCF selects them as expected.
  2. If a member is unhealthy, resolve the member-level issue before cycling dependent subsystems.
  3. After path recovery, check affected XCF groups/products for automatic reconnection/rebuild completion.
Operational caution: Do not treat each application timeout independently when several sysplex consumers degrade together. XCF is shared infrastructure.

Deeper diagnostic path

  • Determine scope first: one path, one pair of systems, one transport class or sysplex-wide signalling degradation. Use D XCF,SYSPLEX,ALL, D XCF,PI/PO and group/path displays appropriate to your release.
  • Check path availability, buffer shortages, retries and alternative paths. A redundant path can be technically active but overloaded after another path fails.
  • Correlate with affected products. When Db2 data sharing, GRS, Logger or other sysplex-aware components become slow together, a shared XCF/CF infrastructure problem is more likely than multiple independent application incidents.
  • Verify physical/channel/IP connectivity for the signalling transport and look for concurrent hardware or network events. XCF is the consumer of underlying paths; it cannot compensate indefinitely for degraded transport.
  • If a system is unresponsive, distinguish signalling degradation from system failure/partitioning. Follow sysplex failure-management procedures rather than manually removing a system solely because messages are delayed.

What confirms the diagnosis

  • Path-specific errors/retries/buffer pressure aligned with cross-system delays provide direct evidence.
  • If only one application group is affected while XCF paths are healthy, investigate that component/group rather than classifying the event as general XCF degradation.

Escalation / evidence package

  • Capture D XCF outputs for systems/groups/paths, transport class/path identifiers, affected system pairs, message timestamps, hardware/network events and affected subsystems.
  • Preserve the before/after topology if a path is varied; recovery changes can hide the original routing/failure condition.
Coupling Facility Structure Pressure, Failure or RebuildHIGHLIVE

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.

What you are seeing

  • Messages report structure full, allocation failure, rebuild or loss of connectivity.
  • Db2/CICS/Logger/GRS or another CF user reports degraded sharing/recovery behavior.
  • A structure shows high entry/element use or insufficient size.

First 10–15 minutes

  1. Identify the exact structure name, type, owning application and CF.
  2. Display CFRM policy, structure status and CF availability.
  3. Determine whether duplexing/rebuild is already active and whether the application has an alternate/recovery path.

Commands and evidence to collect

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

How to interpret the evidence

  • Structure allocated but near capacity: size/tuning issue; assess entry/element demand and application guidance.
  • Structure failed and rebuild active: monitor rebuild completion; avoid conflicting manual actions.
  • Allocation fails after policy change: verify SIZE/INITSIZE, CFLEVEL, preference list and available CF storage.

Typical root causes

  • Undersized structure.
  • Workload growth.
  • CF failure/connectivity loss.
  • CFRM policy mismatch.
  • Application change increasing structure demand.

Recovery and follow-up

  1. Follow the owning product’s CF recovery/rebuild procedure; structure handling is not interchangeable across products.
  2. Correct policy/size only through change-controlled SETXCF/CFRM procedures.
  3. Verify all connectors return to normal and no rebuild/pending state remains.
Operational caution: Do not deallocate or force-rebuild a structure solely because it is “high usage.” Understand connector behavior and persistence/recovery requirements first.

Deeper diagnostic path

  • Identify the exact CF structure, connected applications, active/preferred CF and the symptom: full/entry pressure, connectivity loss, rebuild, duplexing issue or CF failure.
  • Use D XCF,STR,STRNAME=structure and related coupling displays to review allocation, connectors, size, policy and rebuild state. Verify CFRM policy separately; the application determines structure type (list/cache/lock semantics).
  • Check CF link/path and CF processor/storage health when multiple structures are affected. One structure problem can be application sizing; many simultaneous problems often indicate common CF infrastructure.
  • For rebuild or duplexing, confirm alternate CF capacity and preference before initiating actions. Moving a structure into an undersized or poorly connected CF can create a second incident.
  • Review CFRM policy changes, CF maintenance and workload growth if structure pressure is recurring. Permanent correction may be policy sizing, application tuning or CF capacity—not repeated manual rebuilds.

What confirms the diagnosis

  • Structure-specific entry/element/storage pressure or connector/rebuild state directly ties the problem to that structure.
  • If the structure is healthy but the application reports data-sharing delay, also check XCF signalling, CF link response and application-specific locking/cache metrics.

Escalation / evidence package

  • Provide structure display, CFRM policy name, CF/connector state, allocation/size information, rebuild/duplex status, affected products, link/CF health and recent policy/hardware changes.
  • Treat FORCE/REALLOCATE/rebuild commands as controlled recovery actions; capture current state and validate application-specific requirements before issuing them.
System Logger Log Stream Offload / Structure / Staging PressureHIGHLIVE

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.

What you are seeing

  • Logger messages indicate offload allocation failure, staging pressure, connection loss or log stream full conditions.
  • A subsystem slows or stops because it cannot write to its log stream.
  • Offload dataset generations grow abnormally or fail allocation.

First 10–15 minutes

  1. Identify the exact log stream and whether it is CF-structured or DASD-only.
  2. Check connector status, log stream definition, staging/offload data sets and recent allocation errors.
  3. For CF-backed streams, also inspect the associated structure and CFRM state.

Commands and evidence to collect

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

How to interpret the evidence

  • Offload allocation failures: investigate SMS classes, storage-group space, HLQ/catalog security and dataset naming limits.
  • CF structure pressure: confirm offload is occurring and staging/offload path is healthy before resizing.
  • One connector repeatedly disconnects: diagnose the owning subsystem as well as Logger.

Typical root causes

  • Offload dataset allocation/storage failure.
  • CF structure undersized or offload unable to keep up.
  • Staging dataset problem.
  • LOGR policy/definition issue.
  • Owning application produces unusual write volume.

Recovery and follow-up

  1. Restore the failed storage/offload path and confirm Logger resumes normal offload.
  2. Avoid deleting log data without understanding retention and recovery dependencies.
  3. If definitions must change, use IXCMIAPU/SETXCF procedures appropriate to the log stream type and z/OS release.
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.

Deeper diagnostic path

  • Identify whether the affected log stream is CF-structured or DASD-only and whether the issue is primary storage, staging data sets, offload data sets, directory capacity or connectivity.
  • Use D LOGGER displays for log stream, connections and status; correlate IXG messages with the exact log stream. High IXGLOGR I/O is not automatically a problem—Logger is expected to perform staging/offload I/O.
  • Check offload progress and target storage/SMS availability. Slow/full offload targets can back pressure primary log-stream storage and surface as application logging delays.
  • For CF log streams, inspect the associated CF structure and connectors. For DASD-only streams, focus on staging data sets and DASD/SMS allocation/I/O.
  • Determine which applications are connected and whether they are blocked, disconnected or merely producing high volume. Do not delete Logger data sets or alter policy as an ad hoc space fix.

What confirms the diagnosis

  • IXG messages plus stalled offload/staging/structure utilization and application logging symptoms establish the constrained layer.
  • High I/O with healthy offload progress and no application delay may be normal workload rather than an incident.

Escalation / evidence package

  • Capture D LOGGER log-stream/connection/status output, IXG messages, LOGR policy/structure name, staging/offload dataset state, storage/I/O evidence and connected applications.
  • If IBM/vendor support is involved, preserve timing and any dumps/traces requested before changing policy or reallocating structures.
SMF Recording / MAN Data Set / Log Stream Offload FailureHIGHLIVE

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.

What you are seeing

  • SMF messages report data set full, switching/offload problems or record loss risk.
  • Expected SMF record types are missing from downstream processing.
  • One MAN dataset remains active unusually long or alternate datasets are unavailable.

First 10–15 minutes

  1. Confirm whether the system uses MAN data sets, log streams, or both for the relevant record types.
  2. Display current SMF status and active configuration/member.
  3. Check offload/dump jobs, target dataset space, scheduler failures and whether any record types were intentionally excluded.

Commands and evidence to collect

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

How to interpret the evidence

  • Records absent because NOTYPE/exits filter them: configuration, not an offload failure.
  • MAN datasets fill because dump job failed: restore dump pipeline quickly; repeated switches without free alternates can end recording.
  • Log stream writes fail: investigate Logger/CF/offload infrastructure as well as SMF.

Typical root causes

  • Dump/offload job failure.
  • Insufficient target DASD.
  • SMFPRMxx configuration change.
  • Logger/log stream issue.
  • Exit filtering or record-type suppression.

Recovery and follow-up

  1. Restore recording/offload first, then quantify the time window and record types affected.
  2. Preserve failed dump job output for root-cause analysis.
  3. If configuration was changed, verify active SMFPRMxx options after correction rather than assuming the PARMLIB edit is active.
Operational caution: Do not casually enable large volumes of additional SMF records in production without estimating data rate, offload capacity and downstream processing impact.

Deeper diagnostic path

  • Determine the recording model first: traditional MAN data sets or SMF log streams. The offload tools differ—IFASMFDP is the SMF data-set dump program; IFASMFDL is the log-stream dump program.
  • Use D SMF and SYSLOG messages to verify active recording resources, switches and failures. For MAN data sets, confirm at least one writable recording data set remains and that the dump/clear process is functioning.
  • For log-stream recording, inspect System Logger/log-stream health, offload/storage availability and log-stream dump processing. Treat Logger symptoms separately from SMF record-selection configuration.
  • Review SMFPRMxx for SYS/SUBSYS TYPE/NOTYPE, exits and recording options when specific record types are missing. SET SMF=xx can activate a new member dynamically, but production changes should be validated for overhead and data consumers.
  • After recovery, verify new records are actually arriving—not merely that a command returned successfully—and ensure downstream accounting/security/capacity pipelines resume.

What confirms the diagnosis

  • SMF writer messages and recording-resource state show whether collection stopped, while record inspection confirms whether a specific type/subtype is filtered rather than globally unavailable.
  • A full MAN data set without a working empty target is a different incident from a log stream whose offload path is stalled.

Escalation / evidence package

  • Capture D SMF, relevant IEE/IFA/IXG messages, active SMFPRMxx, recording target type, dump/offload job status, affected record types and downstream impact.
  • Estimate the additional volume before enabling previously disabled high-frequency records; SMF changes can materially increase I/O, storage and downstream processing.
Abend Occurred but Expected Dump Is MissingHIGHLIVE

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.

What you are seeing

  • An abend message exists but support cannot find the requested dump.
  • Repeated failures stop producing new SVC dumps.
  • Dump-related messages indicate suppression, no target, dataset full or dump mode restrictions.

First 10–15 minutes

  1. Establish failure time, jobname/ASID, abend/reason and what dump type was expected.
  2. Confirm a dump was actually requested by the recovery environment.
  3. Check DAE and dump-mode settings before assuming dump services failed.

Commands and evidence to collect

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

How to interpret the evidence

  • DAE matched the symptom: use targeted TAKEDUMP/approved method if a fresh duplicate dump is needed.
  • CHNGDUMP has NODUMP for the type: DAE is not the cause; restore only according to site procedure.
  • No dump was requested: investigate product recovery options or use a targeted SLIP if support requires a dump.
  • Dump dataset/resources unavailable: correct the SYS1.DUMPxx/dump allocation issue.

Typical root causes

  • DAE duplicate suppression.
  • CHNGDUMP mode.
  • No dump request from recovery routine.
  • Target dump dataset unavailable/full/in use.
  • SLIP/product-specific dump handling.

Recovery and follow-up

  1. Choose the narrowest method that produces the required diagnostic data without globally disabling protections.
  2. Preserve the dump immediately and record title/time/ASID for IPCS/support.
  3. Return any temporary dump/DAE settings to the normal configuration after capture.
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.

Deeper diagnostic path

  • Separate “abend happened” from “dump was requested and written.” Check job/application messages to determine the abend, recovery routine and whether a dump request was issued.
  • Check DAE because duplicate symptoms can be matched and suppressed even though the abend still occurs. Review the active DAE configuration/history and health checks, and use TAKEDUMP/approved procedures when the next occurrence must produce a dump.
  • Check dump modes with D DUMP,OPTIONS and CHNGDUMP-related configuration, then verify available SYS1.DUMPxx/automatic dump data sets and allocation failures. A request can fail after DAE eligibility because no output resource is usable.
  • Check SLIP or application dump DD statements (SYSUDUMP/SYSABEND/SYSMDUMP) when the expected artifact is not an SVC dump. Different dump mechanisms have different prerequisites and contents.
  • Search SYSLOG for the exact dump title, IEA/ABD/ADY messages and suppression/allocation messages at the failure time; this normally identifies which layer prevented capture.

What confirms the diagnosis

  • DAE history matching the symptom confirms duplicate suppression; NODUMP/dump-mode evidence confirms policy suppression; allocation messages confirm output-resource failure.
  • Absence of any dump request means the investigation belongs in the application/recovery path, not dump-dataset configuration.

Escalation / evidence package

  • Provide abend/reason/module, exact timestamp, job/STC, SYSLOG dump/DAE messages, D DUMP,OPTIONS, DAE status/history and dump data-set state.
  • Do not globally disable DAE or broad dump suppression just to capture one failure; use the narrowest approved mechanism so repeated failures do not flood dump storage.
WLM Goal Miss / CPU Delay / LPAR CappingHIGHLIVE

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.

What you are seeing

  • Transactions or batch miss goals while jobs remain runnable.
  • RMF shows CPU delay or poor performance index for service classes.
  • LPAR is capped or consuming its defined capacity while demand remains high.

First 10–15 minutes

  1. Identify affected service class, period, goal, importance and performance index.
  2. Use RMF delay data to find why work is delayed; WLM is not the explanation for every slow job.
  3. Compare LPAR physical/defined capacity, capping state and processor utilization with the workload peak.

Commands and evidence to collect

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

How to interpret the evidence

  • CPU delay dominates: determine whether capacity is exhausted or workload importance/classification is inappropriate.
  • I/O or storage delay dominates: changing WLM importance may not solve the root cause.
  • Only one service class misses while system has headroom: inspect classification/goal and application behavior.

Typical root causes

  • LPAR capacity/capping.
  • Unexpected workload peak.
  • Misclassification to wrong service class.
  • Goal/importance not aligned with business priority.
  • Other delay type misinterpreted as CPU starvation.

Recovery and follow-up

  1. If there is an approved temporary capacity or policy action, apply it with clear rollback and monitor performance index afterward.
  2. Correct persistent classification/policy issues through normal WLM change process.
  3. If capacity is genuinely insufficient, treat it as capacity planning rather than repeated operational reprioritization.
Operational caution: Do not raise importance blindly. WLM reallocates finite resources; improving one class can worsen another.

Deeper diagnostic path

  • Start with the service class/period, goal type, importance and performance index. WLM manages business goals; a slow job is not automatically a WLM configuration problem.
  • Use RMF Monitor III/Postprocessor to identify dominant delay: CPU, I/O, storage, enqueue, subsystem or other. Policy changes cannot fix a bottleneck in a different resource.
  • If CPU delay dominates, check LPAR capping, weight, logical versus physical processor demand and CPC contention. A capped LPAR can show work ready for CPU even when another partition has spare capacity.
  • Review classification rules and recent policy changes if work is in the wrong service class. For enclave-based workloads, follow the enclave/service-class work rather than only the front-end address space.
  • Only after confirming a policy mismatch should service goals/importance/resource groups be changed, and then assess which other workload will lose resources as a consequence.

What confirms the diagnosis

  • A missed goal/PI above target plus CPU delay and capping/capacity evidence supports a CPU/WLM-capacity issue.
  • A good PI or a delay dominated by I/O/ENQ points away from WLM as root cause even if the workload feels slow.

Escalation / evidence package

  • Provide WLM policy/service class/period, goal/importance/PI, RMF delay breakdown, LPAR cap/weight/CPU data, workload identifiers and recent policy/capacity changes.
  • Avoid emergency priority or policy changes without time-bounded rollback and impact review; they can starve unrelated critical work.
DASD I/O Delay, Device Pending or Volume UnavailableHIGHLIVE

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.

What you are seeing

  • Jobs show I/O wait with little CPU.
  • IOS/device messages report path/device problems.
  • Allocation fails for datasets on one volume or storage group.
  • Response time rises sharply on a small set of devices.

First 10–15 minutes

  1. Identify affected volume serial/device number and which datasets/workloads are using it.
  2. Check device online state, pending conditions and path health.
  3. Use RMF to distinguish device service time from queue delay and determine whether the issue is localized or storage-wide.

Commands and evidence to collect

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

How to interpret the evidence

  • One device has high service time: storage/device issue likely.
  • Queue time high across many devices: broader workload or storage subsystem contention.
  • Volume offline or boxed: follow storage/operations recovery; do not vary devices casually if data integrity is uncertain.
  • Only new allocations fail: check SMS/storage group free space/status in addition to I/O health.

Typical root causes

  • Storage subsystem/path degradation.
  • Volume/device offline.
  • Workload hot spot.
  • SMS storage-group space shortage.
  • Hardware maintenance or path change.

Recovery and follow-up

  1. Coordinate with storage team using exact device, volume, time and RMF evidence.
  2. Move/restore workload only through supported storage procedures.
  3. After path/device recovery, verify pending I/O clears and affected jobs/subsystems resume rather than merely restarting them.
Operational caution: Do not vary a device offline/online as a diagnostic reflex without knowing its sharing, reserve/serialization and active workload.

Deeper diagnostic path

  • Identify whether delay is device-specific, volume-specific, control-unit/path-specific or broad storage-subsystem latency. RMF device reports and Monitor III I/O delay are more useful than one job’s EXCP count.
  • Use D U,VOL=volser or device displays plus D M=CHP and IOS displays to verify device/path state. Look for boxed/offline paths, pending varies, reserves, allocation messages and repeated IOS/IEC errors.
  • Correlate affected jobs with the same volume/storage group/control unit. If unrelated workloads on the same backend slow together, escalate as shared storage infrastructure.
  • Check serialization separately. A job waiting on an ENQ or reserve can appear as I/O inactivity; do not classify every long dataset wait as device response time.
  • For unavailable volumes, verify catalog/SMS allocation expectations and whether the volume was intentionally varied, drained or removed for maintenance before attempting recovery.

What confirms the diagnosis

  • Elevated device response/IOS queue time or path/device errors correlated with affected work confirms I/O infrastructure delay.
  • Normal device response with high enqueue delay points to serialization rather than DASD performance.

Escalation / evidence package

  • Capture device/volser, storage group, control-unit/path information, RMF response components, IOS/IEC messages, D U/D M=CHP state, affected datasets/jobs and hardware event timeline.
  • Do not vary paths/devices online/offline blindly in a shared environment; coordinate with storage/hardware teams and preserve redundancy.
Catalog / Allocation Failure / Catalog ContentionHIGHLIVE

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.

What you are seeing

  • IDCAMS/IEF/IGD messages report catalog errors.
  • Jobs wait during allocation/open even though target volumes are healthy.
  • Many datasets under one HLQ fail while others work.
  • Catalog-related ENQs appear in GRS contention.

First 10–15 minutes

  1. Capture the exact catalog message and return/reason code; do not work only from “dataset not found.”
  2. Determine which catalog owns the dataset/alias and whether the issue affects one user catalog or the master catalog path.
  3. Check GRS contention and device status for catalog/VVDS volumes.

Commands and evidence to collect

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

How to interpret the evidence

  • One catalog affected: isolate its connectivity/I/O/structure issue rather than treating the whole catalog service as down.
  • Alias points unexpectedly: verify master catalog alias definitions before creating/deleting anything.
  • Contention on catalog resource: identify the holder and why it is long-lived.
  • VVDS/VTOC inconsistency suspected: escalate through catalog/storage recovery procedures; do not improvise repairs.

Typical root causes

  • Catalog ENQ contention.
  • User catalog unavailable or damaged.
  • Volume/VVDS problem.
  • Incorrect alias/definition.
  • Security or SMS allocation issue surfaced as catalog failure.

Recovery and follow-up

  1. Use IDCAMS diagnostic/recovery functions only under established catalog procedures.
  2. Restore the catalog/volume path or resolve the holder before rerunning large numbers of failed jobs.
  3. Validate representative LISTCAT/allocation operations after recovery.
Operational caution: Catalog repair utilities can be destructive. Do not use DIAGNOSE/REPRO/ALTER/IMPORT/EXPORT as trial-and-error incident commands.

Deeper diagnostic path

  • Start from the exact allocation/catalog message and dataset name. Determine whether failure is catalog lookup, alias/user-catalog routing, volume availability, SMS allocation, RACF authorization or a true catalog service issue.
  • Use IDCAMS LISTCAT and catalog diagnostic displays/procedures to identify the owning user catalog and entry. Confirm aliases and master-catalog routing; an incorrect alias can send valid names to the wrong catalog.
  • Check GRS contention for catalog resources and look for Catalog address-space messages/hangs when many unrelated allocations fail together. A single bad entry is not the same as catalog subsystem degradation.
  • For VSAM, distinguish BCS/catalog metadata from VVDS/VVR/NVR and physical data components. Recovery actions depend on which metadata layer is inconsistent.
  • Before DELETE/DEFINE/RECATALOG or IDCAMS recovery, capture LISTCAT output and validate the actual on-volume dataset/components; catalog repair can make data unreachable if assumptions are wrong.

What confirms the diagnosis

  • A repeatable LISTCAT/alias/BCS inconsistency or Catalog address-space error across allocations confirms the catalog layer.
  • If LISTCAT is correct but allocation fails with storage-group/volume/security messages, move to SMS/storage/RACF rather than repairing the catalog.

Escalation / evidence package

  • Provide exact IEC/IGD/IDC messages, dataset name, LISTCAT output, master/user catalog and alias path, volume/VVDS state, GRS contention and scope of affected allocations.
  • Treat catalog structural repair as a controlled data-integrity change with backup/recovery plan.
TCP/IP Stack, Listener or Network Connectivity FailureHIGHLIVE

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.

What you are seeing

  • Multiple applications report connection failures or timeouts.
  • A specific port no longer listens.
  • One remote network is unreachable while local connections work.
  • TCP/IP stack or OMPROUTE messages indicate interface/routing problems.

First 10–15 minutes

  1. Establish scope: one application/port, one interface, one remote subnet, or the whole stack.
  2. Confirm the TCP/IP stack and related routing/DNS services are active.
  3. Check listener ownership, HOME/interface state, route and active connection evidence before recycling applications.

Commands and evidence to collect

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

How to interpret the evidence

  • No listener: application/service issue or bind failure; check owning STC logs and port reservation.
  • Listener exists but remote timeout: inspect route/interface/firewall/remote path.
  • Only one interface/subnet affected: avoid restarting the entire stack.
  • Many sockets in abnormal states: identify application behavior and resource limits before tuning blindly.

Typical root causes

  • Application listener down.
  • Interface/VIPA problem.
  • Routing/OMPROUTE issue.
  • Port conflict or security restriction.
  • External firewall/network outage.
  • TCP/IP resource exhaustion.

Recovery and follow-up

  1. Restore the narrowest failed layer: application, route/interface, or stack only when necessary.
  2. Capture NETSTAT state and relevant logs before restarting the stack because restart destroys valuable evidence and affects many consumers.
  3. Verify both inbound and outbound connectivity after recovery.
Operational caution: Restarting TCP/IP is a high-blast-radius action. Prove the problem is stack-wide before using it.

Deeper diagnostic path

  • Define the failure boundary: stack down, interface/device down, route problem, DNS issue, port not listening, connection refused, timeout or TLS/application failure. “Network issue” is too broad to troubleshoot efficiently.
  • Verify TCP/IP stack status and the specific listener/connection with D TCPIP/NETSTAT interfaces appropriate to your installation. Confirm expected local address, port, owning job and bind/listen state.
  • Check routes, VIPA/DVIPA, OSA device/link state and sysplex distributor if applicable. A listener can be healthy while traffic is routed to another LPAR or an inactive path.
  • Correlate with application messages and packet/trace evidence only when needed. Connection refused, timeout and reset have different implications; preserve the exact remote/local endpoint and time.
  • For TLS failures, separate transport reachability from handshake/certificate/AT-TLS policy. Successful TCP connect with failed TLS is not a basic routing outage.

What confirms the diagnosis

  • No listener on the expected address/port confirms a service-side issue; route/interface failures confirm network path; successful handshake to TCP followed by application error moves diagnosis above the network layer.
  • If only one remote network is affected, compare route/firewall/path with known-good destinations before recycling the stack.

Escalation / evidence package

  • Capture stack name, local/remote IP and port, listener/connection state, route/interface status, relevant EZB/EZZ messages, timestamps, application owner and any packet/trace IDs.
  • Avoid broad stack recycle as a first diagnostic step; it disrupts every application sharing the stack and destroys live connection evidence.
Critical Started Task Fails to Start After IPLHIGHLIVE

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.

What you are seeing

  • An STC is absent or ends shortly after IPL.
  • Automation retries it but it fails with the same initialization messages.
  • Dependent applications remain unavailable even though z/OS itself is up.

First 10–15 minutes

  1. Capture the STC joblog from the first failed start; later retries may obscure the original prerequisite failure.
  2. Check whether required base components are up: JES, security manager, TCP/IP, OMVS, Logger, XCF/CF, Db2/CICS or vendor dependencies as applicable.
  3. Compare active PROCLIB/PARMLIB members and datasets with the pre-IPL baseline/change record.

Commands and evidence to collect

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

How to interpret the evidence

  • S806/S047/authorization-type failures: check program search, APF, security and library availability.
  • Dataset allocation/open failures: check catalog/SMS/volume and migrated dataset conditions.
  • Connection to Logger/CF/TCPIP/Db2 fails: fix the prerequisite rather than repeatedly restarting the product.
  • Only after IPL: suspect initialization ordering or configuration activation difference.

Typical root causes

  • Startup order/dependency missing.
  • PARMLIB/PROC change not active or wrong member.
  • APF/LINKLIST/LPA issue.
  • Dataset/catalog/SMS problem.
  • Security change.
  • OMVS/network/Logger/CF prerequisite not ready.

Recovery and follow-up

  1. Restore prerequisites first, then perform one controlled restart and verify full initialization messages.
  2. If a PARMLIB/PROCLIB error caused it, correct through the site change process and capture the active member evidence.
  3. Update automation dependency/order if this is a repeatable IPL race.
Operational caution: Repeated START commands can create additional partial resources or noisy logs. Diagnose the first failure before retry loops.

Deeper diagnostic path

  • Compare the failed STC with the site startup sequence and a known-good IPL. Determine whether it failed to start, started and abended, or is waiting on a prerequisite.
  • Inspect JESMSGLG/JESYSMSG/SYSLOG for JCL, PROC, allocation, APF, program-fetch, security, subsystem, network, catalog and mount errors. The earliest causal message is usually more useful than the final “not available” symptom.
  • Verify active PROCLIB, PARMLIB, LINKLIST/LPA/APF and system symbols if the STC cannot locate code or configuration. Confirm that new-release libraries are actually active after maintenance/IPL.
  • Check prerequisite services such as JES2, TCP/IP, VTAM, OMVS/zFS, Logger, security managers and required datasets. Startup order is installation-specific and should be dependency-driven.
  • If the STC was healthy before IPL, compare configuration/member suffixes, symbol values, proclib concatenation, product maintenance and filesystem mounts rather than immediately changing the product itself.

What confirms the diagnosis

  • A specific fetch/allocation/APF/security/prerequisite message tied to the failed start identifies the layer. Merely seeing the STC absent from D A,L does not.
  • If many STCs fail on the same missing library/filesystem/subsystem, solve the shared prerequisite once rather than treating them separately.

Escalation / evidence package

  • Provide STC name, start command/procedure, exact first failure messages, active config displays, prerequisite status, pre/post-IPL comparison and maintenance/change list.
  • Do not add libraries to APF/LINKLIST or bypass security solely to make a task start without confirming the intended product installation configuration.
Post-IPL System Partially Available / Base-Service ValidationHIGHLIVE

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.

What you are seeing

  • TSO may work but applications or automation remain unavailable.
  • Some systems in the sysplex cannot communicate or required structures/log streams are missing.
  • Batch starts before all prerequisite services are healthy, creating secondary incidents.

First 10–15 minutes

  1. Use a defined post-IPL checklist rather than relying on “console is quiet.”
  2. Compare current system identity, IPL parameters and active PARMLIB context with the change plan.
  3. Validate shared services before application layers: XCF/CF/GRS, Logger, SMS/storage, OMVS, TCP/IP, SMF/dumps, then critical STCs.

Commands and evidence to collect

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

How to interpret the evidence

  • System joins sysplex but structures/log streams missing: do not release dependent subsystems yet.
  • OMVS active but filesystems absent: applications may write into wrong mount-point directories.
  • SMF/dump services degraded: system may run but you are operating without normal audit/diagnostic protection.
  • Critical STCs active but not ready: look for completion/ready messages, not only address-space existence.

Typical root causes

  • Wrong LOADxx/PARMLIB member.
  • Initialization command missed.
  • Automation/start order issue.
  • CF/XCF/Logger/storage prerequisite unavailable.
  • Mount/network issue.
  • Change introduced at IPL without complete verification.

Recovery and follow-up

  1. Hold workload release until base-service exceptions are understood and accepted.
  2. Fix dependency/configuration gaps in layer order, then revalidate downstream services.
  3. Capture a post-IPL baseline to compare against future IPLs and feed IPLCHCK-style automation.
Operational caution: “IPL completed” is not the same as “LPAR ready.” A system can accept console commands while essential shared services are still degraded.

Deeper diagnostic path

  • Treat post-IPL validation as layered: hardware/I/O and nucleus initialization, core z/OS/master services, JES2, sysplex/CF/XCF, UNIX/network/storage/security, then application/middleware dependencies.
  • Start with D IPLINFO, D PARMLIB, D IOS,CONFIG, D M=CPU/STOR and D A,L to confirm the intended SYSRES, LOADxx/IEASYSxx/IODF and basic address-space population. A successful console prompt does not mean the intended configuration was loaded.
  • Validate outstanding WTORs, failed started tasks, JES2 state, XCF membership/structures, Logger, SMF, OMVS mounts, TCP/IP/VTAM and key automation before declaring the system serviceable.
  • Compare against a pre-IPL baseline/checklist. Missing APF/LINKLIST/LPA libraries, changed symbols, wrong PARMLIB member, unmounted zFS, inactive paths or subsystem ordering issues often surface only when dependent work starts.
  • If the system joined a sysplex, verify that shared structures/couple datasets and cross-system services are healthy—not simply that the LPAR appears in D XCF.

What confirms the diagnosis

  • The first failed layer in the dependency chain is the root focus. Multiple downstream STCs failing after one missing common prerequisite should not be counted as independent causes.
  • A complete validation requires functional checks (logon, job submission, key mounts/network/subsystems), not only started-task presence.

Escalation / evidence package

  • Preserve IPLINFO, active PARMLIB/PROCLIB/APF/LINKLIST, IODF/I/O state, outstanding replies, failed STC messages, XCF/Logger/SMF/OMVS/network status and pre/post differences.
  • If rollback/re-IPL is considered, identify the exact configuration divergence first so the next IPL has a controlled corrective change rather than repeating the same failure.

Diagnostics & Operations · JCL Library

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.

197 examples
EREP Report2 examples

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=EHISM is used for software error reporting and TYPE=CDHOT for hardware error reporting. Include EVENT for a summary-style event report; remove it for the detailed form. DATE=(yyddd,yyddd) uses Julian day format. For the CPU identifier, use D M=CPU; the note builds the value as CPU=(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 as LASTRUN, DELETE, DEVICESTATS, and SYSTEM=.

EREP report from an EREP history data set

What it does

Reads an existing EREP monthly/history data set and produces the requested software or hardware error report.

Sanitized JCL / control statements
//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
/*

EREP report directly from the LOGREC log stream

What it does

Reads LOGREC records directly through the LOGR subsystem instead of using a history data set.

Sanitized JCL / control statements
//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
/*
DEFRAG Job3 examples

DEFRAG Job - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//* ******************************************************************
//* *
//* 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

What it does

DEFRAG:

Sanitized JCL / control statements
//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

What it does

REPORT:

Sanitized JCL / control statements
//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
/*
CA7 SPILL Job1 example

CA7 SPILL Job - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
Allocate / Mount ZFS4 examples

Allocate / Mount zFS - Define the aggregate

What it does

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.

Sanitized JCL / control statements
//* ------------------------------------------------------------
//* 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))
/*

Format zFS aggregates with IOEAGFMT

What it does

Formats preallocated VSAM linear data sets as zFS aggregates. Use the compatibility-mode option only when that is the intended file-system design.

Sanitized JCL / control statements
//* ------------------------------------------------------------
//* 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=*

Mount a zFS aggregate

What it does

Issues the z/OS UNIX MOUNT command through batch TSO. The plus signs continue the TSO command across input records.

Sanitized JCL / control statements
//* ------------------------------------------------------------
//* 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)
/*

Define, format and mount zFS in one job

What it does

Combines allocation, IOEAGFMT formatting and mounting. The steps are kept separate so a failure does not hide which stage needs correction.

Sanitized JCL / control statements
//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)
/*
BPXBATCH7 examples

BPXBATCH - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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
/*

BPXBATCH - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP1    EXEC PGM=BPXBATCH
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//STDPARM  DD *
sh
_BPX_JOBNAME='INETD' /usr/sbin/inetd /etc/YOURHLQ.conf &
/*

BPXBATCH - Run a shell command

What it does

Runs a simple shell command through BPXBATCH using in-stream STDPARM.

Sanitized JCL / control statements
//STEP1    EXEC PGM=BPXBATCH
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
//STDPARM  DD *
SH ls -l /SYSTEM/tmp
/*

Then execute the command via BPXBATCH by utilizing STDPARM (PATHOPTS must be set to ORDONLY)

What it does

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):

Sanitized JCL / control statements
//USSCMD   EXEC PGM=BPXBATCH
//STDERR   DD SYSOUT=*
//STDOUT   DD SYSOUT=*
//STDPARM  DD PATH='/u/userid/stdparmfile',PATHOPTS=ORDONLY
/*

BPXBATCH - Example 5

What it does

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:

Sanitized JCL / control statements
//USSCMD   EXEC PGM=BPXBATCH
//STDERR   DD SYSOUT=*
//STDOUT   DD SYSOUT=*
//STDPARM  DD DISP=SHR,DSN=YOURHLQ.USERID.STDPARM.TEST
/*

BPXBATCH - Pipe shell output

What it does

Runs a shell pipeline from batch. Keep STDPARM records within the installation-supported record length.

Sanitized JCL / control statements
//USSCMD   EXEC PGM=BPXBATCH
//STDERR   DD SYSOUT=*
//STDOUT   DD SYSOUT=*
//STDPARM  DD *
SH ls -altr /products/sample/src | grep functions
/*

JCL continuation for a long EXEC statement

What it does

Shows normal JCL statement continuation: the continued EXEC parameters start on a // continuation card rather than relying on text wrapping in the browser.

Sanitized JCL / control statements
//JOBNAME  JOB
//BPXIT    EXEC PGM=BPXBATCH,
//         PARM='SH ls -l /u/userid/long-directory-name'
//STDOUT   DD SYSOUT=*
//STDERR   DD SYSOUT=*
IDCAMS Define VSAM1 example

IDCAMS DEFINE - keyed VSAM cluster

What it does

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.

Sanitized JCL / control statements
//* ------------------------------------------------------------
//* 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))
/*
IDCAMS Delete3 examples

Delete Cataloged VSAM datasets

What it does

Delete Cataloged VSAM datasets:

Sanitized JCL / control statements
//JOBNAME  JOB
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DELETE YOURHLQ.JMS.DATA.DATA
/*

Delete Uncataloged VSAM datasets

What it does

Delete Uncataloged VSAM datasets:

Sanitized JCL / control statements
//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
/*

Delete Uncataloged Non-VSAM datasets

What it does

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:

Sanitized JCL / control statements
//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
/*
IDCAMS Indirect Cataloging2 examples

IDCAMS Indirect Cataloging - Example 1

What it does

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.

Sanitized JCL / control statements
//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))
/*

IDCAMS Indirect Cataloging - Example 2

What it does

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.

Sanitized JCL / control statements
//INCATLG  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  DEFINE NONVSAM ( -
    NAME(YOURHLQ.COMPILER.LIBRARY) -
    DEVT(3390) -
    VOLUMES(VOL001)) -
  CATALOG(YOURHLQ.MASTER.CATALOG)
/*
IDCAMS Recatalog1 example

IDCAMS Recatalog - Example 1

What it does

Recatalogs an existing VSAM linear data set. Verify the VVDS/VTOC component information and volume before recataloging.

Sanitized JCL / control statements
//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)
/*
IDCAMS Rename datasets3 examples

IDCAMS Rename datasets - Example 1

What it does

Uses IDCAMS ALTER NEWNAME to back up existing cataloged non-VSAM libraries and then promote replacement libraries if the first rename step succeeds.

Sanitized JCL / control statements
//* ------------------------------------------------------------
//* 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

IDCAMS Rename datasets - simple example

What it does

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.

Sanitized JCL / control statements
//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

What it does

Rename a VSAM cluster:

Sanitized JCL / control statements
//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')
/*
IDCAMS REPRO1 example

IDCAMS REPRO - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
//
IDCAMS SET MAXCC1 example

IDCAMS SET MAXCC - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
/* CHANGE THE BELOW MAXCC TO A NUMBER BETWEEN
0 AND 16*/
SET MAXCC=16
/*
IDCAMS Empty a dataset1 example

IDCAMS Empty a dataset - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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=*
IDCAMS Addvolumes2 examples

For SMS managed volumes

What it does

For SMS managed volumes:

Sanitized JCL / control statements
//JOBNAME  JOB
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  ALTER YOURHLQ.ZFS.DATA.DATA -
    ADDVOLUMES(* *)
/*

For non-SMS managed volumes

What it does

For non-SMS managed volumes:

Sanitized JCL / control statements
//JOBNAME  JOB
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  ALTER YOURHLQ.ZFS.DATA.DATA -
    ADDVOLUMES(VOL001 VOL002)
/*
IDCAMS EXTENDEDADDRESSABLE1 example

IDCAMS EXTENDEDADDRESSABLE - Example 1

What it does

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.

Sanitized JCL / control statements
//JOBNAME  JOB
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
ALTER YOURHLQ.OMVS.ZFS.DATA -
EXTENDEDADDRESSABLE
/*
IDCAMS LISTCAT1 example

IDCAMS LISTCAT - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP01   EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
LISTCAT ENTRIES(YOUR.FILE.NAME.HERE) ALL
/*
Conditional processing1 example

Conditional processing - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//         IF
//* (YOURHLQ.DATA.SAS.RC NE 0) OR (YOURHLQ.DATA.SAS.RC NE 4) THEN
//STEP3    EXEC PGM=MYPROG
//         ENDIF
IEHPROGM Rename datasets1 example

IEHPROGM rename a non-VSAM data set

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
ADRDSSU Copy datasets1 example

ADRDSSU copy selected product libraries

What it does

*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

Sanitized JCL / control statements
//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
/*
Backup runtime libraries1 example

Back up product runtime libraries

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*
Copy maintenance to runtime libraries1 example

Refresh runtime libraries after maintenance

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
Restore runtime libraries1 example

Restore product runtime libraries

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
ADRDSSU Dump & Restore6 examples

Dump

What it does

Dump:

Sanitized JCL / control statements
//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)
/*

ADRDSSU Dump & Restore - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*

ADRDSSU Dump & Restore - Example 3

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*

ADRDSSU Dump & Restore - Example 4

What it does

Dumps a selected data-set mask to tape with ADRDSSU. Retention, tape management and ADMINISTRATOR authority must match local standards.

Sanitized JCL / control statements
//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

What it does

Restore:

Sanitized JCL / control statements
//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)
/*

ADRDSSU Dump & Restore - Example 6

What it does

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.

Sanitized JCL / control statements
//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.**))
/*
ADRDSSU Delete datasets1 example

ADRDSSU Delete datasets - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP01   EXEC PGM=ADRDSSU
//SYSPRINT DD SYSOUT=*
//OUTDD    DD DUMMY
//SYSIN    DD *
DUMP OUTDDNAME(OUTDD) -
DATASET(INCLUDE( -
YOURHLQ.INFO.PWXX.**)) -
DELETE PURGE
/*
ADRDSSU Move datasets2 examples

ADRDSSU Move datasets - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*

ADRDSSU Move datasets - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*
IEBGENER3 examples

Copy data from tape dataset to disk

What it does

Copy data from tape dataset to disk

Sanitized JCL / control statements
//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

What it does

Copy from one PS to another PS file

Sanitized JCL / control statements
//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

IEBGENER - Example 3

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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=*
//*
IEFBR143 examples

IEFBR14 - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//* 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

What it does

Using LIKE and DCB parameter:

Sanitized JCL / control statements
//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

IEFBR14 - Example 3

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//* ************************************************************
//* DELETE DATASET
//* ************************************************************
//STEPNAME EXEC PGM=IEFBR14
//SYSPRINT DD SYSOUT=*
//DDNAME   DD DSN=dsname,DISP=(OLD,DELETE,DELETE)
/*
IEBCOPY11 examples

IEBCOPY - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//* ************************************************************
//* 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
/*

IEBCOPY - Example 2

What it does

Note: LIKE parameter (LIKE=dsname) is used for SMS managed datasets, for non-sms managed datasets use DCB=dsname

Sanitized JCL / control statements
//* ************************************************************
//* 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
/*

IEBCOPY - Example 3

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*

IEBCOPY - Example 4

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//* ************************************************************
//* 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
/*

IEBCOPY - Example 5

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//* ************************************************************
//* 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

What it does

Compress a PDS in place that is in use:

Sanitized JCL / control statements
//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

What it does

Copy and rename:

Sanitized JCL / control statements
//* ************************************************************
//* 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))
/*

IEBCOPY - Example 8

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)

What it does

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.

Sanitized JCL / control statements
//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
/*

In this example, a sequential data set that was created by an IEBCOPY unload operation is loaded.

What it does

Loading a dataset: In this example, a sequential data set that was created by an IEBCOPY unload operation is loaded.

Sanitized JCL / control statements
//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

What it does

Rename members in a dataset:

Sanitized JCL / control statements
//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)
/*
IKJEFT017 examples

Issue SDSF commands

What it does

Issue SDSF commands:

Sanitized JCL / control statements
//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

What it does

TSO Receive:

Sanitized JCL / control statements
//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

What it does

Mount a filesystem:

Sanitized JCL / control statements
//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')

Unmount a filesystem

What it does

TYPE(ZFS) MODE(RDWR) PARM('AGGRGROW') /* Unmount a filesystem:

Sanitized JCL / control statements
//UNMOUNT  EXEC PGM=IKJEFT1B
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
PROF MSGID WTPMSG

Delete a dataset

What it does

UNMOUNT FILESYSTEM('YOURHLQ.DATA.ETC.ZFS') IMM /* Delete a dataset:

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSUDUMP DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SYSTSIN  DD *
DEL 'YOURHLQ.DATASET'
/*

Submit jobs

What it does

Submits several JCL members from a partitioned data set through batch TSO.

Sanitized JCL / control statements
//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

What it does

Copy the contents of a filesystem to another:

Sanitized JCL / control statements
//*
//* 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;
FTP3 examples

FTP - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP01   EXEC PGM=FTP
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
192.0.2.10
userid
password
CD 'YOURHLQ.CSILIST'
MVSGET 'YOURHLQ.CSILIST' 'YOURHLQ.CSILIST'
QUIT
//*

FTP - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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

FTP to a vendor support server

What it does

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.

Sanitized JCL / control statements
//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
/*
Transferring documentation to IBM2 examples

IBM PDUU (AMAPDUPL) HTTPS upload

What it does

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.

Sanitized JCL / control statements
//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

What it does

Using FTP:

Sanitized JCL / control statements
//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 / Unterse5 examples

TERSE a PS/PDS file

What it does

TERSE a PS/PDS file:

Sanitized JCL / control statements
//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

What it does

UNTERSE a PS file:

Sanitized JCL / control statements
//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

What it does

UNTERSE a PDS file:

Sanitized JCL / control statements
//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

Use following the JCL example to perform a batch TSO XMIT and then a PACK of the PDSE file using AMATERSE

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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 following sample JCL can be used for this (NOTE: the PDSE 'YOUR.HLQ.LINKLIB.PDSE' must be pre-allocated)

What it does

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):

Sanitized JCL / control statements
//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')
/*
Submitting multiple jobs1 example

Submitting multiple jobs - Example 1

What it does

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.

Sanitized JCL / control statements
//*
//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
//*
FDRCOPY5 examples

FDRCOPY - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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

FDRCOPY - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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

What it does

Using CATDSN for multi volume datasets:

Sanitized JCL / control statements
//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

FDRCOPY - Example 4

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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

FDRCOPY - Example 5

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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**
/*
PDS86 Empty datasets1 example

PDS86 reset/empty library example

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
PDSM321 example

In the following example, the member MYTEST and its aliases will be deleted, from the YOURHLQ.LOAD library.

What it does

Delete a Member and its Aliases, In the following example, the member MYTEST and its aliases will be deleted, from the YOURHLQ.LOAD library.

Sanitized JCL / control statements
//S1       EXEC PGM=PDSM32
//PDSMPDS  DD DSN=YOURHLQ.LOAD,DISP=SHR
//PDSMRPT  DD SYSOUT=A
//SYSIN    DD *
DELETE MYTEST ALIAS
//
Create new SMP/E Environment2 examples

Create a new SMP/E CSI - allocate and initialize

What it does

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.

Sanitized JCL / control statements
//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)
/*

Create a new SMP/E environment - define zones

What it does

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.

Sanitized JCL / control statements
//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.
/*
Build New SMPE Environment2 examples

Build an SMP/E environment — single CSI

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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.
/*

Build an SMP/E environment — separate CSIs

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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.
/*
Delete a FMID1 example

Reject received SYSMODs for an FMID

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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>).
/*
UNZIP1 example

UNZIP - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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>
/*
Internet service retrieval request1 example

Internet service retrieval request - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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>
SHOPz Receive order1 example

SHOPz Receive order - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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>
/*
Receive1 example

RECEIVE SYSMODS LIST

What it does

ADD THE 'LIST' PARAMETER TO THE RECEIVE COMMAND, IF A DESCRIPTION IS DESIRED. RECEIVE SYSMODS LIST

Sanitized JCL / control statements
//SMPPTFIN DD DISP=SHR,
//         DSN=YOURHLQ.BSA.INPUT.DATA(BSAMCS)
//*
//SMPCNTL  DD *
SET BDY(GLOBAL) .
RECEIVE SYSMODS
RFPREFIX(YOURHLQ.BETA.BSA.INPUT) .
//
Receive order5 examples

Receive order - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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>
/*

Broadcom

What it does

) ORDERSERVER and CLIENTINFO: Broadcom:

Sanitized JCL / control statements
//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

What it does

BMC:

Sanitized JCL / control statements
//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>
/*

Receive order - Example 4

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//CLNTINFO DD *
<CLIENT
ftpccc="no"
classpath="/usr/lpp/smp/classes/">
<FTPOPTIONS>-v -f
"//'YOURHLQ.FTPS.DATA(BMC)'" </FTPOPTIONS>
</CLIENT>
/*

IBM

What it does

IBM:

Sanitized JCL / control statements
//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>
/*
RECEIVE FROMNTS2 examples

RECEIVE FROMNTS - Example 1

What it does

Receives an SMP/E order staged in an SMPNTS directory. Replace ORDERID and the SMPNTS path with values from the downloaded service package.

Sanitized JCL / control statements
//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.
/*

RECEIVE FROMNTS - Example 2

What it does

Receives selected SYSMODs from an SMPNTS order instead of receiving the entire order.

Sanitized JCL / control statements
//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').
/*
Apply check1 example

Apply check - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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
.
Apply2 examples

Apply - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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 */
.

Apply - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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) .
/*
Accept1 example

Accept - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
.
/*
List5 examples

List all the PTFs

What it does

For more examples refer LIST command examples in SMPE commands IBM workbook List all the PTFs

Sanitized JCL / control statements
//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

What it does

List SYSMODS that are received but not installed

Sanitized JCL / control statements
//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

What it does

List all DDDEF entries defined in Target zone

Sanitized JCL / control statements
//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

What it does

To determine whether a SYSMOD has been installed in target zone

Sanitized JCL / control statements
//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).
/*

List - Example 5

What it does

To see a list of the actions associated with system holds for all the SYSMODS that are received but not applied yet

Sanitized JCL / control statements
//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).
/*
Report Error Sysmods1 example

Report Error Sysmods - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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).
/*
Report Missingfix3 examples

Report Missingfix - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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(*) .
/*
//*

REPORT MISSINGFIX — z/OS service/coexistence

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
    ).
/*

REPORT MISSINGFIX — hardware/function compatibility

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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.*
    ).
/*
Reject1 example

Reject - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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 .
/*
Cleanup & Compress1 example

Cleanup & Compress - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//*
//*
//* 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) .
/*
Clone job1 example

Clone a SYSRES / software volume set - generic skeleton

What it does

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.

Sanitized JCL / control statements
//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.
/*
AMBLIST5 examples

AMBLIST - Example 1

What it does

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.

Sanitized JCL / control statements
//AMBLIST  EXEC PGM=AMBLIST,REGION=16M
//SYSPRINT DD SYSOUT=*
//SYSLIB   DD DISP=(SHR),DSN=YOURHLQ.PDSE
//SYSIN    DD *
LISTIDR MEMBER=(APP1)
/*

AMBLIST - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//AMBLIST  EXEC PGM=AMBLIST,REGION=16M
//SYSPRINT DD SYSOUT=*
//LOADLIB  DD DISP=(SHR),DSN=YOURHLQ.PDSE
//SYSIN    DD *
LISTLOAD DDN=LOADLIB,MEMBER=(APP1)
/*

AMBLIST - Example 3

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*

AMBLIST - Example 4

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*

AMBLIST - Example 5

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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
/*
Create Dir1 example

Create Dir - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//* *******************************************************************
//*
//* 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;
CFRM Policy7 examples

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.

Report active CFRM policy definitions

What it does

Read-only IXCMIAPU report of the active CFRM policy and its structure definitions.

Sanitized JCL / control statements
//CFRMRPT  EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(CFRM) REPORT(YES)
/*

Define a CFRM policy with CF and structure definitions

What it does

Template showing the policy, coupling-facility attributes, preferred lists and representative XCF/JES2/LOGR structure definitions.

Sanitized JCL / control statements
//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)
/*

Delete a CFRM policy

What it does

Deletes a named policy definition after it is no longer required.

Sanitized JCL / control statements
//DELETE   EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(CFRM) REPORT(YES)
DELETE POLICY NAME(YOURPOL)
/*

Report CFRM data from a specific couple data set

What it does

Points IXCMIAPU at a specified CFRM couple data set rather than relying only on the active policy context.

Sanitized JCL / control statements
//CFRMRPT  EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(CFRM) REPORT(YES)
DSN(YOURHLQ.YOURPLEX.CFRM.CDS01)
/*

Define a policy using an external control member

What it does

Shows the reference pattern for keeping a long CFRM policy definition in a separate PDS member rather than embedding the entire policy inline.

Sanitized JCL / control statements
//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)
/*

Report Logger structures and log streams

What it does

IXCMIAPU LOGR report retained from the CFRM notes because it is commonly used while validating CF-backed logger configuration.

Sanitized JCL / control statements
//LOGRRPT  EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(LOGR)
LIST STRUCTURE NAME(*)
LIST LOGSTREAM NAME(*)
/*

Define CF-backed CICS log streams

What it does

Template for two CF-backed CICS log streams using a named logger structure, data classes, staging sizes and offload thresholds.

Sanitized JCL / control statements
//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)
/*
Logstream6 examples

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.

List log streams - concise

What it does

Lists log streams without the detailed administrative report.

Sanitized JCL / control statements
//LIST     EXEC PGM=IXCMIAPU,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(LOGR) REPORT(NO)
LIST LOGSTREAM NAME(*) DETAIL(NO)
/*

List log streams - detailed report

What it does

Produces the detailed LOGR administrative report for all log streams.

Sanitized JCL / control statements
//LIST     EXEC PGM=IXCMIAPU,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(LOGR) REPORT(YES)
LIST LOGSTREAM NAME(*) DETAIL(YES)
/*

Increase log-stream sizing values

What it does

Updates selected log-stream sizing values. Treat as a change-controlled example and first report the current definition.

Sanitized JCL / control statements
//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)
/*

Delete a log stream

What it does

Deletes the named log stream definition. Use only after confirming retention, connections and product ownership.

Sanitized JCL / control statements
//DELETE   EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(LOGR) REPORT(NO)
DELETE LOGSTREAM NAME(YOUR.LOGSTREAM.NAME)
/*

Define a DASD-only log stream

What it does

Defines a DASD-only log stream and exposes the common sizing, offload, retention, duplexing and allocation keywords .

Sanitized JCL / control statements
//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)
/*

Delete a LOGR structure definition

What it does

Deletes a named LOGR structure definition. This is destructive administrative work and requires confirmation that nothing still depends on it.

Sanitized JCL / control statements
//DELETE   EXEC PGM=IXCMIAPU
//SYSPRINT DD SYSOUT=*
//SYSABEND DD SYSOUT=*
//SYSIN    DD *
DATA TYPE(LOGR) REPORT(YES)
DELETE STRUCTURE NAME(YOUR.CF.STRUCTURE)
/*
IXCL1DSU3 examples

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.

Format primary and secondary SYSPLEX couple data sets

What it does

Defines a pair of SYSPLEX couple data sets with capacity items for groups, members and GRS-related data.

Sanitized JCL / control statements
//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)
/*

Format primary and secondary ARM couple data sets

What it does

Defines a pair of ARM couple data sets and their policy/element capacities.

Sanitized JCL / control statements
//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)
/*

Format primary and secondary CFRM couple data sets

What it does

Defines a pair of CFRM couple data sets with capacities for policies, coupling facilities, structures, connectors and system-managed rebuild data.

Sanitized JCL / control statements
//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)
/*
SADUMP3 examples

Stand-Alone Dump - one-stage program generation

What it does

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.

Sanitized JCL / control statements
//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=*

Stand-Alone Dump - two-stage generation outline

What it does

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.

Sanitized JCL / control statements
//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.

Allocate and initialize a multi-volume SADMP data set

What it does

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.

Sanitized JCL / control statements
//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'
/*
GDG6 examples

Define a GDG base

What it does

Creating a GDG base: /DEFGDG1 JOB ...

Sanitized JCL / control statements
//STEP1    EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN    DD *
DEFINE GDG -
(NAME(YOURHLQ.DATA) -
EMPTY -
NOSCRATCH -
LIMIT(15))
/*

Create the new generations

What it does

Create the new generations :

Sanitized JCL / control statements
//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

What it does

Modify existing GDG parameters : Use ALTER command to change the parameter of the GDG Base

Sanitized JCL / control statements
//STEP010  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
ALTER MYDATA.IBM.SAMPLE.GDG LIMIT(50)
/*

GDG - Example 4

What it does

Deleting a GDG : Delete the individual data sets (G0001V00, G0002V00, etc.) and then run this IDCAMS job to delete the GDG

Sanitized JCL / control statements
//STEP010  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
DELETE (MYDATA.IBM.SAMPLE.GDG) GDG FORCE
/*

Using GDG in a JCL

What it does

Using GDG in a JCL :

Sanitized JCL / control statements
//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

Sample SMF dump job for dumping the type 30 SMF records from 3 systems (GDG files) into a single dataset.

What it does

Reading multiple GDGs: Sample SMF dump job for dumping the type 30 SMF records from 3 systems (GDG files) into a single dataset.

Sanitized JCL / control statements
//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
SMF8 examples

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.

Allocate an SMF MAN data set

What it does

Defines a reusable non-indexed VSAM cluster suitable for an SMF MAN data set; replace sizing values with the installation standard.

Sanitized JCL / control statements
//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))
/*

Format a newly allocated SMF data set

What it does

Clears/formats the new MAN data set with IFASMFDP before it is placed into the active SMF configuration.

Sanitized JCL / control statements
//FORMAT   EXEC PGM=IFASMFDP
//SYSPRINT DD SYSOUT=*
//NEWDS    DD DSN=SYS1.MANX,DISP=SHR
//SYSIN    DD *
INDD(NEWDS,OPTIONS(CLEAR))
/*

Dump and clear an SMF MAN data set

What it does

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.

Sanitized JCL / control statements
//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))
/*

Dump a recent SMF window by record ID

What it does

Uses MAXDAYS and RECORDID selection to build a smaller diagnostic extract from an SMF input data set.

Sanitized JCL / control statements
//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)
/*

Read an SMF data set without creating output

What it does

Processes the input with IFASMFDP and sends the selected output to DUMMY; useful as a validation/read pass.

Sanitized JCL / control statements
//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))
/*

Split an existing SMF extract by record type and time

What it does

Reads an IFASMFDP-created extract and writes separate RMF and type-30 outputs for the requested date/time window.

Sanitized JCL / control statements
//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)
/*

Dump an SMF log stream to a data set

What it does

Uses IFASMFDL to read an SMF log stream, select a date/time/system window, and write records to a sequential extract.

Sanitized JCL / control statements
//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)
/*

Dump selected SMF records from a log stream

What it does

Uses IFASMFDL as the SMF log-stream dump program and selects common accounting/performance record types for a specified Julian-date window.

Sanitized JCL / control statements
//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)
/*
SDSF Commands2 examples

SDSF Commands - Example 1

What it does

Runs a small set of MVS display commands through batch SDSF and writes the captured output to a sequential data set.

Sanitized JCL / control statements
//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
/*

SDSF Commands - Example 2

What it does

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.

Sanitized JCL / control statements
//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
/*
DSNTYPE=LARGE1 example

Allocate a large data set with multiple candidate units

What it does

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.

Sanitized JCL / control statements
//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)
RACF8 examples

List user

What it does

Lists the RACF user profile including TSO/OMVS segments and then lists the selected group.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  LISTUSER USERA TSO OMVS
  LISTGRP GROUP1
/*

Creating a new userid

What it does

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.

Sanitized JCL / control statements
//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)
/*

Delete a RACF user ID - basic sequence

What it does

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.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  LISTUSER USERA
  LISTDSD DATASET('USERA.**') ALL
  DELDSD 'USERA.**'
  DELUSER USERA
/*

Connect USERID to different groups

What it does

Connects an existing RACF user to additional groups. The command issuer needs the appropriate group authority.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  CONNECT USERA GROUP(GROUP1)
  CONNECT USERA GROUP(SYSPROG)
/*

List dataset profile

What it does

Lists a RACF data-set profile and its ownership/access information.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  LISTDSD DATASET('USERA.**') ALL
/*

Permit dataset access and refresh

What it does

Adds a user to a generic RACF data-set profile access list and refreshes generic data-set profiles.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  PERMIT 'YOURHLQ.CICS.**' ID(USERA) ACCESS(ALTER) GENERIC
  SETROPTS GENERIC(DATASET) REFRESH
/*

Password Reset

What it does

Resets a RACF user password and resumes the user. Use the installation password/phrase policy and secure delivery procedure for temporary credentials.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  ALTUSER USERA PASSWORD(TEMP123) RESUME
/*

RACF IRRUT100 cross-reference

What it does

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.

Sanitized JCL / control statements
//STEP1    EXEC PGM=IRRUT100
//SYSUT1   DD UNIT=SYSDA,SPACE=(TRK,(50,10))
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
USERA
/END
/*
SYSPRINT1 example

SYSPRINT to a data set

What it does

Example DD statement for capturing a utility report into a cataloged sequential data set instead of SYSOUT.

Sanitized JCL / control statements
//SYSPRINT DD DSN=YOURHLQ.PRODUCT.WORK,
//         DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
//         SPACE=(CYL,(1000,500),RLSE),
//         DCB=(RECFM=FBA,LRECL=133,BLKSIZE=0)
USS COPY4 examples

USS COPY - Example 1

What it does

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.

Sanitized JCL / control statements
//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=*

USS COPY - Example 2

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*

USS COPY - Example 3

What it does

Copies a text file from z/OS UNIX into an existing MVS data set using OCOPY with text conversion.

Sanitized JCL / control statements
//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)
/*

USS COPY - Example 4

What it does

Copies a binary z/OS UNIX file, such as a JAR, into an MVS data set without character conversion.

Sanitized JCL / control statements
//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
/*
PDSMAN PDSM104 examples

PDSM10 execution skeleton

What it does

Broadcom PDSMAN PDSM10 execution skeleton. Replace <FUNCTION> with a documented PDSM10 function such as RELEASE, EMPTYO or EMPTY.

Sanitized JCL / control statements
//PDSM10   EXEC PGM=PDSM10,PARM='<FUNCTION>'
//PDSMPDS  DD DSN=YOURHLQ.LOADLIB,DISP=OLD

This example releases unused extents of library YOURHLQ.LOADLIB.

What it does

Examples Release Unused Extents This example releases unused extents of library YOURHLQ.LOADLIB.

Sanitized JCL / control statements
//RELEASE  EXEC PGM=PDSM10,PARM=RELEASE
//PDSMPDS  DD DSN=YOURHLQ.LOADLIB,DISP=OLD

This example deletes all members from library YOURHLQ.LOADLIB.

What it does

Empty a Library This example deletes all members from library YOURHLQ.LOADLIB.

Sanitized JCL / control statements
//EMPTYO   EXEC PGM=PDSM10,PARM=EMPTYO
//PDSMPDS  DD DSN=YOURHLQ.LOADLIB,DISP=OLD

This example deletes all members from library YOURHLQ.LOADLIB and releases all unused secondary extents.

What it does

Empty a Library and Releasing Extents This example deletes all members from library YOURHLQ.LOADLIB and releases all unused secondary extents.

Sanitized JCL / control statements
//EMPTY    EXEC PGM=PDSM10,PARM=EMPTY
//PDSMPDS  DD DSN=YOURHLQ.LOADLIB,DISP=OLD
SORT Job2 examples

SORT Job - Example 1

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//STEP010  EXEC PGM=SORT
//SYSPRINT DD SYSOUT=*
//SYSOUT   DD SYSOUT=*
//SORTIN   DD *
VASU
/*
//SORTOUT  DD SYSOUT=*
//SYSIN    DD *
SORT FIELDS=COPY
/*

SORTIN dummy

What it does

SORTIN dummy:

Sanitized JCL / control statements
//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)
XWTR3 examples

External writer - generic skeleton

What it does

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.

Sanitized JCL / control statements
//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 SYSLOG example

What it does

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.

Sanitized JCL / control statements
//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)

External writer append example

What it does

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.

Sanitized JCL / control statements
//IEFPROC  EXEC PGM=IASXWR00,PARM='PL'
//IEFRDER  DD DSN=YOURHLQ.OUTPUT.DATA,DISP=MOD
IEAMDBLG1 example

IEAMDBLG — archive OPERLOG in SYSLOG format

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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)
/*
SYSVIEW2 examples

SYSVIEW batch activity report

What it does

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.

Sanitized JCL / control statements
//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)
/*

SYSVIEW batch SYSLOG extract

What it does

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.

Sanitized JCL / control statements
//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)
/*
SARINIT1 example

Broadcom View/SAR initialization options

What it does

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.

Sanitized JCL / control statements
//STEP1    EXEC PGM=SARINIT
//STEPLIB  DD DISP=SHR,DSN=YOURHLQ.VIEW.LOADLIB
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
NAME=YOURHLQ.VIEW.DATABASE
/*
ICETOOL3 examples

SMF type 17 data-set deletion report

What it does

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.

Sanitized JCL / control statements
//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
/*

SMF type 14 data-set input report

What it does

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.

Sanitized JCL / control statements
//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
/*

SMF type 15 data-set output report

What it does

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.

Sanitized JCL / control statements
//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
/*
Update Symbols1 example

IEASYMU2 — update installation-defined system symbols

What it does

Reusable example for this scenario. Replace placeholders and verify product- or release-specific parameters against the linked documentation and your installation standards before use.

Sanitized JCL / control statements
//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'
/*
Reference links 36

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

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.

377 commands
System, IPL & program management 35 commands
D IPLINFO
Displays the IPL date/time, z/OS level, LOADxx/IEASYS/IEASYM context, IODF device, IPL device and SYSRES information.
D PARMLIB
Displays the active PARMLIB concatenation and volume information.
D SYMBOLS
Displays current static system symbols and their resolved values.
D OPDATA
Displays subsystem command prefixes and other operation data for the system/sysplex.
D IOS,CONFIG
Displays the active I/O configuration and IODF-related configuration information.
D M
Displays processor, storage, channel-path and device configuration information.
D M=CPU
Displays processor configuration and online/offline status.
D M=STOR
Displays central-storage configuration and online storage ranges.
D M=DEV
Displays device configuration information.
D U,VOL=<VOLSER>
Displays the device and status associated with the specified volume serial.
D U,,,<DEVNUM>,1
Displays detailed status for the specified device number.
D U,DASD,ONLINE
Displays online DASD devices.
D U,TAPE,ONLINE
Displays online tape devices.
D A,L
Displays detailed active address spaces, including jobs, started tasks and TSO users.
D A,TSO
Displays active TSO users.
D A,<JOBNAME>
Displays activity information for the named job or started task.
D R,R
Displays outstanding WTORs that require replies.
D T
Displays local and UTC date/time information.
D PROG,APF
Displays the APF-authorized library list.
D PROG,LNKLST
Displays active LINKLIST set information.
D PROG,LPA
Displays dynamic LPA information.
D PROG,LPA,MODNAME=<MODULE>
Displays entry point, load point and size for the specified LPA module.
D PROG,EXIT
Displays dynamic exit definitions and routines.
D LLA
Displays Library Lookaside status and managed libraries.
F LLA,UPDATE=<XX>
Refreshes LLA directory information using the specified CSVLLAxx member after an approved library-directory change.
SET PROG=<XX>
Activates the selected PROGxx parmlib member.
SETPROG APF,ADD,DSNAME=<DSN>,VOLUME=<VOLSER>
Adds a non-SMS library to the dynamic APF list. Verify volume and authorization policy before use.
SETPROG APF,DELETE,DSNAME=<DSN>,VOLUME=<VOLSER>
Deletes a non-SMS library from the dynamic APF list. Confirm that no authorized workload still depends on it.
SETPROG APF,ADD,DSNAME=<DSN>,SMS
Adds an SMS-managed library to the dynamic APF list.
SETPROG APF,DELETE,DSNAME=<DSN>,SMS
Deletes an SMS-managed library from the dynamic APF list.
SETPROG LPA,ADD,MODNAME=<MODULE>,DSNAME=<DSN>
Dynamically adds the named module from the specified program library to LPA; consumes common storage.
SETPROG LNKLST,TEST,NAME=<SET>,MODNAME=<MODULE>
Tests where a module would be found in the specified LINKLIST set.
ROUTE <SYSNAME>,D IPLINFO
Routes DISPLAY IPLINFO to another system in the sysplex.
ROUTE *ALL,D IPLINFO
Routes DISPLAY IPLINFO to all active systems.
TSO LISTCAT ENTRY('<DSN>') ALL
Runs IDCAMS LISTCAT from a TSO/ISPF command environment to display catalog information for a data set.
Jobs, started tasks & address-space control 11 commands
S <PROCNAME>
Starts the named cataloged procedure/started task.
P <STCNAME>
Requests an orderly stop of the named started task when the component supports STOP.
C <JOBNAME>
Cancels the named job or address space after normal component stop processing is not appropriate or has failed.
C <JOBNAME>,DUMP
Cancels the named work and requests a dump.
C <JOBNAME>,A=<ASID>
Cancels the named work and qualifies the request with an ASID.
C U=<USERID>
Cancels the TSO user associated with the specified user ID.
FORCE <JOBNAME>
Forces termination of an address space when orderly stop/cancel processing cannot complete; use only after evidence collection.
FORCE <JOBNAME>,ARM
Forces termination while coordinating with Automatic Restart Manager handling where applicable.
FORCE U=<USERID>
Forces the specified TSO user/address space; this is a last-resort action.
RESET <JOBNAME>,QUIESCE
Quiesces running work through WLM/MVS without terminating the address space.
RESET <JOBNAME>,RESUME
Reclassifies/resumes work that was quiesced or temporarily assigned another service class.
GRS / ENQ contention 7 commands
D GRS
Displays GRS complex status.
D GRS,C
Displays current ENQ/latch contention.
D GRS,RES=(SYSDSN,<DSN>)
Displays GRS ownership/request information for a data-set ENQ.
D GRS,RES=(*,<RNAME>)
Searches GRS resources using any QNAME with the specified resource name.
D GRS,DEPENDENCY,SYS=<SYSNAME>,JOB=<JOBNAME>,COUNT=20,DETAIL
Displays resource dependency chains for the specified job.
D GRS,ANALYZE,LATCH,WAITER,COUNT=20,DETAIL
Analyzes latch waiters and blockers.
D GRS,ALL
Displays broad GRS status, resource-name-list and contention information.
Storage, SMS & virtual storage 10 commands
D ASM
Displays page data sets and auxiliary-storage status.
D SMS
Displays active SMS configuration/status information.
D SMS,STORGRP(ALL)
Displays all SMS storage groups and their state.
D SMS,STORGRP(<STORGRP>),LISTVOL
Displays a storage group and the status of its volumes.
D SMS,STORGRP(<STORGRP>),DETAIL
Displays detailed status for the specified storage group where the group type supports DETAIL.
D VIRTSTOR,LFAREA
Displays large-frame-area configuration and utilization.
D VIRTSTOR,HVCOMMON
Displays 64-bit common-area configuration and utilization.
D VIRTSTOR,HVSHARE
Displays high-virtual shared-area configuration and utilization.
D WLM
Displays the active WLM service policy and WLM status.
V WLM,POLICY=<POLICY>
Activates a named WLM service policy that is installed in the WLM couple data set.
System Logger & SMF 14 commands
D LOGGER,STATUS
Displays current System Logger operational status.
D LOGGER,L
Lists log streams defined to the sysplex.
D LOGGER,L,LSN=<LOGSTREAM>
Displays definition information for the specified log stream.
D LOGGER,CONN,LSN=<LOGSTREAM>
Displays active connections to the specified log stream.
D LOGGER,CONN,LSN=<LOGSTREAM>,DETAIL
Displays detailed connector/staging information for the specified log stream.
D LOGGER,STR,STRN=<STRUCTURE>
Displays System Logger information by coupling-facility structure.
D XCF,COUPLE,TYPE=LOGR
Displays the primary/alternate LOGR couple-data-set configuration.
SETLOGR FORCE,DELETE,LSN=<LOGSTREAM>
Forcibly deletes a log-stream definition when documented prerequisites are met; verify all connectors and persistence state first.
D SMF
Displays SMF recording status and data-set/log-stream information.
D SMF,S
Displays SMF data-set status.
D SMF,O
Displays active SMF options, including recording/buffer settings.
D SMF,M
Displays SMF in-memory resource/connection information.
SWITCH SMF
Switches from the current SMF MAN data set to an empty alternate; verify an empty alternate first.
SET SMF=<XX>
Activates the selected SMFPRMxx member. Review restrictions before changing exits or major recording options.
JES2 health, resources & spool 20 commands
$JDDETAILS
Displays JES2 Health Monitor detail for the current member.
$JDDETAILS(RESOURCE)
Displays JES2 Health Monitor resource-use detail.
$JDHISTORY
Displays JES2 Health Monitor history.
$DLIMITS
Displays JES2 monitored resource limits and utilization.
$DLIMITS(SPOOL)
Displays JES2 spool-related resource limits.
$DLIMITS(JQE)
Displays JES2 job-queue-element limits.
$D JES2
Displays JES2 subsystem status.
$P JES2
Requests an orderly JES2 shutdown after the member is ready to stop.
$D SPOOL
Displays JES2 spool volumes and usage.
$D SPOOLDEF
Displays JES2 spool-definition settings.
$D CKPTDEF
Displays checkpoint configuration.
$D CKPTSPACE
Displays checkpoint-space information.
$D JOBDEF
Displays JOBDEF initialization settings.
$D OUTDEF
Displays OUTDEF initialization settings.
$D PROCLIB
Displays JES2 dynamic PROCLIB definitions.
$D DESTID(*)
Displays JES2 destination identifiers.
$D JOBQ,SPOOL=(%>2)
Displays jobs consuming more than two percent of spool.
$D O JOBQ,AGE>4
Displays output groups older than four days.
$D OUTCLASS(*)
Displays JES2 output-class definitions.
$D OUTCLASS(<CLASS>)
Displays the specified output-class definition.
JES2 NJE & sockets 7 commands
$D NETSRV(1)
Displays the specified JES2 network server.
$D NETSRV(1),SESSIONS
Displays active sessions for the specified JES2 network server.
$D NETSRV(1),LONG
Displays extended network-server information.
$D SOCKET
Displays JES2 socket definitions.
$D SOCKET(<NAME>)
Displays the specified JES2 socket.
$T SOCKET(<NAME>),SECURE=YES,PORT=<PORT>
Changes the specified JES2 socket to secure mode/port as allowed by the active configuration; treat as a controlled change.
$D NODE(<NODENAME>)
Displays JES2 NJE node information.
Sysplex, XCF & CFRM 16 commands
D CF
Displays attached coupling-facility status and storage/attachment information.
D XCF
Displays basic XCF/sysplex information.
D XCF,SYSPLEX,ALL
Displays detailed sysplex member information.
D XCF,COUPLE
Displays sysplex couple-data-set and XCF configuration information.
D XCF,COUPLE,TYPE=SYSPLEX
Displays primary/alternate sysplex couple data sets and SSD-related support information.
D XCF,COUPLE,TYPE=CFRM
Displays the CFRM couple-data-set configuration.
D XCF,POLICY
Displays active XCF policy information.
D XCF,POLICY,TYPE=CFRM
Displays the active CFRM policy.
D XCF,STR
Displays coupling-facility structures and connection state.
D XCF,STR,STAT=ALLOC
Displays allocated coupling-facility structures.
D XCF,STR,STRNAME=<STRUCTURE>
Displays detailed status for the specified CF structure.
D XCF,GROUP
Displays XCF groups and members.
D XCF,LOCALMSG
Displays XCF local-message information.
D XCF,PATHOUT,DEVICE=ALL
Displays outbound XCF signalling paths by device.
D XCF,PATHIN,DEVICE=ALL
Displays inbound XCF signalling paths by device.
SETXCF START,POLICY,TYPE=CFRM,POLNAME=<POLICY>
Activates the specified CFRM policy after the policy has been defined and reviewed.
Subsystem Interface (SSI) 6 commands
D SSI
Displays all subsystems defined to the MVS Subsystem Interface.
D SSI,STAT=ACT,DYN=YES
Displays active subsystems that support dynamic SSI services.
D SSI,ALL,SUB=<SUBSYS>
Displays detailed SSI information for the specified subsystem.
SETSSI ADD,SUBNAME=<SUBSYS>
Dynamically defines a secondary subsystem when that subsystem supports dynamic definition.
SETSSI ADD,SUBNAME=<SUBSYS>,INITRTN=<ROUTINE>,INITPARM='<PARM>'
Adds and initializes a dynamic secondary subsystem using the supplied initialization routine/parameter.
SETSSI DELETE,SUBNAME=<SUBSYS>,FORCE
Deletes a dynamic subsystem definition using FORCE; disruptive and only for a documented recovery/change procedure.
Dump services, DAE & SLIP 22 commands
DUMP COMM=('DIAGNOSTIC DUMP')
Requests an SVC dump and causes z/OS to issue a reply prompt for the dump parameters.
D DUMP,STATUS
Displays status of system dump data sets/resources.
D DUMP,OPTIONS
Displays dump options in effect.
D DUMP,TITLE
Displays titles/times for available SVC dumps.
D DUMP,TITLE,DSN=ALL
Displays titles for all preallocated SYS1.DUMP data sets and the latest automatically allocated dump.
D DUMP,TITLE,DUMPID=ALL
Displays titles of captured dumps known to dump services.
CHNGDUMP SET,SDUMP,MAXSPACE=<SIZE>
Changes the maximum SVC-dump address-space storage size; size the value for the system and dump policy.
CHNGDUMP SET,SYSUDUMP,SDATA=SQA
Adds SQA to SYSUDUMP SDATA options.
CHNGDUMP DEL,SYSUDUMP,SDATA=SQA
Removes SQA from SYSUDUMP SDATA options.
CHNGDUMP RESET,SYSUDUMP
Resets SYSUDUMP dump-mode options to defaults.
DUMPDS CLEAR,DSN=<NN>
Clears SYS1.DUMPnn so the preallocated dump data set can be reused.
DUMPDS CLEAR,DSN=ALL
Clears all eligible preallocated SYS1.DUMPxx data sets.
DUMPDS ADD,DSN=<NN>
Adds the specified SYS1.DUMPnn data set to the system dump-resource list.
D SLIP
Displays installed SLIP traps and state.
D SLIP=<ID>
Displays the specified SLIP trap.
SLIP SET,MSGID=<MSGID>,ACTION=SVCD,END
Defines a message-ID SLIP trap that requests an SVC dump when it matches.
SLIP SET,COMP=<CODE>,ACTION=SVCD,END
Defines a completion-code SLIP trap that requests an SVC dump when it matches.
SLIP MOD,ENABLE,ID=<ID>
Enables the specified SLIP trap.
SLIP MOD,DISABLE,ID=<ID>
Disables the specified SLIP trap.
F HZSPROC,DISPLAY,CHECK=(IBMDAE,DAE_SUPPRESSING),DETAIL
Displays the IBM Health Checker detail for DAE suppression.
F HZSPROC,DISPLAY,CHECK=(IBMDAE,DAE_SHAREDSN),DETAIL
Displays the IBM Health Checker check for DAE shared-data-set configuration.
SET DAE=<XX>
Activates the selected ADYSETxx member.
VTAM / SNA 7 commands
D NET,APPLS
Displays VTAM application major/minor node status.
D NET,MAJNODES
Displays VTAM major-node status.
D NET,PENDING
Displays VTAM resources in pending states.
D NET,LINES
Displays VTAM line resources.
D NET,ID=<MAJNODE>,E
Displays extended information for the specified VTAM resource/major node.
V NET,INACT,ID=<MAJNODE>
Varies the specified VTAM resource inactive; coordinate application impact.
V NET,ACT,ID=<MAJNODE>,UPDATE=ALL
Varies the specified VTAM resource active and requests update processing.
TCP/IP diagnostics 15 commands
TSO NETSTAT ROUTE
Displays TCP/IP routing information.
TSO NETSTAT HOME
Displays home IP addresses for the active TCP/IP stack.
TSO NETSTAT DEV
Displays network-interface/device status.
TSO NETSTAT STATS
Displays TCP/IP performance statistics.
TSO NETSTAT VIPADCFG
Displays dynamic VIPA configuration data.
TSO NETSTAT SOCKETS
Displays socket information grouped/filtered by client name.
TSO NETSTAT CONN
Displays active TCP/IP connections.
TSO PING <HOST_OR_IP>
Tests IP reachability to the specified host or address.
TSO TRACERTE <HOST_OR_IP>
Traces the IP route toward the specified destination.
TSO FTP <HOST_OR_IP>
Starts the TSO FTP client for the specified host.
D TCPIP
Displays TCP/IP started-procedure/stack status.
D TCPIP,<TCPIP_PROC>,NETSTAT,ROUTE
Runs a NETSTAT route display from the system console for the specified TCP/IP stack.
D TCPIP,<TCPIP_PROC>,NETSTAT,HOME
Runs a NETSTAT home-address display from the system console.
D TCPIP,<TCPIP_PROC>,NETSTAT,CONN
Runs a NETSTAT connection display from the system console.
D NET,EE
Displays Enterprise Extender information through VTAM.
z/OS UNIX, OMVS & zFS 34 commands
OMVS
Enters the z/OS UNIX shell from TSO/E.
ISHELL
Starts the ISPF shell for z/OS UNIX file-system administration.
D OMVS
Displays z/OS UNIX System Services status.
D OMVS,O
Displays z/OS UNIX options.
D OMVS,P
Displays z/OS UNIX process information.
D OMVS,F
Displays mounted z/OS UNIX file systems.
D OMVS,A=ALL
Displays all z/OS UNIX address-space/process information supported by the command.
D OMVS,F,NAME=<FILESYSTEM>
Displays status for the named mounted file system.
SETOMVS SYNTAXCHECK=(<XX>)
Syntax-checks the specified BPXPRMxx member before activation.
MOUNT FILESYSTEM('<ZFS_DSN>') TYPE(ZFS) MOUNTPOINT('<PATH>') MODE(RDWR)
Mounts the specified zFS file system read/write at the requested mount point.
UNMOUNT FILESYSTEM('<ZFS_DSN>') NORMAL
Requests a normal unmount of the specified file system after users/open files are cleared.
df -P <PATH>
Displays POSIX-style file-system space usage for the path.
mount
Lists mounted UNIX file systems from the shell.
du -sk <PATH>/* | sort -n
Displays and sorts directory sizes in KB to locate large areas.
find <PATH> -xdev -type f -size +100000 -print
Finds large files without crossing into other mounted file systems.
ps -ef
Displays UNIX processes.
ls -l <PATH>
Displays long-format directory/file information.
ls -T <PATH>/<FILE>
Displays file-tag information with the directory listing where supported.
chtag -p <PATH>/<FILE>
Displays the file tag for a z/OS UNIX file.
chtag -tc IBM-1047 <PATH>/<FILE>
Sets a text file tag to IBM-1047; use only when that encoding is correct for the file.
extattr <PATH>/<PROGRAM>
Displays extended program attributes.
ls -E <PATH>/<PROGRAM>
Displays extended attributes in the z/OS UNIX listing.
mkdir -m 755 <PATH>
Creates a directory with the requested permission bits.
chmod -R 775 <PATH>
Recursively changes permissions; assess scope before using -R.
chown -R <USERID> <PATH>
Recursively changes ownership; assess scope and security policy before using -R.
cp <SOURCE> <TARGET>
Copies a file.
mv <SOURCE> <TARGET>
Moves/renames a file.
rm <FILE>
Removes a file.
zfsadm fsinfo -aggregate <ZFS_DSN>
Displays detailed information for the specified zFS aggregate.
zfsadm aggrinfo <ZFS_DSN>
Displays aggregate usage/status information.
zfsadm configquery
Displays zFS configuration values.
zfsadm grow -aggregate <ZFS_DSN> -size <KBYTES>
Grows the specified zFS aggregate to the requested size; verify available underlying VSAM space and change controls.
zfsadm lsfs -aggregate <ZFS_DSN>
Lists file-system information for the specified aggregate.
zfsadm fileinfo <PATH>/<FILE>
Displays detailed zFS information for the specified file or path.
Console operations 6 commands
D CONSOLES
Displays console status and configuration information.
D CONSOLES,CN=<CONSOLENAME>
Displays information for the specified console.
D CONSOLES,SS
Displays subsystem consoles.
V <DEVNUM>,ONLINE
Varies the specified device online.
V <DEVNUM>,OFFLINE
Varies the specified device offline after dependencies are cleared.
V CN(<CONSOLENAME>),MSCOPE=(*ALL)
Changes the console message scope to all systems where allowed by console configuration.
TSO/E data transfer & identity 4 commands
TSO LU <USERID>
Uses the RACF LISTUSER command from TSO to display the specified RACF user profile.
XMIT <NODE>.<USERID> DS('<INPUT_DSN>') OUTDSN('<XMIT_DSN>')
Packages a data set with TSO/E TRANSMIT/XMIT into an output data set for transfer.
RECEIVE INDSN('<XMIT_DSN>')
Receives/restores a data set created by TSO/E TRANSMIT/XMIT.
TSO TIME
Displays the current time from TSO/E.

Section 1

z/OS Internals

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.

Architecture & Core Platform

System Configuration & Control

System Software, Availability & Recovery

Working Reference

SARATH.KB(INTERNALS.PARMLIB)

z/OS Internals · System Configuration

PARMLIB & PROCLIB 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.

PARMLIB is a logical configuration library

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, IEASYSxx and member suffixes

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.

Dynamic versus persistent configuration

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 and started procedures

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 change workflow I use

  1. Identify the active logical PARMLIB/PROCLIB and the currently selected member.
  2. Copy/change the site-owned member, not IBM base content, unless the installation standard says otherwise.
  3. Check syntax and component-specific validation facilities.
  4. Activate dynamically only through the supported SET/MODIFY command.
  5. Display the active result.
  6. Confirm the persistent member will reproduce the same state after IPL.
  7. Record backout: previous member, command and any restart/IPL dependency.

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.

References

Configuration article
SARATH.KB(INTERNALS.RACF)

z/OS Internals · System Configuration

RACF for the z/OS System Programmer

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.

Where RACF enters system-programming work

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.

Started-task identity

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.

Dataset access

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.

General-resource classes

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.

Security workflow for an install or upgrade

  1. List every required user/group, resource profile, dataset access, UNIX UID/GID and certificate/key-ring requirement from the product documentation.
  2. Map those requirements to site naming and least-privilege standards.
  3. Have the security change implemented before first production start where possible.
  4. Start the STC and capture ICH/IRR/Unix denial messages.
  5. Correct the specific missing authority, then retest.
  6. Remove temporary install-only authority.

How I troubleshoot a denial

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.

References

Security integration article
ARTICLE / z/OSMF

z/OS Internals · System Management

z/OS Management Facility (z/OSMF)

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.

Where z/OSMF fits

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.

Core architecture

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.

Configuration model

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.

Security model

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

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.

  • Inputs and site variables are defined once rather than edited across ten jobs.
  • Steps have clear preconditions and completion criteria.
  • Automation is used for deterministic work; approvals remain explicit.
  • Failure messages tell the operator what evidence to collect or which step to roll back.

Software Management

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.

REST APIs

# 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.

How I would use z/OSMF in lifecycle work

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.

Troubleshooting sequence

  1. Confirm IZUSVR1/IZUANG1 state and startup messages.
  2. Check Liberty/server logs and USS filesystem availability.
  3. Verify port/listener/TLS and certificate state.
  4. Check the user identity and z/OSMF service authorization.
  5. Check authorization to the underlying job/dataset/system resource.
  6. Isolate whether the failing piece is the z/OSMF framework or one specific service.

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.

IBM references

System management / automation article

Section 2

Software Product Lifecycle

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.

01 INSTALLDelivery model, prerequisites, SMP/E or non-SMP/E install, integration and proof.
02 MAINTAINAPAR/PTF concepts, HOLDDATA/FIXCAT, corrective and preventive service.
03 UPGRADESide-by-side or in-place, migration, cutover, coexistence and fallback.
04 CURRENCYInventory, version discovery, EOS evidence, compatibility and required service.
05 RETIREDependency proof, controlled removal, retention and residual validation.
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.
01 · Planning & Implementing a z/OS Software Product Installation DEEP GUIDE

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.

Understand DeliveryBuild Prerequisite MatrixDesign Site IntegrationInstallConfigureActivateProve / Handover

1. First decision: what kind of installation is this?

Delivery modelWhat it usually meansWhat the sysprog must control
SMP/E managedSoftware 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/EVendor 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.
HybridThe 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.

2. Turn the vendor documentation into an installation trajectory

  • Identify the program directory, installation guide, release notes, known issues, required service information and any separate configuration/security guides.
  • Extract the actual sequence: order/download → receive/unpack → prerequisites → base installation → required service → configuration → security → activation → validation. Reference documents are dependencies; they should not hide the main trajectory.
  • Separate mandatory installation steps from optional features. Installing every shipped FMID, sample or integration increases complexity and future maintenance unnecessarily.
  • Record every supplied job/member/script that will be changed. Keep an untouched vendor copy and a site-customized copy so the next upgrade can be compared cleanly.

3. Build a prerequisite matrix, not a loose list

AreaQuestions to answer before implementation
z/OS / hardwareSupported z/OS release? Required architecture/CF level? Required z/OS functions? Target-system PTFs?
Dependent softwareMinimum Db2/CICS/MQ/Java/runtime/security/network product levels? Coexistence restrictions?
SMP/EExisting CSI or new CSI? Global/target/DLIB zones? FMIDs? DDDEFs? SMPPTS/SMPLOG space? Required enhanced HOLDDATA?
StorageHLQs, SMS classes, volumes, target/DLIB/runtime libraries, work space, zFS size/growth, mount point and ownership?
System configurationPROCLIB, PARMLIB, subsystem definitions, APF, LINKLIST, LPA, LLA, exits, symbols, health checks?
SecuritySTC identity, dataset profiles, FACILITY/OPERCMDS/PROGRAM/product classes, USS UID/GID, certificates/keyrings?
NetworkPorts, VIPAs/interfaces, DNS, AT-TLS/System SSL, firewall requests, remote endpoints?
OperationsStartup/shutdown order, automation, WLM classification, monitoring, log retention, backup/recovery and scheduler dependencies?

4. Deep path: installing an SMP/E-managed product

  1. Understand the zones. Know which global zone describes the environment and which target/distribution zone pair will own the product. Do not copy sample SET BDY values without mapping them to the site's CSI.
  2. Prepare datasets and DDDEFs. Validate target/DLIB allocations, SMPPTS and work space, SMPLOG/SMPLOGA retention and any vendor-required RELFILE/SMPTLIB handling.
  3. RECEIVE the product and current exception data. RECEIVE stages SYSMODs into SMP/E and creates global-zone information; current HOLDDATA/FIXCAT information must be available before APPLY decisions are made.
  4. Run APPLY CHECK. This is where you want prerequisite, requisite, HOLD, element ownership and link-edit problems to surface. Review the actual messages—not only the final return code.
  5. Resolve HOLDs correctly. An ERROR hold, SYSTEM hold and site USER hold mean different things. BYPASS should represent a reviewed and approved exception, never a way to force CHECK to green.
  6. APPLY the intended functions/service. Confirm the resulting target-zone level and inspect SMP/E/binder output for warning conditions.
  7. Do the product configuration separately. SMP/E installing elements does not automatically create correct STC identities, ports, policies, parmlib values, databases or runtime datasets.
  8. Delay ACCEPT until the service level is proven. ACCEPT updates distribution libraries/zone state and changes the easy RESTORE/backout position. The stabilization policy belongs in the change plan.
/* 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 */

5. Deep path: installing a non-SMP/E product

  • Preserve provenance. Save the original vendor package, file name, source URL/support case, date, checksum if supplied, product version and install documentation revision.
  • Stage before production placement. Unpack pax/USS archives into a controlled staging path; expand transport/XMIT archives or vendor datasets without overwriting an existing production copy.
  • Read the installer before running it. Identify datasets it creates, USS ownership changes, scripts it executes, ports it binds, DB updates it performs and whether any step is irreversible.
  • Separate code from site configuration. Keep vendor code/runtime libraries as immutable as practical and store site parameters, PROCs and configuration in site-controlled libraries/paths. This makes future comparisons and rollback much easier.
  • Create explicit rollback artifacts. For an in-place non-SMP/E install, that might mean backup/copy of runtime loadlibs and configuration; for side-by-side it may be as simple as retaining the old execution path and data format.
  • Record the installed version independently. Do not rely only on the dataset HLQ. Capture the product's version command, startup message, manifest/properties file or load-module metadata that proves what is actually executing.

6. Dataset and zFS design is part of the installation

  • Distinguish installation libraries, SMP/E target/DLIBs, runtime libraries, configuration, logs, temporary/work datasets and persistent business/product data. They do not need the same backup, retention or security policy.
  • For zFS, define mount ownership, mode/ACL, expected size, secondary growth, log/temp locations and whether a missing mount could expose an underlying directory.
  • For products copied from target libraries into runtime libraries, document the copy/synchronization method; otherwise future PTFs can be APPLYed successfully but never reach the executing code.

7. Integrate with z/OS deliberately

  • PROCLIB/STC: create procedures, symbols and startup parameters; define the intended started-task identity.
  • APF/LINKLIST/LPA: add only libraries that documentation requires. Decide dynamic activation versus next IPL and record how to verify the active state.
  • PARMLIB/subsystem: avoid mixing unrelated product changes into shared members. Know whether the member is dynamically refreshable or IPL-bound.
  • RACF: define minimum dataset/general-resource/USS/certificate access and validate using the actual STC identity.
  • Network/TLS: reserve ports, configure listener/address, validate certificates/keyrings and prove both inbound and outbound dependencies.
  • WLM/automation/monitoring: classify the work correctly, add dependency-aware start/stop automation, monitoring and alert ownership before calling the installation complete.

8. Activation, validation and evidence

“The STC is active” is not an acceptance test. A good validation proves each layer:

LayerEvidence
InstallationSMP/E/package logs, installed FMID/version, expected libraries/files created.
InitializationDocumented ready messages; no unresolved WTOR, security, allocation or compatibility errors.
FunctionRepresentative product function/transaction/batch/API completes successfully.
IntegrationDependencies and consumers connect; ports/interfaces/certificates work; automation and monitoring see the product.
RecoveryStop/start or documented restart path is understood; backup/restore and rollback point are known.

9. Installation deliverables I would retain

  • Installation/implementation plan and approved change record.
  • Vendor source/document list with versions.
  • Pre-install inventory and prerequisite evidence.
  • RECEIVE/APPLY CHECK/APPLY logs or non-SMP/E installer logs.
  • Site configuration delta: datasets, zFS, STCs, PARMLIB, PROCLIB, APF/LINKLIST/LPA, RACF, ports, certificates, WLM and automation.
  • Validation output, backout procedure and final installed-level record.
02 · Maintaining z/OS Software: PTFs, HOLDDATA, FIXCAT & Preventive Service DEEP GUIDE

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.

BaselineReason / ExposureAcquire + HOLDDATACHECKAPPLYActivateValidate / ACCEPT

1. IBM maintenance terms a system programmer must distinguish

TermPractical meaning
APARThe formal record describing a product defect/problem and its resolution status. An APAR is not itself the installed fix package.
PTFA Program Temporary Fix—the installable SMP/E service that resolves one or more problems or provides function.
PE PTFA 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.
HIPERHigh Impact or PERvasive service—problems IBM considers significant enough to warrant elevated attention. HIPER does not mean “apply blindly”; check applicability and requisites.
HOLDDATAException information consumed by SMP/E. ERROR holds cover PTFs in error; SYSTEM holds identify special actions/notifications; USER holds are installation-defined.
FIXCATEnhanced HOLDDATA categories that associate APAR/PTF service with a target system, coexistence requirement, product-install requirement or other defined purpose.
RSURecommended 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 SOURCEIDA source identifier associated with when PTF service closed; it is different from the RSU recommendation timing.
USERMODA 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.

2. Corrective maintenance: installing an individual PTF

  1. Start from the APAR/problem statement. Confirm the reported symptom matches your exposure and identify the fixing PTF for the exact FMID/release.
  2. Check whether the PTF is superseded or PE. The newest-looking PTF number is not enough; current enhanced HOLDDATA and SMP/E requisites decide the usable service path.
  3. Determine prerequisites/co-requisites. One “single PTF” can pull a group of requisites. Plan the actual APPLY set, not the ticket's one-line PTF number.
  4. Identify activation. Will the fix become active dynamically, after REFRESH/LLA/library switch, after STC recycle, subsystem restart or IPL? Is there coexistence service for other LPARs/products?
  5. RECEIVE service and current HOLDDATA into the correct CSI/global zone.
  6. Run APPLY CHECK with the same selection/options planned for production. Investigate every HOLD/requisite/MODID/link-edit condition.
  7. APPLY and review output. Do not equate RC 0 with “ready”; ensure expected target libraries/elements were changed and no meaningful warning was ignored.
  8. Activate and verify the executing level. If runtime copies exist, synchronize them; if a recycle is required, prove the restarted address space loaded the maintained libraries.
  9. Validate the original symptom plus regression path. The test must prove the APAR problem is resolved and the critical product path still works.
/* 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 */

3. Preventive maintenance: RSU/service rollups

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.

  • Define the site's service cadence and recommendation level. Many shops stage maintenance through test → non-production → production rather than installing straight from availability.
  • Receive the latest enhanced HOLDDATA before building the candidate set. FIXCAT and HIPER/PE information change over time even if your existing PTF package does not.
  • Use the intended SOURCEID/RSU policy and review the size of the resulting requisite closure. A quarter's preventive service can affect many FMIDs and runtime libraries.
  • Search for HOLD SYSTEM actions requiring operator steps, rebuilds, migrations, IPLs or configuration changes. These are implementation tasks, not documentation footnotes.
  • Test representative workloads and product integrations, not only subsystem startup. Preventive service changes many code paths at once.
  • Keep the APPLY-to-ACCEPT stabilization interval long enough to make RESTORE/backout practical according to site policy.

4. FIXCAT: using service categories instead of guessing

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.

5. APPLY CHECK is a design review, not a ceremonial pre-step

  • Requisites: what additional SYSMODs will be pulled in and why?
  • HOLDs: is it ERROR, SYSTEM or USER? What action is required? Is a BYPASS technically and procedurally justified?
  • MODID: does a USERMOD or prior element owner conflict with the service?
  • Link-edit: are required target libraries/DDDEFs available and are binder warnings acceptable?
  • Scope: did the command select exactly the FMIDs/service intended for this change?

6. Activation matters as much as SMP/E completion

Activation patternTypical concern
Dynamic / no recycleProduct supports refresh/reload or the changed component is picked up on next invocation.
STC recycleConfirm shutdown order, restartability, active library path and startup messages.
LLA/LINKLIST/LPA relatedKnow whether directory refresh, dynamic LPA action or next IPL is the supported activation path.
IPLBundle only when dependencies and fallback are understood; post-IPL validation becomes part of maintenance validation.
Copied runtime librariesAPPLY changes the SMP/E target but not necessarily the production execution copy—synchronize explicitly.

7. Backout: know the point at which the simple path disappears

  • Before ACCEPT, SMP/E RESTORE can often back out APPLYed service subject to SYSMOD relationships and product rules. After ACCEPT, the distribution baseline has moved; the recovery approach is different.
  • Configuration/data migrations made alongside a PTF can be more difficult to reverse than the code itself. Backout therefore includes datasets, PARMLIB, RACF, database schema and runtime configuration—not just SMP/E.
  • For a PE PTF already active in production, follow IBM/vendor corrective guidance rather than assuming a blind RESTORE is always the safest action.

8. Maintenance evidence I would retain

  • Current and target FMID/service baseline.
  • APAR/PTF list and business/reliability/security reason for change.
  • Enhanced HOLDDATA date and FIXCAT/SOURCEID selection.
  • APPLY CHECK output and HOLD/requisite decisions.
  • APPLY output plus runtime activation evidence.
  • Functional validation, regression result and ACCEPT/backout status.
03 · Planning & Implementing a z/OS Product Upgrade DEEP GUIDE

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.

BaselineTarget / CompatibilityStrategyBuild TargetMigrateCutoverStabilize / Retire

1. Capture the current state before designing the target

  • Installed release/FMID/service level and how the running product proves that level.
  • Target/DLIB/runtime datasets, zFS trees, STCs, parameters, started-task identities, ports, certificates, automation and monitoring.
  • PARMLIB/PROCLIB/APF/LINKLIST/LPA/subsystem/WLM changes that belong to the product.
  • Persistent data and control repositories: databases, control files, VSAM, logs, configuration repositories, catalogs or license stores.
  • External dependencies and consumers: schedulers, applications, APIs, Db2/CICS/MQ/Java, exits, monitoring and cross-system peers.
  • Known-good validation tests and normal startup/health messages. You need a pre-upgrade definition of “working.”

2. Side-by-side versus in-place upgrade

QuestionSide-by-sideIn-place
Code/runtimeNew release installed into separate libraries/zFS while old stays intact.Existing runtime is changed/replaced directly.
RollbackUsually 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.
TestingAllows pre-cutover startup/testing where licenses/ports/data permit.Testing generally happens inside the outage/change window.
Storage/config complexityRequires parallel HLQs, ports, PROCs, config and sometimes duplicate persistent data.Lower footprint, but greater blast radius.
Best fitMajor 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.

3. Compatibility and coexistence analysis

  • Confirm the target release is supported on the current and planned z/OS release.
  • Check minimum required levels of dependencies and whether an intermediate product release is mandatory.
  • Review coexistence requirements when old/new releases or sysplex members will run together. IBM FIXCAT categories can identify coexistence service for IBM products; ISVs may publish equivalent matrices/PTF lists.
  • Review removed/deprecated functions and changed defaults. A migration can fail because a default changed even when every prerequisite PTF is present.
  • Identify fallback restrictions. Vendor guides often state a point after which fallback is no longer supported without restoring data.

4. Build the target before the outage where possible

  • Install the target release and required maintenance into separate target/runtime libraries or zFS.
  • Build new PROCs and configuration from the new release samples, then port only the site settings you still need. Blindly copying old configuration preserves deprecated parameters.
  • Pre-create RACF profiles, certificates, ports, aliases and automation definitions in disabled/non-disruptive state where possible.
  • Run vendor configuration verification, syntax checks and SMP/E REPORT MISSINGFIX/FIXCAT checks before the implementation window.

5. Dataset and configuration migration

ObjectMigration questions
Configuration datasetsCan old members be copied? Must new samples be merged? Any renamed/removed keywords?
VSAM/control repositoriesIs conversion required? Can old and new releases share it? Is conversion reversible?
Db2/database schemaDDL changes? Bind/rebind? Backward-compatible schema? Backup/restore requirement?
zFSNew home path or in-place update? Ownership/permissions? Persistent data versus replaceable runtime?
Load librariesNew HLQ? STEPLIB versus LINKLIST? APF? copied runtime libraries? LLA refresh?
Certificates/secretsCan the new release use existing keyrings/labels? New algorithms or TLS requirements?

6. Design cutover as a dependency graph

  1. Quiesce incoming work and prove the application/business owners have stopped dependent transactions/jobs.
  2. Take the final backup/export of configuration and persistent data at the point defined by the rollback plan.
  3. Stop the old product in dependency order.
  4. Run migration/conversion jobs and inspect every return code/message.
  5. Switch runtime selection: PROCLIB/STEPLIB, LINKLIST/LPA where required, symbols, PARMLIB, ports, aliases and automation.
  6. Start the target release and verify its own initialization/ready level before releasing consumers.
  7. Bring dependent services back in controlled sequence and run the pre-defined validation pack.
  8. Record the exact time and state at which fallback ceases to be simple or supported.

7. Fallback design: code, configuration and data are separate

A useful fallback plan answers three questions independently:

  • Code: how do I return execution to the old libraries/zFS?
  • Configuration: which PARMLIB/PROC/product members must be restored or reactivated?
  • Persistent data: can old code read what the new release has already written? If not, what backup/export restores the pre-upgrade state?
Critical rule: “Old libraries are still on disk” is not a rollback plan if the new release has converted shared persistent data.

8. Post-upgrade stabilization

  • Verify product version/service from runtime evidence, not dataset names.
  • Compare startup messages, CPU/storage/I/O, log volume and health checks with pre-upgrade baseline.
  • Run batch, online, API, security, recovery and monitoring tests that cover real integration points.
  • Leave old release libraries/configuration protected and inactive until the agreed rollback period closes.
  • Only then transition into the decommission workflow: remove old APF/LINKLIST/LPA references, STCs, profiles, datasets, zFS and licenses.
04 · Software Currency, EOS & z/OS Compatibility Assessment DEEP GUIDE

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.

DiscoverNormalize ProductProve VersionLifecycle Evidencez/OS CompatibilityRequired ServiceRemediation Roadmap

1. Practical problem: how do I identify the installed product version?

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 sourceWhat it can proveLimitations
SMP/E CSI / FMIDsInstalled 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 commandThe release the running address space believes it is executing.Not every product has one; output may omit maintenance level.
Startup/job log messagesOften 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 metadataLink-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/filesUseful 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 reportBroad estate discovery and candidate product/version mapping.Requires normalization: features/components may be reported separately from the lifecycle-managed product.
z/OSMF software/CSI servicesCan 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.

2. Normalize product versus feature/component

  • Lifecycle dates normally belong to the vendor's sellable/supportable product/release, not every FMID, feature name or started task found by discovery tooling.
  • Create a mapping such as discovered component → canonical product → release. Keep the raw discovery name as evidence so the normalization can be audited later.
  • Shared runtimes (Java, common services, agents) should be tracked separately when they have their own support lifecycle or target-z/OS requirement.

3. Lifecycle evidence hierarchy

  1. Vendor lifecycle/support portal for GA/EOS/end-of-standard-support/extended support.
  2. Official announcement letters/release notes where lifecycle pages are incomplete.
  3. Vendor compatibility/supported-environment matrix for platform support.
  4. Program directory/installation/upgrade guide for release-specific prerequisites.
  5. Vendor support case/authorized response when no public date exists.

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.

4. Lifecycle terms are vendor-specific—record the exact meaning

Common termWhat to capture
GAWhen the release became generally available.
End of marketing / withdrawalOrdering/sales status; not necessarily the support end date.
EOS / end of standard supportLast date for normal vendor support under the standard lifecycle.
Extended / sustaining supportAvailability, duration and limitations—do not treat it as equivalent to normal support.
Latest releaseNewest GA release, which may not yet be the best immediate upgrade target for a given estate.

5. z/OS compatibility is a two-layer question

For every product against a target z/OS release ask separately:

  1. Is this product release supported on the target z/OS? This is a release-level compatibility question answered by vendor/IBM supported-level tables or matrices.
  2. If the release is supported, what maintenance must be installed? This is a service-level question. For IBM software, enhanced HOLDDATA/FIXCAT and REPORT MISSINGFIX are central tools.
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.

6. PSP buckets: understand the concept, but use the current method

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.

7. FIXCAT categories in compatibility work

  • 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.

8. Compatibility matrix I would build

ProductInstalledSupport statusTarget z/OS release supportRequired serviceAction
<canonical product><release + evidence>Current / EOS date / unknownSupported / unsupported / vendor validation neededFIXCAT/PTF/vendor listNone / maintain / upgrade / contact vendor

Add source and verification-date columns in the real working repository even if the presentation dashboard hides them.

9. Dependency-aware remediation

  • Upgrade runtimes/common services before the products that depend on them where required.
  • Group products with the same outage/integration dependency rather than ordering work purely by EOS date.
  • Prioritize passed EOS/unsupported target-z/OS items, then near-term EOS, then service-only gaps.
  • Track “vendor confirmation required” as an owned action with evidence—not an indefinite backlog with no next step.
05 · Decommissioning z/OS System Software DEEP GUIDE

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.

Prove No DependencyFreeze / ArchiveStop Entry PointsRemove IntegrationsRemove Software/DataResidual / IPL Proof

1. Build a dependency map before touching the product

  • Business/application owners and replacement service.
  • Started tasks, batch jobs, PROC references, scheduler applications and automation rules.
  • APIs/listeners/ports, Db2/CICS/MQ or other subsystem integrations.
  • Other products that call libraries, exits or services provided by the retiring product.
  • PARMLIB/PROCLIB, APF/LINKLIST/LPA/LLA, subsystem names, exits, WLM classifications and health checks.
  • RACF identities/profiles, USS paths, certificates/keyrings, licensed keys and remote vendor agents.
  • Persistent product data, reports, logs or configuration with legal/audit retention.

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.

2. Decide the retirement model

ModelApproach
Immediate replacementCut consumers to the replacement, leave old product stopped but intact through rollback period, then remove.
Feature absorbed elsewhereProve each old integration/job is removed; often more dependency discovery is needed than for a like-for-like replacement.
Unused productUse observation, scheduler/config searches and owner sign-off to prove non-use before deleting.
License-driven urgent removalSeparate “stop usage by entitlement date” from physical cleanup; execution can be disabled before final archival/deletion.

3. Freeze and archive before destructive actions

  • Capture final installed release/service, FMIDs/CSI ownership and runtime path.
  • Archive configuration, PROCs, startup parameters, licenses/keys, important reports and required business data.
  • Record the last successful use and replacement validation.
  • Define how long the old libraries/data remain restorable and who can authorize rollback.

4. Remove execution paths before deleting software

  1. Stop new scheduled work and disable automation that can restart the product.
  2. Quiesce consumers and stop the product in dependency order.
  3. Disable or remove startup commands/PROCs and verify no automation immediately recreates the address space.
  4. Remove dedicated listener/port/routes and external integrations after consumers are moved.
  5. Observe for failed connection/start attempts—these are useful evidence of dependencies you missed.

5. Remove z/OS integration points systematically

LayerDecommission check
PARMLIB / subsystemRemove product members/references, IEFSSN or component-specific definitions only when no shared dependency remains.
PROCLIB / automationRemove STC procedures, initialization commands, scheduler/automation rules and recovery actions.
APF / LINKLIST / LPA / LLARemove obsolete libraries from active and next-IPL definitions; verify modules are not required by another product.
RACFRetire STARTED identity and product-specific profiles after shared-use review; remove certificate/keyring material only if dedicated.
WLM / monitoringRemove product-specific classification/report classes, health checks, alert rules and dashboards.
NetworkRemove dedicated ports, VIPA/DNS/firewall/AT-TLS definitions and remote endpoint configuration.

6. SMP/E-managed software: do not confuse runtime cleanup with CSI cleanup

  • A site may stop using a product while its FMID remains described in an SMP/E environment for some period. Physical deletion and SMP/E removal are distinct decisions.
  • Follow the product/IBM removal procedure if function deletion, zone cleanup or target/DLIB removal is required. Deleting target libraries while CSI/DDDEF entries still describe them creates an inconsistent maintenance environment.
  • Check whether target/DLIB datasets are shared with other FMIDs before deleting entire libraries.

7. Non-SMP/E product cleanup

  • Remove vendor runtime datasets/zFS only after retention approval and after startup/search paths no longer point at them.
  • Remove product-specific databases/control repositories last; these are often the only source for historical configuration or audit.
  • Clean installation/staging packages and temporary artifacts separately from retained final evidence.

8. Final proof: absence must survive restart and IPL

  • Search enterprise JCL/scheduler/automation/PARMLIB/PROCLIB for old STC names, HLQs, subsystem names, ports and module libraries.
  • Check SYSLOG/monitoring after automation refresh and the next relevant IPL for failed attempts to start/reference the retired product.
  • Verify APF/LINKLIST/LPA active state after removal, not only the edited PROGxx member.
  • Confirm software inventory/license repository shows the product as retired and that the replacement business function still passes.
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.

Related technical references

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.

ARTICLE / HARDWARE

z/OS Internals

Mainframe Hardware Architecture

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.

How I picture the machine

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.

Processors and capacity

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.

Memory: central storage is not virtual storage

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.

Channel subsystem and the I/O path

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.

LPARs, HMC and configuration ownership

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.”

What I check when the problem looks physical

  • Scope: one address space, one LPAR, several LPARs on the CPC, or multiple systems using the same external device?
  • CPU: actual CPU delay, logical/physical utilization, caps and recent partition changes.
  • Storage: assigned central storage, paging and whether memory was dynamically changed.
  • I/O: device state, path state, RMF response components and whether affected work shares a control unit or storage group.
  • Recent change: IODF activation, hardware maintenance, HMC profile changes, storage/network maintenance or processor reconfiguration.

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.

IBM reference points

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.

ARTICLE / SYSPLEX

z/OS Internals

Parallel Sysplex & Coupling Facility

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.

Start with the problem Sysplex is solving

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 structures

XCF: membership and signalling

XCF 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.

Coupling Facility structures

A Coupling Facility runs CFCC, normally in an LPAR using ICF processors. Its memory is divided into structures requested by connected applications.

  • Lock structures coordinate ownership and serialization across systems.
  • Cache structures help data-sharing products coordinate cached data and invalidation.
  • List structures hold shared lists, queues and other structured state; System Logger is a common example of a service that can use CF list structures.

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 and policies

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.

Defining and changing CFRM safely

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.

Format the CFRM couple data set — example
//CFRMCDS  EXEC PGM=IXCL1DSU
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  DEFINEDS SYSPLEX(YOURPLEX) TYPE(CFRM)
            DSN(YOURHLQ.CFRM.PRIMARY) VOLSER(VOL001)
/*
Define a CFRM policy — example
//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)
/*
Activate and verify the policy
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.

Failure and rebuild behaviour

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 sequence I use for problem isolation

  1. Confirm sysplex membership and whether every system sees the same topology.
  2. Check XCF signalling paths and groups if cross-system functions are slow.
  3. Check CF availability and the specific affected structure.
  4. Identify connectors and the owning subsystem.
  5. Check CFRM/LOGR policy and couple-data-set state.
  6. Correlate with hardware/channel, CPU and subsystem messages before taking SETXCF recovery action.

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.

IBM reference points

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.

ARTICLE / DATASETS

z/OS Internals

Working with z/OS Data Sets

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.

A data set is more than a file name

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.

PS, PDS and PDSE

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.

DCB attributes and why mismatches hurt

  • RECFM defines record format: fixed, variable, blocked variants and so on.
  • LRECL defines logical record length.
  • BLKSIZE controls physical blocking; BLKSIZE=0 normally lets the system choose an efficient value.
  • DSORG identifies the organization.

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, extents and DASD placement

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.

Catalog, VTOC and VVDS

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

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

GDGs

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.

Naming and system libraries

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.

My allocation / failure checklist

  1. Confirm the exact data-set name and whether GDG/symbol resolution changes it.
  2. Check LISTCAT and the owning catalog/alias.
  3. Check volume/storage-group availability and free space.
  4. Check DISP, organization and DCB compatibility.
  5. Check RACF access.
  6. Check ENQ/GRS contention if allocation/open hangs.
  7. For VSAM, separate catalog metadata from VVDS/VTOC and physical components before repair.

That sequence keeps me from using IDCAMS ALTER/DELETE/RECATALOG as trial-and-error commands.

IBM reference points

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.

ARTICLE / PROGSEARCH

z/OS Internals

Program Load Order, LPA, LINKLIST, LLA & APF

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.

The two questions I keep separate

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.

Default search order

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.

LPA

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 and LLA

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

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 and dynamic changes

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

How I diagnose S806

  1. Capture the exact module name from the failure message.
  2. Check STEPLIB/JOBLIB/TASKLIB in the failing job or started task.
  3. Check LINKLIST and LPA for the module.
  4. Confirm the intended library is cataloged/available and the member actually exists.
  5. Check whether the wrong procedure, symbol or environment selected an old library.

S806 is a search/fetch problem first. APF only enters the investigation if the eventual failure is about authorization.

How I diagnose a wrong-level module

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.

IBM reference points

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.

ARTICLE / ABENDS

z/OS Internals

Common JCL & Batch Abend Codes

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.

The abend code is the start, not the answer

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.

What I collect first

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

Program checks: 0C1, 0C4, 0C7

  • 0C1 generally means an operation exception: the CPU tried to execute something that is not a valid instruction in that context. Wrong branch addresses, bad module levels or overwritten code are common investigation directions.
  • 0C4 is a protection/addressing family. I look at the reason, PSW and registers to see what address was referenced and why that storage was not accessible.
  • 0C7 is a data exception, commonly invalid packed/zoned numeric data being used as numeric input. I trace the failing instruction and data field rather than simply blaming “bad data.”

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.

Space abends: B37, D37 and E37

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 and resource failures

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>)

Cancel, time and output-limit failures

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.

Security and data-set access

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.

Before I change anything

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.

IBM reference points

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.

ARTICLE / UTILITIES

z/OS Internals

IBM Utility Programs

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.

Why I treat utility choice as part of the design

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.

IEFBR14: allocation and deletion through DD statements

//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.

IEBGENER: sequential copy/generation

//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.

IEBCOPY: PDS/PDSE libraries

//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.

IDCAMS: catalog and VSAM administration

//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.

DFSMSdss / ADRDSSU

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.

Batch TSO/E: IKJEFT1B

//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.

Sysplex utilities: IXCL1DSU and IXCMIAPU

//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 and UNIX utilities

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

The rule I use before running a utility

  • Know whether the utility is reading, copying, allocating, deleting or changing metadata.
  • Know the serialization and restart behaviour if the target is in use.
  • Preserve LISTCAT/report output before structural changes.
  • For system objects—catalogs, couple data sets, SMF, APF libraries—follow the component’s recovery procedure rather than improvising with a familiar utility.

IBM reference points

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.

ARTICLE / IPL

z/OS Internals

Shutdown of z/OS & Initial Program Load (IPL)

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.

IPL is a configuration event, not just a restart

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.

From hardware LOAD to z/OS initialization

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.

IPL types and why they matter

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.

A controlled shutdown

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.

What I validate after IPL

  1. Identity/configuration: IPLINFO, intended SYSRES/load parameters, active PARMLIB and system symbols.
  2. Core services: master, JES2, security manager, SMS/catalog availability.
  3. Sysplex: XCF membership, couple data sets, CF structures and Logger.
  4. UNIX/network: OMVS, zFS mounts, TCP/IP/VTAM and required listeners.
  5. Program configuration: APF, LINKLIST, LPA/LLA and product runtime libraries.
  6. Operations evidence: SMF recording, dump settings, outstanding WTORs and health-check exceptions.
  7. Applications: critical STCs reach their ready state—not merely show ACTIVE.
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

What usually goes wrong

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.

IBM reference points

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.

ARTICLE / SMPE

z/OS Internals

SMP/E — Software Installation & Maintenance

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.

What SMP/E is really buying me

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.

CSI zones and libraries

  • Global zone: information shared across the SMP/E environment, including received SYSMOD information and pointers to target/DLIB zones.
  • Target zone: describes the installed target-system elements and service level.
  • DLIB zone: describes distribution libraries—the base from which target libraries can be built/reconstructed according to product design.

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.

SYSMODs and service vocabulary

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.

The RECEIVE → APPLY → ACCEPT model

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.

Runtime activation is separate

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.

How I investigate SMP/E problems

  1. Identify the FMID/SYSMOD and correct target zone.
  2. Run/check RECEIVE and APPLY CHECK output.
  3. Resolve missing requisites and HOLDDATA.
  4. Check MODID conflicts or local USERMOD exposure.
  5. Confirm target libraries and CSI agree after APPLY.
  6. Perform the documented runtime activation.
  7. Validate the product before ACCEPT.

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.

IBM reference points

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.

ARTICLE / SMF

z/OS Internals

System Management Facilities (SMF)

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.

Why I care about SMF

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.

Record selection and SMFPRMxx

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

Traditional MAN data sets

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

How I expect MAN data-set offload to be automated

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.

Typical SMFPRMxx idea — preserve the rest of the site's exit list
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 log-stream recording

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.

Record families I commonly look for

  • Type 0: IPL information.
  • 14/15/17/18: selected data-set open/close/scratch/rename activity, depending on object and configuration.
  • 30: job/step accounting and resource usage.
  • 70–79: RMF performance families.
  • 80: RACF audit activity.
  • 89: software product usage.
  • 92: z/OS UNIX file-system activity.
  • 99: WLM/SRM information.
  • 100–102: Db2 families; 110 is widely used by CICS monitoring/statistics.

I always verify subtypes. Modern consumers frequently need a particular subtype, not just “type 30” or “type 80.”

RMF, SCRT and other consumers

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.

When expected records are missing

  1. Confirm the system and exact time range.
  2. Check active SMF configuration and TYPE/NOTYPE/subsystem selection.
  3. Check exits that may suppress or alter recording.
  4. Check whether the system uses MAN data sets or log streams.
  5. Verify the writer/offload path was healthy during the window.
  6. Inspect actual records to confirm the type/subtype is absent—not merely missing from one report.

The distinction I make is simple: not selected, not recorded, not offloaded and not reported are four different failures.

IBM reference points

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.

ARTICLE / SYSLOG

z/OS Internals

SYSLOG, OPERLOG & Console Hardcopy

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.

Why I treat console logging as infrastructure

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.

The hardcopy message set comes first

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.

The displays I start with
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.

Activate SYSLOG as a hardcopy medium when site procedure requires it
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.

What SYSLOG actually is

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.

How SYSLOG rotates — and what WRITELOG really does

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.

Force the current log to be queued and start a new one
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.

External writer: getting queued SYSLOG out of JES spool

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.

Example external-writer procedure for SYSLOG class L
//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)
Start the writer defined by the site procedure
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.

SYSLOG versus OPERLOG

AreaSYSLOGOPERLOG
ScopeOne z/OS systemConsole traffic from participating systems in the sysplex
Storage modelSYSOUT data set on JES spoolSystem Logger log stream
Operational concernRotation, SYSOUT class, writer/output retention and spoolLogger/log-stream connectivity, retention/offload and sysplex availability
When I reach for itLPAR-specific command/message history and classic SDSF SYSLOG workflowOne 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.

What I check when console history is missing

  1. Was the message supposed to be in the hardcopy set? Check D CONSOLES,HARDCOPY, routing/command-level criteria and whether SYSLOG/OPERLOG was active at the time.
  2. Did SYSLOG rotate? Search for IEE043I and WRITELOG-related messages around the period.
  3. Where was the closed log queued? Identify the SYSOUT class and inspect JES output status.
  4. Was the writer/archive path running? Check the external writer or whatever product/automation owns the class.
  5. Was the data retained long enough? Output can be processed successfully and still be useless if the archive/GDG retention does not cover the period being investigated.
  6. If the site uses OPERLOG, is Logger healthy? Treat missing OPERLOG data as a System Logger/log-stream problem, not a JES-spool problem.

Commands I keep close

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.

IBM reference points

I use the installed z/OS release documentation for command syntax and writer details because console/JES standards differ by site.

ARTICLE / WLM

z/OS Internals

Workload Management (WLM)

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.

What WLM is actually trying to do

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

Classification comes first

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.

Service classes, periods, goals and importance

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

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.

Delay analysis is the diagnostic step

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.

  • CPU delay: check LPAR capacity/capping, processor contention and whether higher-importance work is legitimately winning.
  • I/O delay: check devices/storage path and workload I/O pattern.
  • ENQ delay: find the holder through GRS.
  • Storage delay: examine paging/real-storage pressure rather than changing WLM first.

If the service class has poor PI but CPU is not the dominant delay, changing importance may simply move the symptom.

Enclaves, report classes and resource groups

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.

Useful displays

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.

The sequence I use for a “WLM issue”

  1. Identify the actual affected work and service class/period.
  2. Confirm classification.
  3. Check goal, importance and PI.
  4. Read the dominant delay.
  5. Check LPAR cap/capacity if CPU delay dominates.
  6. Only then consider whether the policy is wrong.

A WLM policy change is shared-resource redistribution. I want a clear hypothesis and rollback before I activate one during a live performance incident.

IBM reference points

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.

ARTICLE / DUMPS

z/OS Internals

z/OS Dump Services

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 only useful if it captures the failing state

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.

Common dump mechanisms

  • SYSUDUMP / SYSABEND: traditional job-step abend dumps written through DD statements. SYSABEND contains more system-oriented information than SYSUDUMP.
  • SYSMDUMP: machine-readable dump intended for IPCS-style analysis, commonly used for address-space debugging.
  • SVC dump: system dump service used by z/OS components/products and operator requests; can capture multiple address spaces and system storage.
  • Transaction dumps: middleware-specific dump facilities such as those provided by transaction managers; scope/content is controlled by the subsystem.
  • SNAP: application/program-requested snapshot output.
  • Stand-alone dump: separate IPLable dump program used when the system is too damaged for normal dump services.

JCL dump DD examples

SYSUDUMP — formatted dump to SYSOUT
//STEP2    EXEC PGM=A
//SYSUDUMP DD SYSOUT=*
SYSABEND — formatted dump to a data set
//STEP1    EXEC PGM=PROGRAM1
//SYSABEND DD DSN=YOURHLQ.SYSABEND,
//            DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
//            SPACE=(CYL,(50,10))
SYSMDUMP — unformatted dump for IPCS
//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 and SLIP

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

Why “a dump was requested” can still mean “no dump exists”

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, CHNGDUMP and SLIP are different controls

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.

IPCS starting workflow

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.

What I preserve for escalation

  • Dump data set name, title, system and timestamp.
  • Abend/reason/module and failing job/STC.
  • Messages showing whether DAE or dump-mode controls were involved.
  • SLIP/trace settings active at capture time.
  • Software level and recent maintenance.

A dump without the failure context can become a very expensive binary file that nobody can reproduce.

IBM reference points

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.

ARTICLE / DAE

z/OS Internals · Dump Services

DAE - Dump Analysis and Elimination

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.

Why DAE exists

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 rules

MATCH, UPDATE and SUPPRESS are separate ideas

MATCH 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.

ADYSETxx configuration

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.

Temporary control

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.

Shared DAE history in a sysplex

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  DAE

The DAE data set and history

The 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'

My flow when an STC abends but no dump appears

  1. Confirm what dump type the product was expected to request.
  2. Search SYSLOG for dump/DAE messages and the exact symptom.
  3. Check DAE history for a match.
  4. Check D DUMP,OPTIONS / CHNGDUMP state.
  5. Check available dump data sets/resources.
  6. If support needs a fresh duplicate, change the narrowest DAE setting or use the approved targeted method.
  7. Restore normal suppression immediately after capture.

DAE vs CHNGDUMP vs SLIP

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

14. Reference points

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.
ARTICLE / TRACES

z/OS Internals

z/OS Traces

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.

Tracing is about sequence, dumps are about state

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

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

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

Component trace (CTRACE)

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.

GTF

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

Transaction and product traces

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.

GFS and storage-oriented tracing

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.

How I choose a trace

  • Need CPU/system event sequence from a dump: system trace.
  • Need message sequence: master trace.
  • Need one z/OS component’s internals: CTRACE.
  • Need a GTF-producing component/application: GTF.
  • Need middleware transaction internals: product transaction trace.

Collection discipline

  1. Write down the exact symptom and reproduction window.
  2. Record current trace state.
  3. Enable only the requested component/classes.
  4. Reproduce once if safe.
  5. Stop/restore the previous setting immediately.
  6. Preserve trace data with system/product level and exact timestamps.
  7. Format with the component-appropriate IPCS/product tool.

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.

IBM reference points

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.

ARTICLE / DR

z/OS Internals

Disaster Recovery Process

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.

DR is a recovery operating model

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.

Dependency map before the test

Before a DR exercise I want a dependency map covering:

  • SYSRES and system volumes.
  • Master/user catalogs and SMS configuration.
  • PARMLIB, PROCLIB, APF/LINKLIST/LPA libraries.
  • Sysplex couple data sets and Coupling Facility structures.
  • System Logger/SMF resources.
  • RACF/security databases, certificates and cryptographic dependencies.
  • TCP/IP/VTAM, DNS/VIPA/load-balancer changes.
  • Product databases, zFS filesystems and application data.

If one of those layers is missing, an LPAR can IPL successfully and still be unusable.

Storage and data consistency

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.

Hardware and LPAR preparation

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.

Controlled bring-up sequence

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.

Validation

  • System identity, IPL configuration and active PARMLIB are correct.
  • Catalogs, volumes and SMS allocation work.
  • XCF/CF/CFRM/LOGR resources are healthy.
  • OMVS/zFS mounts are correct and writable where expected.
  • Network paths/listeners resolve to DR endpoints.
  • RACF/security and certificates work.
  • Critical applications complete functional transactions, not just START successfully.
  • SMF, dumps, monitoring and automation are active so the DR environment is supportable.

Stand-alone dump readiness belongs in DR

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 / go-home

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.

IBM reference points

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.

ARTICLE / SAD

z/OS Internals

Stand-Alone Dump (SADMP)

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.

What SADMP is for

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.

Release compatibility

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.

Residence program versus output data set

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.

Sizing the output

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.

Allocate and initialize the output

//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.

Generate the residence program

//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.

HMC and console readiness

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.

Sysplex partitioning and SSD

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)

Running SADMP

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.

COPYDUMP after z/OS is back

//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.

Clear and re-arm

//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.

Readiness checklist

  • Residence program level matches the active z/OS release.
  • Residence volume/profile is still IPLable.
  • Console/input path is known and tested.
  • Output capacity matches current LPAR storage.
  • Output volumes/data set are initialized and accessible.
  • Sysplex partitioning/SSD procedure is understood.
  • COPYDUMP job is tested.
  • Operations and DR documentation contains the exact procedure.

IBM reference points

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

Sysprog Tools

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

Date → day of year

Reverse

Day of year → date

Date range

3390 geometry

Raw capacity converter

Planning

Whole-track / cylinder allocation

Raw 3390 geometry is not a DCB-aware record-capacity calculation; usable record capacity depends on the actual block/record layout.

Fixed models

3390 / MOD reference

Identify

Match geometry

Enter a track or cylinder count

ISHELL / df values

Block-size calculator

Headroom

Growth planner

Section 5

Utilities & AI Agents

Practical tooling I build around z/OS work: the zDIAG diagnostic suite and utility roadmap first, followed by AI-assisted lifecycle and operations experiments.

AVAILABLE

zDIAG Diagnostic Suite

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.

zDIAG ISPF batch suite panel showing JOBDIAG, JES2DIAG, CPUDIAG, LONGDIAG, STORDIAG, ENQDIAG, ASIDDIAG, XCFDIAG, ZFSDIAG and LOGRDIAG
zDIAG ISPF front end — one panel for selecting and submitting the diagnostic utilities.

zDIAG Utilities

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.
Utility / focusStatus
zDIAG Batch SuiteISPF front end + batch-submission packagePACKAGE

What it is

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.

Package contents

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.

JOBDIAGJES2 resource / spool shortage diagnosticUTILITY

What it is

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.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

CPUDIAGCPU / system performanceUTILITY

What it is

Samples CPU-related indicators and summarizes system and address-space activity to distinguish sustained CPU pressure from short spikes or waits.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

STORDIAGStorage / virtual-storage pressureUTILITY

What it is

Collects real/auxiliary and virtual-storage indicators, including the SDSF VMAP view where available, and flags likely storage-pressure conditions.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

ENQDIAGGRS / ENQ contentionUTILITY

What it is

Collects GRS contention and dependency information, identifies holders/requesters and presents the wait chain with suggested diagnostic commands.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

ASIDDIAGASID availability / growthUTILITY

What it is

Summarizes FREEASID/MAXASID and active-address-space indicators to help distinguish normal concurrency from an ASID shortage or leak pattern.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

LONGDIAGLong-running job analysisUTILITY

What it is

Takes a named long-running job and collects SDSF/job-state evidence to distinguish active processing, waiting, contention and other likely delay causes.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

ZFSDIAGzFS full / growth / extent analysisUTILITY

What it is

Analyzes a zFS by name or path, checks fullness/growth constraints and surfaces relevant zFS commands and likely resolution paths.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

XCFDIAGSysplex / XCF healthUTILITY

What it is

Collects XCF system, group, path and structure information and turns the raw displays into a sysplex-health report.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

JES2DIAGJES2 subsystem / internal health diagnosticUTILITY

What it is

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.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

LOGRDIAGSystem Logger / log-stream healthUTILITY

What it is

Reports log-stream type, CF/DASD configuration, offload/staging state and common directory/offload/allocation shortage indicators.

Install

  1. Download the CRLF REXX source.
  2. Upload/copy it into a site-approved SYSPROC or SYSEXEC library.
  3. Keep the supplied README with any required SDSF/console authorization notes.

Use

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.

Downloads

STCDIAGStarted-task hang / unresponsive triageIN DEVELOPMENT

What it is

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.

Planned package

IPLCHCKPre/post-IPL configuration capture and comparisonIN DEVELOPMENT

What it is

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.

Planned coverage

PARMLIB/PROCLIB inventory, APF/LINKLIST/LPA state, critical STCs, XCF/Logger/OMVS/TCPIP/SMF checks and pre/post comparison.

Planned package

HLTHCHKRoutine z/OS health snapshot and exception summaryIN DEVELOPMENT

What it is

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.

Planned coverage

CPU/capacity, spool/JES2 resources, CSA/ECSA indicators, ASIDs, WTORs, IBM Health Checker exceptions, OMVS mounts and offload/service health.

Planned package

SADCHKStand-alone dump readiness and SADMP volume/configuration checksIN DEVELOPMENT

What it is

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.

Planned coverage

SADMP configuration, eligible dump volumes, device/volume checks, page/SYSRES conflicts, protection rules and readiness exceptions.

Planned package

AI Agents & Automation

AVAILABLE

zProduct Lifecycle Agent

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.

UNDER DEVELOPMENT

Next skills in development

  • EOS Intelligence Framework / Skill — intended to help system programmers keep installed-version, latest-release and EOS/EOL information current using evidence-backed vendor lifecycle sources, verification dates and explicit unknown/unconfirmed states.
  • z/OSMF Workflow Skill — intended to translate appropriate lifecycle plans into guided z/OSMF workflow structures so repeatable installation, maintenance and upgrade activities can move from static plan text toward controlled executable workflows.
UNDER DEVELOPMENT

zAssistant

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.