PL/I provides support for three types of VSAM data sets:
These correspond roughly to PL/I indexed, consecutive, and regional data set organizations, respectively. They are all ordered, and they can all have keys associated with their records. Both sequential and keyed access are possible with all three types.
Although only key-sequenced data sets have keys as part of their logical records, keyed access is also possible for entry-sequenced data sets (using relative-byte addresses) and relative record data sets (using relative record numbers).
All VSAM data sets are held on direct access storage devices, and a virtual storage operating system is required to use them.
The physical organization of VSAM data sets differs from those used by other access methods. VSAM does not use the concept of blocking, and, except for relative record data sets, records need not be of a fixed length. In data sets with VSAM organization, the data items are arranged in control intervals, which are in turn arranged in control areas. For processing purposes, the data items within a control interval are arranged in logical records. A control interval can contain one or more logical records, and a logical record can span two or more control intervals. Concern about blocking factors and record length is largely removed by VSAM, although records cannot exceed the maximum specified size. VSAM allows access to the control intervals, but this type of access is not supported by PL/I.
VSAM data sets can have two types of indexes—prime and alternate. A prime index is the index to a KSDS that is established when you define a data set; it always exists and can be the only index for a KSDS. You can have one or more alternate indexes on a KSDS or an ESDS. Defining an alternate index for an ESDS enables you to treat the ESDS, in general, as a KSDS. An alternate index on a KSDS enables a field in the logical record different from that in the prime index to be used as the key field. Alternate indexes can be either nonunique, in which duplicate keys are allowed, or unique, in which they are not. The prime index can never have duplicate keys.
Any change in a data set that has alternate indexes must be reflected in all the indexes if they are to remain useful. This activity is known as index upgrade, and is done by VSAM for any index in the index upgrade set of the data set. (For a KSDS, the prime index is always a member of the index upgrade set.) However, you must avoid making changes in the data set that would cause duplicate keys in the prime index or in a unique alternate index.
Before using a VSAM data set for the first time, you need to define it to the system with the DEFINE command of Access Method Services, which you can use to completely define the type, structure, and required space of the data set. This command also defines the data set's indexes (together with their key lengths and locations) and the index upgrade set if the data set is a KSDS or has one or more alternate indexes. A VSAM data set is thus "created" by Access Method Services.
The operation of writing the initial data into a newly created VSAM data set is referred to as loading in this publication.
Use the three different types of data sets according to the following purposes:
You can access records in all types of VSAM data sets either directly by means of a key, or sequentially (backward or forward). You can also use a combination of the two ways: Select a starting point with a key and then read forward or backward from that point.
You can create alternate indexes for key-sequenced and entry-sequenced data sets. You can then access your data in many sequences or by one of many keys. For example, you could take a data set held or indexed in order of employee number and index it by name in an alternate index. Then you could access it in alphabetic order, in reverse alphabetic order, or directly using the name as a key. You could also access it in the same kind of combinations by employee number.
Table 25 shows how the same data could be held in the three different types of VSAM data sets and illustrates their respective advantages and disadvantages.
| Data set type | Method of loading | Method of reading | Method of updating | Pros and cons |
|---|---|---|---|---|
| Key-Sequenced | Sequentially in order or prime index which must be unique | KEYED by specifying key of record
in prime index
SEQUENTIAL backward or forward in order of any index Positioning by key followed by sequential reading either backward or forward |
KEYED specifying a unique key in
any index
SEQUENTIAL following positioning by unique key Record deletion allowed Record insertion allowed |
Advantages: Complete
access and updating
Disadvantages: Records must be in order of prime index before loading Uses: For uses where access will be related to key |
| Entry-Sequenced | Sequentially (forward only)
The RBA of each record can be obtained and used as a key |
SEQUENTIAL backward or forward
KEYED using RBA Positioning by key followed by sequential either backward or forward |
New records at end only
Existing records cannot have length changed Record deletion not allowed |
Advantages:
Simple fast creation
No requirement for a unique index Disadvantages: Limited updating facilities Uses: For uses where data will primarily be accessed sequentially |
| Relative Record | Sequentially starting from slot
1
KEYED specifying number of slot Positioning by key followed by sequential writes |
KEYED specifying numbers as key
Sequential forward or backward omitting empty records |
Sequentially starting at a specified
slot and continuing with next slot
Keyed specifying numbers as key Record deletion allowed Record insertion into empty slots allowed |
Advantages:
Speedy access to record by number
Disadvantages: Structure tied to numbering sequences Fixed length records Uses: For use where records will be accessed by number |