Problems I experienced when using /dsfs

I played around with /dsfs and found a couple of problems.

My userid is COLIN.

Data set not seen for a time

I created a data set COLIN.ENCR2.DSN in ISPF (and also in batch).

The command

ls -ltr /dsfs/txt/colin/en*

found the data set /dsfs/txt/colin/encrypt.jcl, but it did not find /dsfs/txt/colin/encr2.dsn.

A while later (a minute or two) it found /dsfs/txt/colin/encr2.dsn . This is because of the DIRECTORY_REFRESH_TIMEOUT that controls it. Its default value is 60. You can dynamically change it via command dsadm config -directory_refresh_timeout <number>. The expected value is a number in the range 30-600.

Encrypted data set not seen

I had set up a data set which was encrypted, and empty. I could not list it using /dsfs

I had to set up an encryption ZFS for DSFS (as the documentation says) for it to be seen. I expected the dataset name to be visible, but not the contents.

Create the label in ICSF

//IBMICSF  JOB 1,MSGCLASS=H 
//STEP10 EXEC PGM=CSFKGUP
// SET CKDS=COLIN.SCSFCKDS
//CSFCKDS DD DISP=OLD,DSN=&CKDS
//* LENGTH(32) GENERATES A 256 BIT KEY
//CSFIN DD *,LRECL=80
ADD TYPE(DATA) ALGORITHM(AES),
LABEL(DSFSAES ) LENGTH(32)
/*
DELETE TYPE(DATA) LABEL(COLINBATCHAES )
//CSFDIAG DD SYSOUT=*,LRECL=133
//CSFKEYS DD SYSOUT=*,LRECL=1044
//CSFSTMNT DD SYSOUT=*,LRECL=80
//* REFRESH THE IN MEMORY DATA
//REFRESH EXEC PGM=CSFEUTIL,PARM='&CKDS,REFRESH'

Give the DSFS userid access to the label

//IBMRACF2 JOB 1,MSGCLASS=H RESTART=S2 
// EXPORT SYMLIST=(*)
// SET KEY=DSFSAES
//S1 EXEC PGM=IKJEFT01,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *,SYMBOLS=(JCLONLY)
RDELETE CSFKEYS &KEY
RDEFINE CSFKEYS &KEY +
ICSF(SYMCPACFWRAP(YES) SYMCPACFRET(YES)) +
UACC(NONE)
PERMIT &KEY +
CLASS(CSFKEYS) ID(DSFS ) +
ACCESS(READ)
SETROPTS RACLIST(CSFKEYS) REFRESH

RLIST CSFKEYS &KEY AUTHUSER ICSF

ADDSD 'COLIN.ZFS.DSFS' UACC(NONE)
ALTDSD 'COLIN.ZFS.DSFS' UACC(NONE) DFP(DATAKEY(&KEY))
/*

Define the ZFS for DSFS

I stopped DSFS using the operator command

f omvs,stoppfs=dsfs

I could then delete and recreate the ZFS. If I wanted to keep the content of the DSFS ZFS, I think I could have using VSAM REPRO to copy the contents to a new file.

//IBMCLUST  JOB 1 
//DEFINE EXEC PGM=IDCAMS,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE COLIN.ZFS.DSFS
DEFINE CLUSTER (NAME(COLIN.ZFS.DSFS) -
VOLUMES(* ) -
CYL(100 1000) -
KEYLABEL(DSFSAES) -
DATACLASS(DCEATTR) -
ZFS )
LISTCAT ENT(COLIN.ZFS.DSFS) ALL
/*

The LISTCAT output had

LISTCAT ENT(COLIN.ZFS.DSFS) ALL                                                                            
CLUSTER ------- COLIN.ZFS.DSFS
...
ENCRYPTIONDATA
DATA SET ENCRYPTION----(YES)
DATA SET KEY LABEL-----DSFSAES

I restarted DSFS.

With the DSFS ZFS encrypted, the ls command for the encrypted data set worked, and I was able to read the content.

When my userid COLIN which had access to the encrypted data set, but not the encryption key, tried to display the contents there were messages on the system log

ICH408I USER(COLIN   ) GROUP(SYS1    ) NAME(####################) 008    
COLINBATCHAES CL(CSFKEYS )
INSUFFICIENT ACCESS AUTot HORITY
ACCESS INTENT(READ ) ACCESS ALLOWED(NONE )
IDFS00338E RACROUTE REQUEST=FASTAUTH call to authorize access to the keylabel COLINBATCHAES
for data set COLIN.ENCR.DSN for user COLIN failed with SAF rc 8 RACF rc 8 Reason Code 0.

and the OMVS session got

cat: /dsfs/txt/colin/encr.dsn: EDC5164I SAF/RACF error.    

It is hard work getting error messages

I got

COLIN:/u: >dsadm config -hlq_list_add SYS1.PARMLIB                                                                                
IDFS00324E Could not add the specified high-level qualifier directory names to the HLQ list, error code 139 reason code ED04618D.

To get the full description of the error I had to use

COLIN:/u: >bpxmtext ED04618D                                                                                                      
DSFS Tue Sep 12 19:21:54 EDT 2023
Description: The caller is not UID 0.

Action: Ensure that you are properly authorized for this operation. This
subcommand requires UID 0 or READ access to the SUPERUSER.FILESYS.PFSCTL
profile in the z/OS UNIXPRIV class.

Where’s the $?

Because the OMVS shell uses $ to replace variables, you have to quote the data set name.

IBMUSER:/u/ibmuser: >ls /dsfs/txt/sys1.proclib/$$$COIBM                           
ls: FSUM6785 File or directory "/dsfs/txt/sys1.proclib/50397215" is not found

You have to use

ls '/dsfs/txt/sys1/parmlib/$$$COIBM'     

with quotes around it, or escape the special characters.

ls /dsfs/t*/sys1/proclib/\$\$\$coibm

