DFSMS Storage Class
DFSMS, z/OS System Managed Storage - Storage Class
Storage classes perform three functions. They decide if data should be SMS managed or not, they decide what level of performance a file should have, and they decide if you can override SMS and place data on specific volumes. A storage class can also define whether or not a dataset can use concurrent copy for instant backups.
Identifying Non-SMS files
If you don't want a file to be SMS managed, then you simply arrange for it to get a null storage class as in the example below.
IF &DSN=SYS1.* THEN DO SET &STORCLAS = ''
There are occasions when you, as a storage administrator, want to a file to
be non-SMS managed. Systems Programmers probably need that access too,
but you don't want everyone to be able to do this.
There is an easy way to control this. Put all the dataset patterns that you never want SMS managed into an NONSMS filtlist, then advise trusted users that they can specify a 'NONSMS' storage class for other datasets they want to allocate outside SMS. Then code at the front of the storclas ACS routine
IF &DSN = &NONSMS THEN SET &STORCLAS = ' IF &STORCLAS = 'NONSMS' THEN SET &STORCLAS = ''
The first line checks file names against a non-SMS list, the second line checks for a user specifically requesting a non-SMS storage class. N.B. you do not define a NONSMS storage class in ISMF to deal with this, the NONSMS storage class is just a dummy name which is changed to null by the ACS routine. If you want to ensure that only authorised users can make a file non-SMS, then just combine this with an authorised user list as below.
Specifically placing data
This is the other side of the coin. You want a dataset to be SMS managed, but
you want to place it onto a specific disk. A good example, is the FDRABR
initialisation dataset, which must go on the correct disk. You do this
by using an SMS construct called 'guaranteed space'.
When you define a storage class in ISMF, you will see a parameter
Guaranteed Space . . . . . . . . . N
You change the pre filled 'N' to a 'Y', and SMS will not guarantee you any space, but it will guarantee to give you the volume you ask for. Its your responsibility to check that the space is there.
This is a powerful facility which lets you override all SMS control. I suggest
you restrict it to a controlled set of users, using the following.
Define a storage class called something like GSPACE, which has the guaranteed space attribute set to 'Y', and define a Filtlist which contains explicit users who can override SMS, or pattern masks of users that can override SMS, if you RACF naming standards let you do this.
FILTLIST AUTH-USER INCLUDE( SM*, SP*, 'user1', 'user2') ..... more filtlists IF (&user = '&AUTH-USER' | &STORCLAS = 'GSPACE') THEN DO &STORCLAS = GSPACE EXIT END ... more code, to a default storage class
If you specify a storclass of 'GSPACE', and if you are contained in the list of authorised users, you will get the volume you asked for, otherwise, you drop down to a default value.
This relates to a set of attributes in the SMS storage class ISMF definition
Performance Objectives Direct Millisecond Response . . . . (1 to 999 or blank) Direct Bias . . . . . . . . . . . . (R, W or blank) Sequential Millisecond Response . . (1 to 999 or blank) Sequential Bias . . . . . . . . . . (R, W or blank) Initial Access Response Seconds . . (0 to 9999 or blank) Sustained Data Rate (MB/sec) . . . (0 to 999 or blank)
These definitions are largely ignored for modern DASD, except that IBM ESS
DASD may keep data cache resident for longer, if it has a low response
There is another storage class attribute which can help performance, striping. Striping means taking a file, and arranging for it to be spread over several logical disks, so parts of it can be accessed concurrently. This facility has been pretty much overtaken by PAV aliases and RAID disk . However, if you want to implement it, you do this by defining a striping storage class, with a number between 1 and 999 set for SUSTAINED DATA RATE.
You might only need four storage classes. One for guaranteed space, one for datasets which need to stay cache resident as long as possible, one for concurrent copy files and a default class for everything else. You may want to add a fifth one for striping