We have had the capability of having multiple generations of data sets on z/OS for years.
For example with three generations you can have
- the current data set
- the one before that
- and the one before that.
If you create a new data set the oldest gets deleted, and they all move along one.
This has been around for years.
What I found recently was you can have this with members within a V2 PDSE (not a PDS) since 2015.
System wide set up
When you create the data set, the number of generations is limited by MAXGENS_LIMIT in the IGDSMSxx member of PARMLIB.
Use the command
D SMS,OPTIONS
This displays information like
ACDS = SYS1.S0W1.ACDS
COMMDS = SYS1.S0W1.COMMDS
ACDS LEVEL = z/OS V3.1
SMS PARMLIB MEMBER NAME = IGDSMS00
...
HONOR_DSNTYPE_PDSE = NO PDSE_VERSION = 2
USER_ACSVAR = ( , , ) BYPASS_CLUSTER_PREFERENCING = NO
USE_MOST_FREE_SPACE = NO MAXGENS_LIMIT = 0
To change the value of MAXGENS_LIMIT you need to change the parmlib member and use T SMS=nn (or just wait till the next IPL).
I used Which parmlib/proclib library has my member? to find the member and added
MAXGENS_LIMIT(3)
I then used
set sms=00
to activate it
Using the support
For example to allocate a dataset to support this.
Example JCL
//SAM00001 DD DISP=(NEW,CATLG),DSN=IBMUSER.TEST1.PDSE00,
// DSNTYPE=(LIBRARY,2),LRECL=80,BLKSIZE=8000,RECFM=FB,
// MAXGENS=3
Where
- dsntype=(LIBRARY,2) says this a LIBRARY ( also known as PDSE) type 2
- MAXGENS=3 this will support up to 3 generation
Using ISPF
This works in z/OS 3.1, I do not know if earlier releases have the ISPF support.
I used ISPF 3.2 and specified
──────────────────────────────────────────────────────────────────────────────
Allocate New Data Set
Command ===>
Data Set Name . . . : COLIN.PDSE2
Management class . . . (Blank for default management class)
...
Data set name type LIBRARY (LIBRARY, PDS, LARGE, BASIC, *
EXTREQ, EXTPREF or blank)
Data set version . : 2
Num of generations : 3
Extended Attributes (NO, OPT or blank)
Expiration date . . . (YY/MM/DD, YYYY/MM/DD
YY.DDD, YYYY.DDD in Julian form
DDDD for retention period in days
or blank)
I then edited a member, saved it, and then reedited it several times.
ISPF 3;4 member list gave
DSLIST COLIN.PDSE2 Row 0000001 of 0000001
Command ===> Scroll ===> CSR
Name Prompt Size Created Changed ID
_________ AA 2 2025/11/09 2025/11/09 09:22:35 COLIN
Using the line command b to browse the data set showed the latest content.
Using the line command N gave me
GENLIST (AA)COLIN.PDSE2 Row 0000001 of 0000004
Command ===> Scroll ===> CSR
RGEN Prompt Size Created Changed ID
_ 00000000 5 2025/11/09 2025/11/09 09:31:44 COLIN
_ 00000001 4 2025/11/09 2025/11/09 09:31:32 COLIN
_ 00000002 3 2025/11/09 2025/11/09 09:31:17 COLIN
_ 00000003 2 2025/11/09 2025/11/09 09:22:35 COLIN
There is
- (AA)COLIN.PDSE2 showing member AA of data set ( library) COLIN.PDSE2
- RGEN showing the generations
- Generation 3 is the oldest
In the line command you can type / which lists all of the valid commands
Action for Generation 0
Generation Action
1. Edit
2. View
3. Browse
4. Delete
5. Info
6. Print
Prompt Action . . (For prompt field)
Select a choice and press ENTER to continue
Info gave me
Menu Functions Confirm Utilities Help
─────────────────────────────────────────────
EDIT USER.Z31B.PARMLIB
. . . . . . . . . . . . . . .
Member Informat
Command ===>
Data Set Name . . . : COLIN.PDSE2
General Data
Member name . . . . . . . . : AA
Concatenation number . . . . : 1
Version . Modification . . . : 01.07
...
Non-current Generations
Maximum . . . . : 3
Saved . . . . . : 3
Newest Absolute : 7
Oldest Absolute : 5
See Version and modification level numbers. You can use the commands
To set these values
Deleting a member
Using the D line command against the oldest member gave the prompt
Confirm Member Generation Delete
Data Set Name:
COLIN.PDSE2
Member Name:
AA
Generation to be Deleted:
-3
__Set member generation delete confirmation off
Only the specified generation will be deleted.
Press ENTER to confirm delete.
Press CANCEL or EXIT to cancel delete.
Editing a member
When you edit a member the screen is like
File Edit Edit_Settings Menu Utilities Compilers Test Help
────────────────────────────────────────────────────────────────────
EDIT COLIN.PDSE2(AA) - 01.04
Command ===>
****** ********************************* Top of Data ***************
000100 ddd
000200 bbbb
000300 44444
with the version. release at the top.
This is really cool! I think this should be the default for important/frequently modified libraries.
Unfortunately, you can’t reference previous versions of a member within JCL like you can with sequential GDG data sets. But it’s still pretty useful as a reference/versioning.
For anybody else looking for more info on this, here are the SHARE conference slides from 2015 about the topic; https://share.confex.com/share/125/webprogram/Handout/Session17831/SHARE%20Using%20Member%20Generations.pdf
LikeLike