Setting up data set file system /dsfs on z/OS

There is a good overview of dsfs here.

The documentation is pretty good. It is clear – but I would have ordered the sections differently.

Concept

My understanding of how dsfs works is that you can access z/OS datasets, members and spool, through a Unix file system interface, and so use commands like “ls”. When you read a member, it is read into the dsfs file system, and the Unix commands work on this data. When you write to the Unix file, it is written to the dsfs file system, and the data is written to the dataset when the file is closed.

Some information is cached in the dsfs file system, and some definitions, such as DCB information on a per userid basis is also stored.

Setup the RACF definitions

//IBMRACFL JOB 1,MSGCLASS=H                                
//S1 EXEC PGM=IKJEFT01,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSTSPRT DD SYSOUT=*
//SYSTSIN DD *
ADDGROUP DSFSGRP SUPGROUP(SYS1)
ADDUSER DSFS DFLTGRP(DSFSGRP) AUTHORITY(USE) UACC(NONE)
RDEFINE STARTED DSFS.** STDATA(USER(DSFS))
SETROPTS RACLIST(STARTED)
SETROPTS RACLIST(STARTED) REFRESH
/*
//

The started task procedure is in IOE.SIOESAMP(DSFS)

You can configure it to use the parmlib concatenation. I configured it to use a member in user….parmlib.

//DSFS     PROC REGSIZE=0M                                            
//*
//DSFSGO EXEC PGM=BPXVCLNY,REGION=&REGSIZE,TIME=1440
//*
//*STEPLIB DD DISP=SHR,DSN=hlq.SIEALNKE <--DSFS LOADLIB
//IDFZPRM DD DISP=SHR,DSN=USER.Z31A.PARMLIB(DSFS) <--DSFS PARM FILE

This is automatically started when you activate the dsfs physical file system (in a bpxprmxx member).

Create the ZFS

If you are going to use encrypted data sets the ZFS needs to be encrypted. See One minute MVS – Using individual data set encryption on z/OS.

I do not know how much space you actually need. If you specify a secondary extent, the ZFS can expand as needed.

If you want the ZFS to be larger than 4GB you need to specify Extended Addressability. On ADCD there is an SMS Data Class DCEATTR with extended attributes.

The documentation talks about having the z/OS image name as part of the data set when part of a sysplex. I specified the name as part of DSFS startup.

If you are using ADCD and you use a “system” HLQ such as ZFS.DSFS, then when you move to the next release of ADCD you’ll have to migrate it. By using COLIN as a HLQ, it gets picked up automatically in the next release after I have imported the user catalog.

//IBMCLUST  JOB 1 
//DEFINE EXEC PGM=IDCAMS,REGION=0M
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE CLUSTER (NAME(COLIN.ZFS.DSFS) -
VOLUMES(* ) -
CYL(100 1000) -
DATACLASS(DCEATTR) -
ZFS )

/*
LISTCAT ENT(COLIN.ZFS.DSFS) ALL
DELETE COLIN.ZFS.DSFS

The ZFS is formatted when it is first used, and as it expands.

Startup parameters

In USER.Z31A.PARMLIB(DSFS), referred to in the DSFS started procedure, I have

* 
UTFS_NAME=COLIN.ZFS.DSFS

Without the UTFS_NAME, it will look for a data set with the image name. If you are running in a sysplex each system needs its own ZFS.

Define the root

In TSO OMVS use mkdir /dsfs

Define the physical file system, and mount the file

I created USER.Z31A.PARMLIB(BPXPRMFS) with

FILESYSTYPE TYPE(DSFS) ENTRYPOINT(IDFFSCM) ASNAME(DSFS)

MOUNT TYPE(DSFS)
MODE(RDWR)
NOAUTOMOVE
MOUNTPOINT('/dsfs')
FILESYSTEM('COLIN.ZFS.DSFS')

Activate and start it

You can use the operator command set omvs=(FS) to activate the member bpxprmfs (defined above). This starts the address space DSFS. You could have this activated as part of IPL in the usual way.

The first time I started DSFS, I got messages

SET OMVS=(FS)                                                         
IEE252I MEMBER BPXPRMFS FOUND IN USER.Z31A.PARMLIB
BPXO032I THE SET OMVS COMMAND WAS SUCCESSFUL.
IEF196I IEF285I USER.Z31A.PARMLIB KEPT
IEF196I IEF285I VOL SER NOS= A3CFG1.
...
$HASP100 DSFS ON STCINRDR
$HASP373 DSFS STARTED
IEF403I DSFS - STARTED - TIME=08.51.23
IDFS00153I DSFS kernel: Initializing z/OS DSFS 279
Version 03.01.00 Service Level OA65531 - HZFS510.
Created on Tue Sep 12 19:21:54 EDT 2023.
Address space asid x47.
IDFS00064I USER.Z31A.PARMLIB(DSFS) is the configuration data set currently in use.
IDFS00352I DSFS is using HLQ EXCLUDE mode.
IDFS00039I DSFS kernel: initialization complete.
BPXF025I FILE SYSTEM COLIN.ZFS.DSFS IS BEING MOUNTED.
IDFS00320I Formatting to 4096 control interval 18000 for primary
IDFS00003I Primary extent loaded successfully for COLIN.ZFS.DSFS.
IDFS00034I Detaching utility file system COLIN.ZFS.DSFS.

Stop dsfs

If you get messages saying data set in use etc, this may be due to the DSFS program has started. You can stop it using f omvs,stoppfs=dsfs, fix any problems, and restart it.

Setting up permissions

Some of the dsadm commands, for example which change the configuration, need permission. The issuer must be logged in as a root user (UID=0) or have READ authority to the
SUPERUSER.FILESYS.PFSCTL resource in the z/OS UNIXPRIV class. Note: If you are permitted READ to the BPX.SUPERUSER resource in the RACF FACILITY class, you can become a UID of 0 by issuing the su command to get uid 0.

PERMIT SUPERUSER.FILESYS.PFSCTL CLASS(UNIXPRIV) ID(userid) ACCESS(READ)
SETROPTS RACLIST(UNIXPRIV) REFRESH

PERMIT BPX.SUPERUSER CLASS(FACILITY) ID(userid) ACCESS(READ)
SETROPTS RACLIST(FACILITY) REFRESH

Once it has started – now what?

In OMVS you can use the ls -ltr command

IBMUSER:/u/ibmuser: >ls -ltr  /dsfs                           
total 0
drwxrwxrwx 2 OMVSKERN SYS1 0 Sep 9 03:51 txt
drwxrwxrwx 2 OMVSKERN SYS1 0 Sep 9 03:51 sysout
drwxrwxrwx 2 OMVSKERN SYS1 0 Sep 9 03:51 rec
drwxrwxrwx 2 OMVSKERN SYS1 0 Sep 9 03:51 bin

You can use the dsfs commands in Unix Services

dsadm fsinfo
File System Name: COLIN.ZFS.DSFS

System: S0W1 Devno: 0
Size: 72000K Free 8K Blocks: 8732
Free 1K Fragments: 7 Log File Size: 2056K
Bitmap Size: 16K Anode Table Size: 8K
File System Objects: 7 Version: 1
Overflow Pages: 0 Overflow HighWater: 0
Space Monitoring: 0,0
ENOSPC Errors: 0 Disk IO Errors: 0
Status: NE,NC

File System Creation Time: Sep 9 03:51:25 2024
Mount Time: Sep 9 03:51:25 2024

Last Grow Time: n/a

Using z/OS health checker is good – but how do I use it?

I had a message on the console saying

HZS0001I CHECK(IBMICSF,ICSF_CLEAR_KEYS): CSFH0056E Clear keys in the CKDS, PKDS, or TKDS were found.

Great – but what next?

In SDSF, you can use the CK command to display the health-checker events.

There were a lot of checks. The SDSF command CK E, displays only those with exceptions; where the result was > 0.

There are various line commands, but SE gives you all of the information, in the ISPF editor.

In the page it told me

CSFH0054I Check for clear keys in the CKDS, PKDS, and TKDS. 
Active TKDS: COLIN.SCSFTKDS
-----------------------------------------------------
PKISRVD.PKITOKEN 00000001T
Explanation: ...
System Action: ...
Operator Response: ...
System Programmer Response: ...

Great – this is very useful. However the action “Contact the ICSF administrator” is not very helpful as I am the ICSF administrator!

Where is my z/OS started task output?

I was trying to resolve problems with a started task, and the output kept disappearing.

The JES2 class had been defined so it purged the JES2 output if the job ended cleanly

$DJOBCLASS('STC'),OUTDISP 

gave me

$HASP837 JOBCLASS(STC)       OUTDISP=(PURGE,HOLD) 

This says, if the job ends normally then purge the JES2 related datasets.

I needed

$T JOBCLASS(STC),OUTDISP=(Keep,keep)

to keep the JES2 related datasets around. This command should be remembered across warm starts of JES2.

With $HASP837 JOBCLASS(STC) OUTDISP=(KEEP,HOLD) the spool files in the output are

DDNAME   StepName ProcStep C Dest 
JESMSGLG JES2 K LOCAL
JESJCL JES2 K LOCAL
JESYSMSG JES2 K LOCAL

CFGPRINT TCPIP K LOCAL
SYSOUT TCPIP H LOCAL
SYSERROR TCPIP K LOCAL

With $HASP837 JOBCLASS(STC) OUTDISP=(PURGE,HOLD) the spool files in the output are

DDNAME   StepName ProcStep C Dest 
SYSOUT TCPIP H LOCAL
SYSERROR TCPIP K LOCAL
CFGPRINT TCPIP K LOCAL

where the JES* files have been purged.

If your job does not provide any output, then when the JES* files are purged, there will be no trace of the job in the spool.

Why can’t I see WordPress draft pages in firefox?

I kept getting Oops! That page can’t be found.

This had me stumped for weeks, until I found the answer. It is to do with Enhanced Tracking Protection. This stops one tab from seeing information in a different tab. Without this, a tab could peek at the cookies in other tabs,and pass the information to snooping applications.

See What to do if a site seems broken.

  • Visit the website.
  • At the left of the address bar, click the Fx89ShieldIcon shield icon.
  • At the top right of the panel, toggle off the Enhanced Tracking Protection switch Fx91ETPbluetoggle. The site will be added to your Enhanced Tracking Protection exception list, allowing trackers on it, and the page will reload automatically.

What sites have this enabled?

With Firefox in the URL use about:preferences#privacy . It displays “Trackers follow you around..”. Click on Manage Exceptions, and you can display and specify the web sites that have the Enhanced Tracking Protection turned off.

I have a list including

Migrating an ADCD z/OS release to the next release.

With traditional z/OS you upgrade products one at a time. For example, you use one release of CICS, install the next release of CICS, and check it works. You then roll it out to all z/OS images. You take the next product and repeat it.

With z/OS you create a new IPL image, using all of the old components, such as master catalog, page sets etc, do a test IPL and resolve any problems.

With ADCD you have one complete system for example with system data sets on volumes beginning with D4, and the next “release” has volumes beginning with D5. It is not just a matter of IPLing the new system because your data, and any configuration you did will not be on the new system.

In this post, I’ll cover some of the steps you need to take to be able to run on a newer level of ADCD. The list will not be complete or detailed enough, so please let me have any suggestion and comments to improve it.

What to you need to think about?

There is a series of pre-requisites that are needed in the migration process.

My initial thoughts list is

  • Define the zPTD devmap configuration file with the new disks, so the new and old systems can see all of the DASD volumes
  • In any old configuration you want to use, change explicit volumes to their symbolic volume. The operator command D SYMBOLS gives you the symbol names. For example change ….Z24C… to …&SYSVER… This means it will pick up the current level which ever system you have IPLed
  • Import any user catalogs
  • Define the alias for COLIN.* data sets into the new master catalog. You can now use COLIN.* data sets from the new system.
  • Use your old RACF database, or make a copy for the new system to use
  • Copy system Unix files. For example in /etc/. It is easiest to backup and restore them
  • Copy user Unix files. If you have a ZFS for all your files, this may be as simple as mounting it on the newer system. If you have files in the system provided file system, you will have to backup and restore them, or move them to your ‘user ZFS’.
  • Copy across your members in USER.* members. it is worth reviewing these and deleting old ones which are not used. I compared the USER.old.parmlib members with the ADCD.old.parmlib member to see what changes I had made. 
  • Once you IPL the new system it will use your new members
  • Copy across ICSF definitions
  • Check out all started tasks.

First steps

You need to copy data sets and files from the old system to the new system, for example user.z24c.proclib to user.z25d.proclib. It is easiest to have the volumes from both systems available to the z24 and z25 systems.

The user.z24c.proclib will be cataloged on the z24 system, and the user.z25d.proclib will be cataloged on the z25 system, so you’ll need to cross catalog the data sets. These configuration data sets will be on the xxCFG1 volume, so you can use ISPF 3.4, specify the volume and use the ‘C’ line command to catalog the datasets so they can be seen on both systems.

User data – for example all my RACF define jobs are in a PDS under COLIN. These are in a user catalog which can be imported into the newer system.

You need to create an alias in the master catalog

DEFINE ALIAS (NAME(COLIN ) RELATE('A4USR1.ICFCAT') )

With this, I can now refer to COLIN.* data sets from the older system.

Detailed instructions

TCPIP

I had to change the TCPIP Resolver (of IP names and addresses).

In ADCD.Z31A.TCPPARMS(GBLTDATA) I changed the commented LOOKUP statement. Then I stopped and restarted the RESOLVER. Without this change requests to lookup caused 30 second delays.

; LOOKUP DNS LOCAL 
; Colin's change 
  LOOKUP     LOCAL 

Using the RACF DDS server I got messages

ICH420I PROGRAM GPMDDSRV FROM LIBRARY SYS1.SERBLNKE CAUSED THE
ENVIRONMENT TO BECOME UNCONTROLLED.

I also needed to do the RACF commands

RALTER PROGRAM * ADDMEM('SYS1.SERBLNKE'//NOPADCHK)
RALTER PROGRAM * ADDMEM('SYS1.SGRBLINK'//NOPADCHK)
SETROPTS WHEN(PROGRAM) REFRESH

Save and copy /etc

Migrating an ADCD z/OS release: user data sets, user catalogs and High Level Qualifier

Start here:Migrating an ADCD z/OS release to the next release.

I have covered datasets, aliases and catalogs in One minute mvs: catalogs and datasets.

If your master catalog is a mess

If you have your personal data sets in the master catalog instead of a user catalog, see Here’s another nice mess I’ve gotten into!

You could start again on the new system and do it properly.

Note down which volumes your data sets are on. On the new system define a user catalog and alias, and use ISPF 3.4, to list the contents of the volume and use the C local command to catalog the data set.

I found the easiest way of doing VSAM datasets is a backup and restore

If you have a user catalog for your user data sets

You need to get a list of the user aliases in the master catalog on the old system, and the user catalogs the aliases refer to, before trying to import them into the new system. I could not find a way to list the master catalog from another system. See here for example JCL

To access your data sets in a user catalog you need to import the catalog into the master catalog on the new system, and define the aliases for your data to the catalog.

On your new system, you will not have immediate access to your data sets, so you either need

  • to access a dataset, and specify the volser information,
  • or you need to have a copy of the JCL to import a user catalog, and define alias, stored in a note pad area outside of z/OS. Edit a member such as USER.*.PROCLIB(TEMP) and paste the import catalog JCL. When that has worked, paste in the add alias to your datasets ( COLIN.*). Once you have done this, you can use ISPF 3.4 and use COLIN.* to locate your data sets.

Once you have your list of aliases and user catalogs, you can IPL the new system and import the user catalogs, and define the aliases.

Product data sets

There is usually an alias in the master catalog for a program product. The alias may have the product release as part of the name. If you have customised any of the product owned datasets, you may need to copy the data off.

Migrating an ADCD z/OS release: datasets

Start here:Migrating an ADCD z/OS release to the next release.

What to you need to think about?

ADCD provided data sets you may have changed

This should only be USER.*.* data sets, but you may have updated ADCD data sets. You should copy any changes into the USER.*. data sets. On the new system, you can copy this to the newer (and empty) USER.*.* data sets.

Some of the data sets I updated are

  • USER.Z24C.PARMLIB
  • USER.Z24C.PROCLIB
  • USER.Z24C.CLIST
  • USER.Z24C.SYSEXEC
  • USER.Z24C.TCPPARMS
  • USER.Z24C.VTAMLST
  • ADCD.Z24C.PARMLIB(JES*)
  • ADCD.Z24C.TCPPARMS. I should have create a copy of the TCPIP procedure in USER.Z24C.PROCLIB, and changed ADCD.Z24C.TCPPARMS to USER.Z24C.TCPPARMS

You can use ISPF 3.4 to display the contents of a PDS, and use sort changed or tab to the Changed column and press enter. Check the date and userid.

If you haven’t changed the ADCD.* members, compare the old and new, and change your USER.* to incorporate any changes if necessary. You can use the ISPF editor command “compare” to show you the differences between members.

User data

I have a lot of data sets with a high level qualifier of COLIN. Fortunately I set up an IDCAMS alias so all COLIN.** data sets were cataloged in a user catalog. On the new system, I just have to import the catalog.

If you did not set up a user catalog for your personal data sets.

You could set up a user catalog on the old system, set up an alias such as COLIN1, then rename all COLIN.* to COLIN1. On the new system you import the user catalog, and define the alias COLIN1. Set up a new user catalog, and a new alias, then copy/rename the data set from COLIN1 to COLIN.

Migrating an ADCD z/OS release: VSAM files

Start here:Migrating an ADCD z/OS release to the next release.

It is not very easy to copy VSAM files from one system to another.

Backup

You can backup files, including VSAM files using DFDSS, DUMP DATASET command

//IBMDFDSS JOB 1,MSGCLASS=H 
// SET BACKUP=COLIN.BACKUP.CSF
//SDE EXEC PGM=IEFBR14,REGION=0M
//TARGET DD DSN=&BACKUP,DISP=(MOD,DELETE),
// SPACE=(CYL,(1,1))

//S1 EXEC PGM=ADRDSSU,REGION=0M
//TARGET DD DSN=&BACKUP,DISP=(MOD,CATLG),
// SPACE=(CYL,(50,50),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DUMP -
DATASET(INCLUDE(CSF.CSFCKDS.NEW, -
CSF.CSFPKDS.NEW, -
CSF.CSFTKDS.NEW ) -
BY(DSCHA,EQ,1)) -
RESET -
OUTDDNAME(TARGET) -
COMPRESS
/*
  • If you specify REGION=0M,PARM=’TYPRUN=SCAN’ it will check the syntax of the commands without executing them.
  • You can use BY(DSCHA… to do incremental backups – so backup what has changed. It is the data-set-changed flag is on or off.

The DSCHA,EQ,1To perform incremental backups with DFSMSdss, you can filter with
BY(DSCHA,EQ,1) to dump only data sets that have changed since the last dump was taken. If you also code the RESET keyword, DFSMSdss changes the data-set-changed indicator (DSCHA) after successfully dumping the data set. For more information about the RESET keyword

The RESET says if the dump was successful, reset the data-set-changed flag to off.

The output was

ADR101I TASKID 001 HAS BEEN ASSIGNED TO COMMAND 'DUMP '
ADR109I 2024.002 12:04:53 INITIAL SCAN OF USER CONTROL STATEMENTS COMPLETED
ADR016I RACF LOGGING OPTION IN EFFECT FOR THIS TASK
ADR006I 2024.002 12:04:53 EXECUTION BEGINS
ADR788I PROCESSING COMPLETED FOR CLUSTER CSF.CSFCKDS.NEW, 1 RECORD(S) PROCESSED, REASON 0
ADR788I PROCESSING COMPLETED FOR CLUSTER CSF.CSFPKDS.NEW, 6 RECORD(S) PROCESSED, REASON 0
ADR788I PROCESSING COMPLETED FOR CLUSTER CSF.CSFTKDS.NEW, 987 RECORD(S) PROCESSED, REASON 0
ADR801I 2024.002 12:04:53 DATA SET FILTERING IS COMPLETE. 3 OF 3 DATA SETS WERE SELECTED:
  0 FAILED SERIALIZATION
  AND 0 FAILED FOR OTHER REASONS
ADR454I THE FOLLOWING DATA SETS WERE SUCCESSFULLY PROCESSED
  CLUSTER NAME CSF.CSFCKDS.NEW
  CATALOG NAME CATALOG.Z24C.MASTER
  COMPONENT NAME CSF.CSFCKDS.NEW.DATA
  COMPONENT NAME CSF.CSFCKDS.NEW.INDEX
CLUSTER NAME CSF.CSFPKDS.NEW
  CATALOG NAME CATALOG.Z24C.MASTER
  COMPONENT NAME CSF.CSFPKDS.NEW.DATA
  COMPONENT NAME CSF.CSFPKDS.NEW.INDEX
CLUSTER NAME CSF.CSFTKDS.NEW
  CATALOG NAME CATALOG.Z24C.MASTER
COMPONENT NAME CSF.CSFTKDS.NEW.DATA
COMPONENT NAME CSF.CSFTKDS.NEW.INDEX
ADR006I 2024.002 12:04:53 EXECUTION ENDS
ADR013I 2024.002 12:04:53 TASK COMPLETED WITH RETURN CODE 0000
ADR012I 2024.002 12:04:53 DFSMSDSS PROCESSING COMPLETE. HIGHEST RETURN CODE IS 0000

When I reran the job I got

ADR383W DATA SET CSF.CSFCKDS.NEW NOT SELECTED, 01                               
ADR383W DATA SET CSF.CSFPKDS.NEW NOT SELECTED, 01
ADR383W DATA SET CSF.CSFTKDS.NEW NOT SELECTED, 01
ADR415W NO DATA SETS WERE COPIED, DUMPED, OR RESTORED FROM ANY VOLUME
ADR006I 2024.002 12:28:48 EXECUTION ENDS
ADR013I 2024.002 12:28:48 TASK COMPLETED WITH RETURN CODE 0004

Where ADR383W reason code 1 is

The data set was not selected due to the following reason (reason_code):
01 The fully qualified data set name did not pass the INCLUDE, EXCLUDE, and/or BY filtering criteria.

because the VSAM file had not been changed since the previous backup.

To always backup remove the reset and BY() statement

DUMP  - 
DATASET(INCLUDE(CSF.CSFCKDS.NEW, -
CSF.CSFPKDS.NEW, -
CSF.CSFTKDS.NEW ) -
) -
OUTDDNAME(TARGET) -
COMPRESS

Restore

The RESTORE command has many parameters

//IBMDFDSS JOB 1,MSGCLASS=H 
//S1 EXEC PGM=ADRDSSU,REGION=0M,PARM='TYPRUN=NORUN'
//TARGET DD DSN=COLIN.BACKUP.CSF,DISP=SHR
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
RESTORE -
RENAME(COLINN) -
DATASET(INCLUDE(**) ) -
INDDNAME(TARGET)
/*
  • If you specify TYPRUN=NORUN, it will list what datasets would be restored – to allow you to check. Remove TYPRUN=NORUN to execute and restore the data.
  • The RENAME says replace the HLQ with COLINN. This way you do not overwrite any existing data sets.

The output of the job was

ADR489I (001)-TDLOG(02), CLUSTER COLINN.CSFCKDS.NEW WAS SELECTED                   
CATALOG CATALOG.Z24C.MASTER
COMPONENT COLINN.CSFCKDS.NEW.DATA
COMPONENT COLINN.CSFCKDS.NEW.INDEX
ADR489I (001)-TDLOG(02), CLUSTER COLINN.CSFPKDS.NEW WAS SELECTED
CATALOG CATALOG.Z24C.MASTER
COMPONENT COLINN.CSFPKDS.NEW.DATA
COMPONENT COLINN.CSFPKDS.NEW.INDEX
ADR489I (001)-TDLOG(02), CLUSTER COLINN.CSFTKDS.NEW WAS SELECTED
CATALOG CATALOG.Z24C.MASTER
COMPONENT COLINN.CSFTKDS.NEW.DATA
COMPONENT COLINN.CSFTKDS.NEW.INDEX
ADR040I (001)-TDLOG(01), PROCESSING BYPASSED DUE TO NORUN OPTION

Without TYPRUN=NORUN, the output was like

ADR711I DATA SET CSF.CSFPKDS.NEW HAS BEEN ALLOCATED WITH NEWNAME COLINN.CSFPKDS.NEW 
USING STORCLAS SCBASE, NO DATACLAS, AND NO MGMTCLAS
ADR788I PROCESSING COMPLETED FOR CLUSTER CSF.CSFPKDS.NEW, 6 RECORD(S) PROCESSED

When I reran the restore job I got

ADR380E DATA SET CSF.CSFCKDS.NEW NOT PROCESSED, 37

where code 37 means

The new name specified with RENAME or RENAMEUNCONDITIONAL already exists on the volume and the REPLACEUNCONDITIONAL keyword was not specified. The REPLACE keyword cannot be used to replace a data set that is being renamed.

Migrating an ADCD z/OS release to the next release: ICSF

Start here:Migrating an ADCD z/OS release to the next release.

Depending on your setup, migrating ICSF to a newer level can be trivial.

With my original ADCD system, it had ICSF set up to use data sets like CSF.CSFCKDS. When I moved to a new level of ADCD, there were the same data set names.

I backed up the datasets, and restored them on the new system with a new name

//IBMDFDSS JOB 1,MSGCLASS=H 
// SET BACKUP=COLIN.CSF.Z24C.BACKUP
//SDE EXEC PGM=IEFBR14,REGION=0M
//TARGET DD DSN=&BACKUP,DISP=(MOD,DELETE),
// SPACE=(CYL,(1,1))
//S1 EXEC PGM=ADRDSSU,REGION=0M
//TARGET DD DSN=&BACKUP,DISP=(MOD,CATLG),
// SPACE=(CYL,(50,50),RLSE)
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DUMP -
DATASET(INCLUDE(CSF.SCSFCKDS, -
CSF.SCSFPKDS, -
CSF.SCSFTKDS )-
) -
OUTDDNAME(TARGET) -
COMPRESS
/*

I restored them on the same system using

//IBMDFDSS JOB 1,MSGCLASS=H                           
//S1 EXEC PGM=ADRDSSU,REGION=0M PARM='TYPRUN=NORUN'
//TARGET DD DISP=SHR,DSN=COLIN.CSF.Z24C.BACKUP
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
RESTORE -
DATASET(INCLUDE(**) ) -
RENAME(COLIN ) -
INDDNAME(TARGET)
/*

I now had data sets like COLIN.SCSFPKDS.

Remember to change your backup processes to backup the new data sets.

The default CSF procedure is

//CSF PROC 
//CSF EXEC PGM=CSFINIT,REGION=0M,TIME=1440,MEMLIMIT=NOLIMIT
//CSFPARM DD DSN=ADCD.&SYSVER..PARMLIB(CSFPRM00),DISP=SHR

Which does not easily allow you to override it. In USER…PROCLIB(CSF) I created

//CSF  PROC PRM=CP 
//CSF EXEC PGM=CSFINIT,PARM=&PRM,REGION=0M,TIME=1440,MEMLIMIT=NOLIMIT

and in USER….PARMLIB(CSFPRMCP) created

CKDSN(COLIN.SCSFCKDS) 
PKDSN(COLIN.SCSFPKDS)
TKDSN(COLIN.SCSFTKDS)
DOMAIN(0)
COMPAT(NO)
SSM(NO)
CHECKAUTH(NO)
CTRACE(CTICSF00)
USERPARM(USERPARM)
REASONCODES(ICSF) f

Compared to the ADCD provided member, my member has

  • Different dataset names
  • A TKDSN dataset
  • DOMAIN(0)

Creating a TKDS

As part of my use of ICSF tokens for certificates I had to create a TKDS.

I used Steps to create the TKDS, using data set name COLIN.SCSFTKDS.

Don’t forget to add it to your list of data sets to backup regularly.

Starting ICSF

With the ADCD system you start ICSF using the operator command S CSF or S CSF,PRM=xx .

From ISPF go to option 6 TSO and use the @ICSF command