For many people SMS is something on z/OS that gets in the way of doing real work, and you find you are trying to work around it. A bit like Clippy on Window.
SMS is System Managed Storage. Before SMS, the systems programmer would be responsible for which data sets go on which volume; how often to backup these data sets, and get annoyed when the z/OS users allocated data sets inefficiently, wasting space and using the wrong data set attributes.
SMS has made the systems programmers job much easier. Instead of having a list of disk volumes which can be used by developers, and a list of volumes reserved for systems people, then telling people which disk to use; SMS allows you to say group these volumes as SYSPROGS, and these volumes as OTHER, and when you allocate a data set the system says “COLIN.*” maps to OTHER; SYS1.* map to SYSPROGS.
You can disks have which are not SMS managed, but these days, most of the disks are SMS managed.
You can also specify rules such as all SYS1.*.PARMLIB get backed up daily – and keep the last 10 copies; and do not backup these temporary files.
The system can also do house keeping and say if these user data sets have not been used for a long period, backup them and move them to slower volumes or tape.
SMS has different “topics”.
A data class is used when creating a data set. It influences the space and data set attributes. You could set up a data class of USERFB80 for user data sets which are Fixed block 80 records. This data class can specify optimum block size to be used, and override any value the user has specified.
A management class provides information about how often it is to be backed up, how long it is to be kept for before automatic deletion, and if it can be compressed or moved out to tape if it has not been used for a period.
A Storage class provides information about which disk volumes to use. You may have some high performing disks, which you want databases to use, and some old spinning disks, for the end users to use.
A storage group is which disks belong to which storage group. For example storage group SGCICS has volumes CICS00 through to CICS1F, storage group SGMQ has volumes SGMQS – MQ0000 through MQ004, and OLD001.
The Automatic Class Selection (ACS) is the magic which says “my datasets get fast disks”; “your data sets get slow disks, and the data sets are migrated out to tape if they haven’t been used for a week”. At a conceptual level it is like
if DSN in “SYS1.**” then STORCLAS = “SGSYS1”
if SIZE > 4052MB then DATACLAS= BIGFILE
When(STORCLAS=”IMS”) then STORGRP = “SGIMS”
When(STORCLAS=”MQ”) then STORGRP=”SGMQ”
When are these visible?
I compiled a C program job. In the JCL output it had
IGD101I SMS ALLOCATED TO DDNAME (SYSLIN )
DSN (SYS22013.T150656.RA000.COLINC3.LOADSET.H01 )
STORCLAS (SCBASE) MGMTCLAS ( ) DATACLAS ( )
VOL SER NOS= VIO
So we can see the storage class used (SGBASE), and the data class, and management class (both not specified).
I’ve run out of space – but there is plenty of space.
I got the following message, and struggled to resolve the problem.
IGD17272I VOLUME SELECTION HAS FAILED FOR INSUFFICIENT SPACE FOR
DATA SET SYS21355.T163955.RA000.COLINMQ.TEMP.H01
JOBNAME (COLINMQ ) STEPNAME (S1 )
PROGNAME (AMATERSE) DDNAME (SYSUT2 )
REQUESTED SPACE QUANTITY = 415019 KB
STORCLAS (SCBASE) MGMTCLAS ( ) DATACLAS ( )
STORGRPS (SGBASE SGEXTEAV SGVIO )
SMS is clearly involved – but how to display more information? You can use ISPF ISMF panels to display information, but sometimes it is easier to use the DISPLAY SMS operator command. For example
What is the status of a volume
d sms,vol(C4USR1) IGD002I DISPLAY SMS VOLUME UNIT MVS SYSTEM= 1 STORGRP NAME C4USR1 0A9B ONRW + SGBASE * LEGEND * . THE STORAGE GROUP OR VOLUME IS NOT DEFINED TO THE SYSTEM + THE STORAGE GROUP OR VOLUME IS ENABLED * - THE STORAGE GROUP OR VOLUME IS DISABLED D THE STORAGE GROUP OR VOLUME IS QUIESCED Q THE STORAGE GROUP OR VOLUME IS DISABLED FOR NEW ALLOCATIONS ONLY
Where the + in the line with the volume is described in the following lines. So the C4USR1 means the volume is enabled for SMS.
ONRW is ONline ReadWrite
What storage groups are defined?
SGBASE POOL +
TOTAL SPACE = 16240MB USAGE% = 91 ALERT% = 0
TRACK-MANAGED SPACE = 16240MB USAGE% = 91 ALERT% = 0
if you want more information
STORGRP TYPE SYSTEM= 1 SGBASE POOL + SPACE INFORMATION: TOTAL SPACE = 16240MB USAGE% = 91 ALERT% = 0 TRACK-MANAGED SPACE = 16240MB USAGE% = 91 ALERT% = 0 VOLUME UNIT MVS SYSTEM= 1 STORGRP NAME C4USR1 0A9B ONRW + SGBASE USER00 0A9C ONRW + SGBASE USER01 + SGBASE USER0A + SGBASE ...
There were lots of volumes defined … but only two were online and available.
SMS Enable/disable volumes
You can disable a volume from SMS using
VOLUME UNIT MVS SYSTEM= 1 STORGRP NAME C4USR1 0A9B ONRW - SGBASE + THE STORAGE GROUP OR VOLUME IS ENABLED - THE STORAGE GROUP OR VOLUME IS DISABLED
The JCL below will allocate a (temporary) data set on volume C4CFG1, and then delete it.
//IBMUSER1 JOB 1,MSGCLASS=H //S1 EXEC PGM=IEFBR14 //DD1 DD DSN=&TEMP,DISP=(NEW,PASS), // SPACE=(CYL,(1,1)),DCB=(LRECL=80,RECFM=FB), // VOL=SER=(C4CFG1), // STORCLAS=SCNOSMS //S2 EXEC PGM=IEFBR14 //DD1 DD DSN=*.S1.DD1,DISP=(OLD,DELETE)
If I removed the STORCLAS=SCNOSMS, the data set was allocated on a different volume C4USR1 with STORCLAS (SCBASE).