VSAM PROGRAMS
Full
· PRINT
VSAM
(VIRTUAL STORAGE ACCESS METHOD)
1.INTRODUCTION TO VSAM
VSAM stands for Virtual Storage Access
Method, is IBM high performance access method which allows you to access files
of different organization such as sequential, indexed, relative record and
linear datasets.
VSAM Introduction
An
ACCESS METHOD is a component of the operating system.
It
is an interface between the application program and the physical operation of
storage devices.
Requirement of an Access Method
–
Applicability to batch and on-line processing.
–
Applicability to different types of access.
–
Central control over creation, access and deletion of
data.
–
Independence
from type of storage devices.
–
Ability to move the same data to a different operating
system ( cross Region & Cross System)
Earlier Access Methods
Access Methods are of two categories: BASIC and QUEUED
– Basic access methods provide the most low-level services for accessing datasets.
Examples of Basic Access Methods are :
– BSAM: Basic Sequential Access Method (for sequential datasets).
– BISAM: Basic Indexed Sequential Access Method (for indexed sequential datasets)
– BDAM: Basic Direct Access Method (for direct access datasets)
Queued access methods provide greater efficiency for sequential access of sequential and indexed sequential datasets.
– When new records are added, a new storage location is calculated. This leads to large gaps between records.
– Space used by a deleted record cannot be recovered unless the file is reorganized.
Examples of Queued Access Methods are:
– QSAM : Queued Sequential Access Method (for sequential datasets)
– QISAM : Queued Indexed Sequential Access Method (for indexed sequential datasets)
– There are no queued access methods for direct datasets.
Features of VSAM
VSAM (Virtual Storage Access Method) is a
high-performance access method used in mainframe operating systems like OS/VS1,
MVS, MVS/XA, DOS/VS etc.
VSAM makes efficient use of the virtual
storage of MVS. Hence the name Virtual Storage Access Method.
VSAM can only manipulate data that resides
on a DASD (Direct Access Storage Device).
VSAM is one coherent file storage system
used to store and retrieve data. It is not a database management system like
IDMS or DB2. It does not provide for relationships among the data.
The existing databases like IMS or DB2 may
be implemented using VSAM.
VSAM is not a programming language. But you
can access VSAM dataset through programming languages like COBOL or PL/I. It is
not a communication system like VTAM or CICS. It has no equivalent for a ‘PDS’
type of file organization.
Advantages of VSAM
Data retrieval is faster because of an
efficiently organized index. The index is small because it uses a key
compression algorithm.
Insertion of records is easy due to embedded
free space in the cluster. However, the free space causes datasets to require
more space on the disk.
Records can be physically deleted and space
occupied by them can be reused without any reorganization.
VSAM datasets can be shared across regions
and systems.
Access Method Services (AMS) commands can be
executed as TSO commands.
Batch and On-line processing is supported.
Provides protection of Data against
unauthorized access through password facility.
Cross-system (MVS & VSE) Compatibility. VSAM datasets can be imported and imported in
MVS and VSE systems.
Device
Independence (Access Via Catalog). The
application programmer need not be concerned with Block size, volume and other
control information, as access to VSAM dataset it always through the Catalog
and all control information are stored in the catalog entry of the dataset.
Datasets can be physically distributed over
various volumes based on key ranges
IDCAMS commands can be included in JCL to
handle VSAM datasets
Disadvantages of VSAM
To allow easy manipulation of records in a dataset, free space must be left in the dataset. This increases the disk space required. However no free space is required for datasets used for read-only purposes.
Integrity of VSAM datasets in cross-region and cross-system sharing must be controlled by the user.
Types of VSAM Datasets
Clusters
VSAM
files are often called clusters. A cluster is the set of catalog entries that
represent a file. A cluster consists of one or two components. All VSAM datasets consist of a data component
in which data records are placed. For KSDS, there is an additional index
component, which contains the indexes used to access records in the data
component. ESDS RRDS and LDS have data component only and no index component
VSAM
clusters are categorized into 4 types b
ased on the way records are stored and
accessed.
ESDS Entry Sequenced dataset.
In an ESDS, records are stored in the order
in which they were entered.
New records are always added at the end of
the dataset (Append).
Records can be of Fixed or Variable length.
Records can be accessed sequentially because
An ESDS has no unique key-field.
Random access is possible using the Relative
Byte Address (RBA) of the record. The RBA of the record is the number of bytes
in the file before the beginning of that record.
Records can be updated in place but the
record length cannot be changed.
Records cannot be physically deleted.
Physically an ESDS is stored as only one
component.
RRDS Relative
record dataset.
An RRDS is a series of continuous
fixed-length slots. Each slot may or may not contain a record. Each slot is
identified by its position relative to the first slot in the dataset.
This relative position is called the
Relative Record Number (RRN) of the slot.
RRDS records can be inserted, retrieved,
updated and deleted and Records can be accessed sequentially and randomly.
RRDS records are of fixed length. When a record is deleted, the
slot remains empty till a new record is inserted in it. The new record will
have the same RRN as the record deleted.
RRDS is not suitable for applications which
leave many slots empty as this wastes storage space.
KSDS Key Sequenced dataset.
These datasets are stored in sequence of
some key field in the record. The data component and index component are
separated. The keys are stored in a separate index and records are accessed
through the index. Individual records
can be accessed randomly on the basis of the record key. Locating the record is
a two stage process.
- First search for the key in the index
- Use the information in the index to locate the record.
LDS Linear
dataset.
An LDS has no logical record structure. It
does not contain control information required by VSAM to organize a dataset
into logical records.
The absence of such control information
allows very high access speed It is mostly used by DB2.
These datasets consist of a stream of bytes
which are accessed and written as 4k blocks accessed
by Relative Byte Address
VSAM history
VSAM was introducted in 1973. This version
had only Entry Sequence Datasets and Key Sequenced Datasets. In 1975 Relative Record Datasets and alternate
indexes for KSDS was added. In 1979 DF/EF VSAM was introduced with Integrated
Catalog Facility (ICF).
DFP/VSAM Ver 1 was introduced in 1987 to run
under the MVS/XA architecture. DFP/VSAM version 2 introduced Linear Datasets (LDS)
DFP/VSAM version 3 was introduced to run
under MVS/ESA architecture.
In 1991 version 3.3 supported
variable-length records for RRDS.
2.VSAM Catalogs
VSAM
is totally catalog-driven. Catalogs are special purpose files residing
on DASD (Direct Access Storage Device) serving as a central repository for
information about all datasets under its control.
There are two types of catalogs used
- Master catalog
- User catalog
There’s only one Master catalog per system.
The entries in the master catalog may point to VSAM or non-VSAM dataset, user
catalogs, system datasets or other objects.
User catalogs contain same type of
information as master catalog. All user catalogs must be cataloged into master
catalog.
Access to a dataset can only be made through
a master or user catalog. Therefore all
VSAM datasets have to be cataloged. Non-VSAM datasets can also be cataloged.
Catalogs are protected by RACF.
Vsam catalog
Catalogs maintain the following information
- Name and physical location of datasets
- password information required to access protected datasets
- Statistics about datasets Example No. of records added, read, deleted or no. of Control Interval/Control Area splits
- Information about dataset itself Example ESDS, KSDS, RRDS, CSIZE, KEYLENGTH
- Location of catalog recovery area
ICF ( Integrated Catalog Facility)
The
relatively permanent and temporary parts of the information are stored separately.
The
part of the catalog storing stable information is called the Basic Catalog
Structure (BCS). It was physically stored as a single KSDS and the volatile
information is stored in several VVDS (VSAM Volume DataSets).
Each
volume having VSAM datasets has a VVDS on it. A VVDS is physically an ESDS. A
VVDS has a standard name: SYS1.VVDS.Vxxx where xxx is the volume label of that volume.
Vsam records
VSAM records can be fixed or variable
length. Records can also be spanned across the CI.
Vsam space allocation
VSAM space allocation depends on whether the
dataset is cataloged in an ICF or the older VSAM type catalog. For VSAM
datasets cataloged in the newer ICF-type catalogs, dedicated space is allocated
dynamically when the cluster is created with the DEFINE CLUSTER command.
Each VSAM dataset cataloged in an ICF
catalog has its own VTOC entry. These VSAM datasets can have 1 primary and 122
secondary allocation unlike OS dataset which can have only 1 primary and 15 secondary
extends on a volume.
Vsam space management
VSAM maintains detailed information in its
catalogs about DASD space allocated to VSAM files. This allocation information
stored in the catalog is more comprehensive and flexible than the equivalent
information stored for a non-VSAM file in VTOC.
3.Inside VSAM Datasets
Control Interval
A control interval is the unit of data VSAM
transfers between virtual and disk storage. It is similar to the concept of block
size in non-VSAM files. Each control
interval can contain more than one logical record.
The size of CI must be between 512 bytes to
32K. Up to 8K bytes it must be multiple of 512; beyond this it is multiple of
2K. The length of the CI is specified at
file creation time ie. During DEFINE CLUSTER command.
CI is the unit of data that is actually
transmitted when records are read / written
For index component, the size of CI is 512,
1K, 2K or 4K bytes.
A Control Interval consists of records, free
space and control field information as shown below.
Figure 3.1 Contents of Control Interval
In the Control Interval shown above Rec1,
Rec2, Rec3 are records. Free Space is where new records can be inserted.
Figure 3.2 Contents of Control Field
Control Interval Descriptor Field (CIDF) which
is of 4bytes contains information about available space within CI. Record
Descriptor Field (RDF) contains the length of each record and how many adjacent
records are of the same length. There’s one RDF for each record in variable
length records.
There will be only two RDF’s per CI in case
of fixed length files. One RDF specifies the length of the record and the
second RDF specifies how many records are there in the CI. Each RDF is of 3
bytes.
Control Areas
Control Area is a fixed length unit of
contiguous DASD storage. Control Area consists of many Control Intervals and is
VSAM’s internal unit for allocating space within a cluster.
The Control Area size can vary from one
track to one cylinder depending on unit of allocation. There is no way a
Control Area size can be defined. VSAM computes it internally.
CONTROL AREA
Figure 3.3 Control Area
Spanned Records
Spanned records are records larger than the
specified CI size. That is they span more than one CI. So one spanned record
may be stored in several CIs.
Each CI that contains a record segment of a
spanned record has two RDFs. The right RDF gives the length of the segment and
the left gives the update number of the segment. Spanned records can exist only
in ESDS and KSDS.
A CI that contains a record segment of a
spanned record contains no other data. Records can span Control Intervals
but not Control Areas. For KSDS the entire key field of the spanned
record must be in the first Control Interval.
ESDS
ESDS is a sequential dataset. Records are
retrieved in the order in which they are written to the dataset. Additions
are made always at the end of the file. Records can be retrieved randomly by
using RBA (Relative Byte Address). RBA is an indication of how far, in bytes,
each record is displaced from the beginning of the file.
KSDS
In Key Sequenced Datasets logical records
are placed in the dataset in the ascending collating sequence by the key field.
Rules for key
- Key must be unique in a record
- Key must be in same position in each record and key data must be contiguous
- When a new record is added to a dataset it is inserted in its collating sequence by key
A KSDS consists of two components index
component and data component.
DATA Component: - Contains control areas
which in turn contains Control Intervals as shown in below
KSDS Structure
Index Set
Sequence Set
Index Set
|
Sequence Set
|
The first level of index is called a Sequence set.
The Sequence set consists of Primary keys and pointers to the Control
Intervals holding records with these primary keys. The Sequence set
is always in sequential order of the primary keys. The Control Intervals may be
in any order. VSAM uses the Sequence Set to access records in the KSDS
sequentially.
The index component is a separate entity with a different CI
size, a different name and can be stored on a different volume.
Control interval splits can occur in Indexes also
Sequence Set
CI CI CI CI
Index Set
Index
component
Sequence
Set Sequence Set
CA1
CA2
Before Control Interval Split
|
Control Interval
Sequence Set
0
100
200
0
100
200
4. IDCAMS COMMANDS
You can write IDCAMS utility program
- To create VSAM dataset
- To list, examine, print, tune, backup, and export / import VSAM datasets.
The IDCAMS utility can be in
voked in batch mode with JCL or interactively with TSO
commands. With JCL you can print / display datasets and system messages and
return codes. Multiple commands can be coded per job. You can use IF-THEN-ELSE
statement to execute command/s selectively based on condition codes returned by
previous commands.
Listed
below are the IDCAMS commands.
· DEFINE
· MODAL COMMANDS
Ø IF
Ø SET
Ø PARM
· BUILDINDEX
· REPRO
- PATH
· DELETE
· VERIFY
· IMPORT/EXPORT
· ALTER
· LISTCAT
The example shown below is a skeleton JCL for executing
IDCAMS commands. The PGM parameter specifies that the program to be executed is
IDCAMS utility program. The statements that follow SYSIN DD * are IDCAMS
commands. The end of data is specified by /*.
Optionally JOBCAT and STEPCAT statements may be coded to
indicate catalog names for a job/step, in which concerned dataset may be
cataloged
// jobname JOB (parameters)
// stepname EXEC PGM=IDCAMS
// SYSPRINT DD SYSOUT = *
// ddname DD DSN=datasetname, DISP= SHR/ OLD
//SYSIN DD *
IDCAMS command/s coded freely between 2 to 72 cols.
/*
//
Optionally:
// JOBCAT DD DSN =
catalogname, DISP= SHR
// STEPCAT DD DSN = catalogname, DISP = SHR
Format of IDCAMS command
verb object (parameters)
Every IDCAMS command starts with a verb followed by object
which takes some parameters. In the code given below DEFINE is the verb CLUSTER is the
object which takes a dataset KASSHKU.KSDS.CLUSTER as parameter
DEFINE CLUSTER -
NAME(KASSHKU.KSDS.CLUSTER) -
CYL/TRK/BYTE(5, 1)
-
VOLUMES (BS3013) -
INDEXED -
)
Comments:
Comments in IDCAMS can be specified in the following manner
/* comment */
or
/* -----
*/
IDCAMS return codes
The
IDCAMS Commands return certain codes which have the following interpretation
Condition code:
0 : command executed with no
errors
4 : warning - execution may
go successful
8 : serious error - execution
may fail
12
: serious error - execution impossible
16 : fatal error - job step terminates
The condition codes are stored in
LASTCC/MAXCC. LASTCC stores the condition code for the previous command and
MAXCC stores the maximum code returned by all previous commands. Both LASTCC
and MAXCC contain zero by default at the start of IDCAMS execution. You can
check the condition code of the previous command and direct the flow of
execution or terminate the JCL.
Syntax of IF statement
IF
LASTCC/MAXCC
comparand VALUE -
THEN
-
command
ELSE
Command
Operator(s) are : EQ / NE / GT / LT / GE / LE
Hyphen is required after then to indicate the continuation
of the command on the next line. Comment is assumed as null command. ELSE is
optional. LASTCC and MAXCC values can be changed using the SET command.
Note : LASTCC and MAXCC can also
be set to any
value between
0-16
e.g.
SET LASTCC = 4
Setting MAXCC has no effect on LASTCC. Setting LASTCC
changes the value of MAXCC, if LASTCC is set to a value larger than MAXCC.
Setting MAXCC = 16 terminates the job
.........
REPRO INFILE (INDD) -
OUTFILE (OUTDD)
................
IF LASTCC EQ 0 -
THEN -
PRINT OUTFILE (INDD)
ELSE
PRINT INFILE (OUTDD)
IF MAXCC LT 4 -
THEN -
DO
/* COMMENT */
Command
Command
END
ELSE
Command
DEFINE
CLUSTER
….
IF LASTCC > 0 THEN
SET
MAXCC = 16
ELSE
REPRO
……
Defining an ESDS Cluster
DEFINE CLUSTER
Clusters are created and named with the DEFINE CLUSTER
command.
The NAME parameter
This
is a required positional parameter.
Format : NAME(Cluster-Name)
Cluster
name :- The name to be assigned to the cluster
Example: NAME (kASSHKU.KSDS.CLUSTER)
The cluster Name becomes the dataset name in any JCL that
invokes this cluster either as an input or output
//INPUT
DD DSN=KASSHKU.KSDS.CLUSTER, DISP=SHR
The high-level qualifier is important because in most
installations this technique ensures that VSAM datasets are cataloged in the
appropriate user catalog.
Rules for Naming Cluster
Can have 1 to 44 alphanumeric characters, Can include the
national characters #, @, $.
Segmented into level
of eight or fewer characters, separated by periods
The first character
must be either alphabetic or national character
The SPACE Allocation parameter
The space allocation
parameter specifies space allocation values in the units shown below:
Format :
CYLINDERS(Pri Sec)
TRACKS(Pri
Sec)
RECORDS(Pri
Sec)
KILOBYTES(Pri
Sec)
MEGABYTES(Pri
Sec)
Primary: Number
of units of primary space to allocate. This amount is allocated once when the
dataset is created
Secondary: Number
of units of secondary space to allocate. This amount is allocated a maximum of
122 times as needed during the life of the dataset. VSAM calculates the control
area size for you. A control area size of one cylinder usually yields best
performance. To ensure control area size of one cylinder you must allocate
space in CYLINDERS.
Allocating space in RECORDS must be avoided as this might
result in an inefficient Control Area size.
The VOLUMES parameter
This VOLUMES parameter assigns one or more storage volumes
to your dataset. If Multiple volumes, then it must be of the same device type.
Format :
VOLUMES(volser) or VOLUMES(volser
........ volser)
VOLSER : The 6 digit volume serial number of a volume.
Example :
VOLUMES(BS3011)
VOLUMES(BS3011
BS3040 BS3042)
You can
store the data and index (in case of KSDS clusters) on separate volumes as this
may provide a performance advantage for large dataset
The RECORDSIZE parameter
This parameter tells VSAM what size records to expect. The AVE and MAX are average and maximum values for variable length record. If records are of fixed length, avg and max should be the same.
Format :
RECORDSIZE(avg
max)
AVE: Average length of records
MAX: Maximum length of records
e.g. :
RECORDSIZE(80
80)
[Fixed Length records]
RECORDSIZE(80 120) [Variable Length records]
RECORDSIZE can be assigned at the cluster or
data level
Note :
This is an optional parameter, if omitted default is
RECORDSIZE (4086 4086).
The SPANNED parameter
This parameter allows large record to span more than one
control interval. However records cannot span Control Areas. The resulting free
space in the spanned control interval is unusable by other records, even if
they fit logically in the unused bytes. [NONSPANNED is the default & it
means that records cannot span control intervals.
The DATASET-TYPE parameter
This parameter specifies whether the dataset is INDEXED (KSDS), NONINDEXED(ESDS),
NUMBERED(RRDS), LINEAR(LDS).
Format : INDEXED| NONINDEXED | NUMBERED | LINEAR
INDEXED :- Specifies a KSDS and is
the default.
NONINDEXED :- Specifies an ESDS. No
index is created and records are accessed sequentially or by relative byte
address.
NUMBERED :-
Specifies an RRDS
LINEAR :- Specifies a LINEAR
dataset
//KASSHKU JOB LA2719, SATYA,MSGLEVEL=(1,1),MGCLASS=A,NOTIFY=DA0001T
// * Delete/Define Cluster
for ESDS VSAM Dataset
//STEP1 EXEC
PGM=IDCAMS
// SYSPRINT DD
SYSOUT = *
// SYSIN DD *
DELETE DA0001T.LIB.ESDS.CLUSTER
DEFINE CLUSTER -
(NAME(KASSHKU.ESDS.CLUSTER) -
NONINDEXED -
RECORDSIZE(125 125) -
NONSPANNED -
VOLUMES (BLR01) -
REUSE ) -
DATA(NAME(KASSHKU.ESDS.DATA))
Defining KSDS Cluster
While defining a KSDS Cluster it
is essential to code the DATA, INDEX and KEYS parameter
The DATA parameter
The DATA parameter tells IDCAMS that you are going to create
a separate data component. This parameter is optional for ESDS and RRDS
datasets. You should code the NAME
parameter of DATA for KSDS datasets, in order to operate on the data component
by itself.
Format :
DATA (NAME (dataname) Parameters)
DATANAME :- The name you choose to name the data component
The INDEX parameter
The INDEX
parameter creates a separate index component
Format :
INDEX(NAME(indexname) Parameters)
indexname : The name you
choose to name the index component
INDEX(NAME(DA0004T.LIB.KSDS.INDEX))
When
you code the DATA and INDEX parameters, you usually coda a NAME parameter for
them. If you omit the NAME parameter for DATA and INDEX, VSAM appends .DATA or
.INDEX as the low-level qualifier.
The KEYS parameter
This parameter defines the length and offset of the primary
key in a KSDS record.
The offset is the primary key’s displacement (in bytes) from
the beginning of the record.
Format :
KEYS
(length offset)
LENGTH: length in bytes of the primary key
OFFSET: Offset in bytes of the primary key with records (0 to n)
Example :
KEYS(8 0)
VSAM
records begin in position zero.
Note :
Default is KEYS(64 1) [Key
is in bytes 2 thru 65]
//DA0001TA
JOB LA2719, SATYA,MSGLEVEL=(1,1),
// MGCLASS=A,NOTIFY=DA0001T
// * Delete/Define
Cluster for KSDS VSAM Dataset
//*
//STEP1 EXEC
PGM=IDCAMS
// SYSPRINT DD
SYSOUT=*
// SYSIN DD *
DELETEDA0001T.LIB.KSDS.CLUSTER
DEFINE CLUSTER(
NAME(DA0001T.LIB.KSDS.CLUSTER) -
INDEXED -
KEYS(4 0) -
FSPC(10 20) -
RECORDSIZE(125 125) -
NONSPANNED -
VOLUMES (BS3013) -
NOREUSE
) -
DATA(NAME(DA0001T.LIB.KSDS.DATA)) -
INDEX(NAME(DA0001T.LIB.KSDS.INDEX))
/*
//
The FREESPACE parameter
This FREESPACE parameter, which applies to the KSDS,
allocates some percentage of control interval and control area for planned free
space. This free space can be used for adding new records or for expanding
existing variable records. FREESPACE applies only to the data component
Format :
FREESPACE(%CI %CA)
%CA :-
Percentage of control area to leave free for expansion
Example : FREESPACE(20 10)
Too much free space results in more I / O, especially when
doing sequential processing. Too little results in excessive control interval
and control area split
Note :
Default is FREESPACE(0 0)
The REUSE parameter
The REUSE
parameter specifies that the cluster can be opened a second time as a reusable
cluster. NOREUSE is the default, and specifies the cluster as non-reusable.
Format :
REUSE | NOREUSE
Some application call for temporary dataset or workfile that
must be created, used and deleted each time the application runs. To simplify
these applications, VSAM lets you create reusable files. The reusable file is a
standard VSAM KSDS, ESDS or RRDS. The only difference is that, if you open an
existing reusable file for output processing, VSAM treats the file as it were
empty. Any records already present in the file are ignored.
The CONTROL INTERVAL SIZE parameter
This parameter specifies the Control Interval size. It is
usually abbreviated CISZ.
Format :
CISZ (bytes)
Example :
CISZ (4096)
Note: If omitted VSAM calculates CISZ based on record
size.
Remark : Control Interval is VSAM’s equivalent of a block and it is the unit of data that is actually transmitted when records are read or written.
Guidelines for determining the CISZ
ESDS is processed sequentially, so the CISZ should be
relatively large, depending on the size of the record. For sequential
processing with larger records you may choose a CISZ of 8k.
For datasets processed randomly as well as sequentially (for
backup at night) choose a CISZ for random processing and then allocate extra
buffers for sequential processing with the AMP JCL parameter.
RRDS is usually processed randomly, so the CISZ should be
relatively small, depending on the size of the record.
SHAREOPTIONS
This parameter tells VSAM whether you want to let two or
more jobs to process your file at the same time. It specifies how a VSAM
dataset can be shared
Format :
SHARE OPTIONS(cr value cs value)
CROSS REGION value : Specifies the value for cross
region sharing. Cross region sharing is defined as different jobs running on
the same system using Global Resource Serialization (GRS), a resource control
facility available only under MVS/XA and ESA.
CROSS SYSTEM value : Specifies the value for cross
system sharing means different jobs running on different system in a NONGRS
environment.
Values :-
·
multiple read OR single write
·
multiple read AND single write
·
multiple read AND multiple write
Default :-
SHAREOPTIONS(1 3)
5. LISTCAT
LISTCAT’s basic function is to list information about VSAM
and NONVSAM objects. With LISTCAT you can also view password and security
information, usage statistics, space allocation information, creation and
expiration dates etc.
Format 1:
LISTCAT ENTRIES(entryname) options
Options are :
·
HISTORY
·
VOLUME
·
ALLOCATION
·
ALL
ENTRIES (ENT) requires you to specify each level of
qualification, either explicitly or implicitly, using an asterisk as a wild
card character.
Examples:
LISTCAT
ENT(DA0001T.VSAM.KSDS.CLUSTER) -
CLUSTER
-
ALL -
The above command will only display the base cluster
LISTCAT
ENT(DA0001T.VSAM.KSDS.CLUSTER) -
DATA -
ALL -
The above command will only display the data component
LISTCAT
ENT(DA0001T.VSAM.KSDS.CLUSTER) -
ALL
The above command will display all catalog information.
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD
SYSOUT=*
//SYSIN DD *
LISTCAT
-
ENTRIES(DA0001T.LIB.KSDS.CLUSTER) ALL
/*
Format 2:
LISTCAT LEVEL(level) options
LEVEL by definition lists all lower levels. VSAM assumes
that qualifier to be the high-level qualifier and list every entry with that
high level qualifier .
Example
LISTCAT
LVL(DA0001T.*.KSDS) ALL
The above will list all entries with DA0001T as high level
qualifier , anything in the second-level qualifier and KSDS in the third-level
qualifier . That is it would list DA0001T.ABC.KSDS and
DA0001T.TEST.KSDS.AIX,
DA0001T.TEST.KSDS.DATA .
To execute LISTCAT from TSO prompt
LISTCAT ENTRIES (LIB.KSDS.CLUSTER) ALL
If you analyze the output of the LISTCAT command there is
ALLOCATION information which shows two fields HURBA and HARBA.
High-Used-RBA (HURBA)points to the end of the data.
High-Allocated-RBA (HARBA)is the highest byte that can be used.
HIGH-ALLOC-RBA indicates the Relative Byte Address(plus 1)
of the last allocated data control area. This value reflects the total space
allocation for the data component.
HIGH-USED-RBA indicates the Relative Byte Address(plus 1) of
the last used data control area. This value reflects the portion of the space
allocation that is actually filled with data records.
There are actually to HURBAs one in the VSAM control block of the cluster and one in
the catalog entry for the cluster.
You can write application programs (in COBOL, PL/I Assembler
Language, in CICS) and use the
statements provided by these languages to write and read VSAM datasets
6.Creating Alternate Indexes
An Alternate Index AIX provides a view of data different
from the one offered by the primary key.
For example for a KSDS dataset Employee, you may have a Record Key index
on Employee-no and an Alternate Index on Employee-Name. You can now browse and
even update the same KSDS in logical sequence by Employee-Name.
Alternate Indexes may be defined on one or more than one
Alternate Key(s) i.e. Field(s) other than primary key. Alternate Key(s)
need not be unique. Each alternate index itself is a KSDS with data and index
component.
Alternate Index greatly reduces redundancy. There is no need
to keep a separate dataset for different views like Employees’ Social Security
No. The records may be accessed sequentially or randomly based on the alternate
record keys.
They can be updated automatically when the base cluster is
updated.
Alternate Indexes do not support a reusable base cluster. So
NOREUSE which is the default should be
specified.
Too many Alternate Indexes built on a KSDS may lead to
performance degradation as access by alternate key requires twice as many I/O’s
. VSAM first locates the primary key from the alternate index and then locates
the Control Interval information from the record key index.
For ESDS, VSAM builds AIX
by mapping one field to the record’s RBA.
Steps for defining and building alternate indexes:
DEFINE AIX Command
Define the Alternate Index Cluster using the IDCAMS DEFINE
AIX command.
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT =*
//SYSIN DD *
DEFINE AIX -
(NAME(DA0001T.LIB.KSDS.AUTHNAME.AIX) -
VOLUMES (BS3013) -
RELATE(DA0001T.LIB.KSDS.CLUSTER) -
UPGRADE -
TRACKS(10 1) -
KEYS(25 9) -
RECORDSIZE(70 110) - FREESPACE(20
10) -
SHAREOPTIONS(1) -
NONUNIQUEKEY) -
DATA(NAME(DA000A1T.LIB.KSDS.AUTHNAME.DATA)) -
INDEX(NAME(DA0001T.LIB.KSDS.AUTHNAME.INDEX)
/*
//
Pathname is the dataset name in JCL (DSN=PATHNAME)
RELATE Parameter
Format:
RELATE(base cluster name)
This parameter establishes the relationship between the base
cluster and the alternate index via the use of the base cluster name. It
is unique to the DEFINE AIX command, and it is required.
The RECORDSIZE Parameter
Format:
RECORDSIZE(avg max)
This parameter specifies the average and maximum length of
each alternate index record. There are two types of alternate indexes.
KSDS unique alternate index: You can create a unique alternate index by
specifying the UNIQUEKEY parameter. The records of unique alternate indexes are
of fixed length. The length of a unique alternate index built over a KSDS is
derived as follows:
For example if a unique alternate index on Soc-Sec-No is
built on our KSDS cluster Employee then the RECORDSIZE will be calculated as follows:-
5 Bytes fro HouseKeeping + size of alternate key + Size of Primary Key that the alternate
= 5 + 9 + 8 = 22
Therefore recordsize parameter will be coded as RECORDSIZE(20 20)
KSDS non-unique alternate index: An alternate index created
with a NONUNIQUEKEY parameter has variable length records. The RECORDSIZE is
calculated as follows:-
Avgerage Record length = 5 bytes for House Keeping + size
of the alternate key + size of
the primary key x average no of
records the alternate index key can point to
Maximum Record length = 5 bytes for House Keeping + size
of the alternate key + size of
the primary key x maximum no of
records the alternate index key can point to
DEFINE PATH Command:
Define an Alternate Index Path using the IDCAMS DEFINE PATH
command. The path forms a connection between the alternate index and the base
cluster. Path name becomes a catalog entry but path does not contain any
records. The path name is specified in the JCL for applications that access
records via the alternate index.
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT =*
//SYSIN DD
*
DEFINE
PATH -
NAME(DA0001T.LIB.KSDS.AUTHNAME.PATH) -
PATHENTRY(DA0001T.LIB.KSDS.AUTHNAME.AIX) -
UPDATE -
)
/*
//
UPDATE vs NOUPDATE
Records may be accessed by applications by the alternate
index path alone, without opening the base cluster. In such cases any changes
made to data will be reflected in the alternate index records if the UPDATE
option is specified. If NOUPDATE is specified then the alternate index records
will not be automatically updated.
UPGRADE vs. NOUPGRADE
The UPDATE/NOUPDATE option of DEFINE PATH works in tandem
with the UPGRADE / NOUPGRADE of the DEFINE AIX command.
UPGRADE specifies that any changes made in the base cluster
records will be reflected immediately in the alternate index records if the
base cluster is opened in the application. Fortunately UPGRADE and UPDATE are
defaults for their respective commands.
Building Alternate Indexes
The final step in creating an alternate index is to actually
build and populate it with records.
The BLDINDEX command does the following:
- The data component of the base cluster is read sequentially and pairs of key pointers are extracted. These pairs consist of the alternate key field and its corresponding primary key field. VSAM creates a temporary file with these records.
- This temporary file is sorted in ascending alternate key sequence.
- If NONUNIQUEKEY option is specified then a merge operation takes place, which will merge all records with the same alternate key into a single record.
- These records are the data component of the Alternate Index. VSAM now constructs the index component just as it does for the KSDS.
Note: The Alternate Index can be built only after the base
cluster has been both defined and loaded with atleast 1 record.
//STEP1 EXEC PG=IDCAMS
//SYSPRINT DD SYSOUT =*
//DD1 DD
DSN=DA0001T.LIB.KSDS.CLUSTER,
// DISP=OLD
//IDCUT1 DD UNIT=SYSDA,SPACE=(TRK,
(2, 1))
//IDCUT2 DD UNIT=SYSDA,SPACE=(TRK,
(2, 1))
// SYSIN DD *
BLDINDEX
-
INFILE(DD1)
-
OUTDATASET(DA0001T.LIB.KSDS.AUTHNAME.AIX)
-
INTERNALSORT
/*
//
Disposition of base cluster is DISP=OLD as the
BLDINDEX needs absolute control of the base cluster. Output dataset can be
Alternate index cluster or pathname
The INTERNALSORT uses virtual storage whereas EXTERNAL SORT
uses disk space. INTERNALSORT is the default. If you want an external sort to
be performed then include IDCUT1 and IDCUT2 DD statements in your JCL and
specify EXTERNALSORT in the BLDINDEX command.
DEFINE Cluster
(NAME(DA0001T.LIB.KSDS.CLUSTER)
.
)
DEFINE AIX
(NAME(DA0001T.LIB.KSDS.AUTHNAME.AIX)
RELATE(DA0001T.LIB.KSDS.CLUSTER)
.
)
DEFINE PATH (NAME(DA0001T.LIB.KSDSK.AUTHNAME.PATH) PATHENTRY(DA0001T.LIB.KSDS.AUTHNAME.AIX)
.
)
BLDINDEX
INDATASET(DA0001T.LIB.KSDS.CLUSTER)
OUTDATASET(DA0001T.LIB.KSDS.AUTHNAME.AIX)
.
)
7. Reorganizing VSAM datasets
This chapter explains the commands used to back up and
restore existing datasets, protect the integrity of data.
REPRO
This command is used to:
- Loads empty VSAM cluster with records.
- Creates backup of a dataset
- Merge data from two VSAM datasets
REPRO command can operate on non-VSAM datasets. It is an
all-purpose load and backup utility command and can be used in place of
IEBGENER.
- Convert an ISAM dataset to VSAM format
- Copy a non-VSAM dataset to a physical sequential or partitioned dataset
- Copy record from one type of VSAM datasets to another. For example KSDS to ESDS
REPRO has following disadvantages:
- Little control over the input data
- Catalog information is not copied with the data
- Prior DELETE and redefinition is required before loading the cluster unless you have specified REUSE in the DEFINE CLUSTER command
Incase of KSDS, data and index component are build
automatically.
REPRO Command Syntax
Format :
REPRO
INFILE(ddname)
| INDATASET(dsname) -
OUTFILE(ddname) | OUTDATASET(dsname) -
Optional parameters are :
FROMKEY FROMADDRESS
FROMNUMBER SKIP
TOKEY
TOADDRESS
TONUMBER COUNT
INFILE and OUTFILE are required parameters that point to
DD1(input file) and DD2 (output file) respectively .
Limiting Input and Output Records:-
While it is not possible to edit the input to REPRO, you can
limit the input by providing the optional parameters.
FROMKEY and TOKEY parameters: FROMKEY specifies the
key of the input records at which to begin reading. TOKEY specifies the key to
stop reading or the last input record.
SKIP and COUNT parameters. SKIP specifies the number of
input records to skip before beginning to copy. COUNT specifies the number of
output records to copy. You can specify both. For example skip 10 records and
copy next 10
//DD1 DD DSN=DA0001T.INPUT.KSDS,DISP=OLD
//DD2 DD DSN=DA0001T.OUTPUT.KSDS, DISP=OLD
//SYSIN DD *
REPRO -
INFILE(DD1) -
OUTFILE(DD2) -
FROMKEY(A001) -
TOKEY(A069)
Other parameter for filtering records:
FROMADDRESS (RBA)
TOADDRESS(RBA)
FROMNUMBER
(RRN)
TONUMBER(RRN)
COUNT (NO.)
SKIP(NO)
Backing up VSAM Datasets
It is good to backup VSAM datasets on a regular basis.
REPRO command is used to rebuild and restore VSAM cluster
from the backup copy.
Backing up a VSAM dataset involves only one step
//JOBNAME DA0001TA…
//STEP10 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT = *
//DD2 DD
DSN=DA0001T.KSDS.INV.BACKUP(+1),
// DISP=(NEW,CATLG,DELETE),UNIT=TAPE,
// VOL=SER=32970,LABEL=(1,SL),
// DCB=(RECFM=FB,LRECL=80)
//SYSIN DD
*
REPRO
INDATASET(DA0001T.KSDS.INV.CLUSTER) –
OUTFILE(DD2)
/*
//
In the example above INDATASET is the input file and DD2 is
the output tape dataset which is a
part of the GDG while is more or less like a physical
sequential file. (Ref to chapter 10 for more on GDG’s )
Restoring and rebuilding the backup
DELETE-DEFINE-REPRO sequence required to restore the cluster
incase of KSDS.
Delete the original cluster using IDCAMS DELETE command
Load the empty cluster with data using the IDCAMS REPRO
command
When you DELETE-DEFINE-REPRO a VSAM dataset it has the
following effects on the KSDS.
- The dataset is reorganized that is the Control Interval and Control Area splits are eliminated
- Free space is redistributed throughout the dataset as specified in the FREESPACE parameter.
- Primary index is rebuilt, however the DELETE command deletes the base cluster as well as its indexes. So the alternate indexes have to be redefined
ESDS or RRDS need not be reorganized because the record
position is fixed permanently by sequence of entry or record number.
//DD1 DD
DSN=DA0001T.LIB.KSDS.BACKUP(0),
// DISP=OLD,
UNIT=TAPE,LABEL=(1,SL)
//SYSIN DD
*
DELETE
DA0001T.LIB.KSDS.CLUSTER
/* DEFINE CLUSTER NAME(DA0001T.LIB.KSDS.CLUSTER) -
INDEXED -
KEYS(4 0) -
RECORDSIZE(80 80) -
VOLUMES(BS3013) -
) -
DATA(NAME(DA0001T.LIB.KSDS.DATA)) -
INDEX(NAME(DA0001T.LIB.KSDS.INDEX))
REPRO -
INFILE(DD1) -
OUTDATASET(DA0001T.LIB.KSDS.CLUSTER)
/*
Example
7.3 DELETE-DEFINE-REPRO
Merging datasets with REPRO
The REPRO command can also be used to merge two datasets
into one. The target dataset can be a nonempty KSDS, ESDS or RRDS. If the target dataset is an ESDS, the merged
records are added to the end of the existing dataset.
EXPORT/IMPORT Commands
The EXPORT/IMPORT commands can be used for backup and
recovery . You can export a dataset, alternate index or a catalog to a
different system.
EMPORT/IMPORT has several advantages as compared to REPRO
Catalog information is exported along with data
Cluster deletion and redefinition not required during import
as input dataset already contains catalog information
Easily ported on other systems as catalog information
available with data
Like REPRO KSDS datasets are reorganized however three steps
of REPRO are replaced by one
Disadvantages:
Exported data cannot be processed until Imported
Can be used only for VSAM dataset
EXPORT
FORMAT :
EXPORT entryname | password
OUTFILE(ddname) |
OUTDATASET(dsname)
Optional parameters
Example :
EXPORT DA0001T.LIB.KSDS.CLUSTER
-
OUTFILE(DD2)
The output dataset from an EXPORT must always be a
sequential dataset (usually on a tape)
IMPORT
Format :
IMPORT -
INFILE(ddname) | INDATASET(dsname) -
OUTFILE(ddname) | OUTDATASET(dsname) -
Optional parameters:
IMPORT INFILE (DD2) -
OUTDATASET(DA0001T.LIB.KSDS.CLUSTER)
Imports only EXPORTED dataset
//DA0001TA JOB LA1279,SATYA,MSGLEVEL=(1,1),
// MSGCLASS=A,
NOTIFY=DA0001T
//* Input instream Data
into ESDS VSAM Dataset
// STEP1 EXEC PGM=IDCAMS
// SYSPRINT DD SYSOUT = *
// DD1 DD *
123456789123456789
AAAAAAAABBBBBBCCCC
/*
//DD2 DD DSN=DA0001T.ESDS.CLUSTER
//SYSIN DD *
REPRO -
INFILE(DD1) -
OUTFILE(DD2)
/*
//
//DA0001TA JOB LA2719,SATYA,MSGLEVEL= (1,1),
// MSGCLASS=A, NOTIFY=DA0001T
//* Load Data from a file
into ESDS VSAM Dataset
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT = *
//DD1 DD
DSN=DA0001T.ESDS.CLUSTER1
//DD2 DD
DSN=DA0001T.ESDS.CLUSTER2
//SYSIN DD *
REPRO -
INFILE(DD1 -
OUTFILE(DD2)
/*
//
8.VERIFY , PRINT, DELETE, ALTER Command
VERIFY
Verify -
preserves data integrity (HURBA)
Format :
VERIFY FILE(ddname/passwd)
or
VERIFY DATASET(entryname/passwd)
VERIFY entryname/passwd (TSO)
VERIFY DATASET(DA0001T.LIB.KSDS.CLUSTER)
Remark :
VERIFY can be issued from a TSO or within a JCL statement.
It is valid only for VSAM dataset except LDS.
DELETE
- catalog
entry deleted
Format :
DELETE
entryname/passwd -
optional parameters
DELETE DA0001T.LIB.KSDS.CLUSTER -
ERASE
Optional parameters are :
·
AIX
·
CLUSTER
·
NONVSAM
·
PATH
·
ERASE | NOERASE
·
FORCE | NOFORCE
·
PURGE | NOPURGE
·
SCRATCH |
NOSCRATCH
//DA0001TA JOB LA2179,SATYA,MSGLEVEL=(1, 1) ,
// NOTIFY=DA0001T
//* Deletes VSAM Dataset
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD
SYSOUT = *
//SYSIN DD *
DELETE DA0001T.TRAIN.ITMFOIV
/*
//
The default output destination for PRINT is SYSPRINT.
prints in
CHAR/HEX/DUMP format
limiting
Format 1 :
PRINT
INDATASET (entryname/passwd) -
Format 2 :
PRINT
INFILE (ddname/passwd) - parameters like
REPRO are available
Options
·
CHAR | DUMP | HEX
·
COUNT (number)
·
FROMADDRESS, [TOADDRESS]
·
FROMKEY, [TOKEY]
·
FROMNUMBER, [TONUMBER]
·
OUTFILE (ddname)
·
SKIP (number)
//DA0001TA JOB LA2179,SATYA,MSGLEVEL=(1,
1),NOTIFY=DA0001T
//* Print VSAM Dataset
//PRG1 EXEC PGM=IDCAMS
//FILE1
DD
DSN=DA0001T.LIB.KSDS.CLUSTER,DISP=SHR
//SYSPRINT DD SYSOUT = *
// SYSIN DD
*
PRINT INFILE(FILE1) CHARACTER
/*
//
ALTER
Used to change certain attributes of a previously defined
VSAM object
Following can be done with ALTER
change names
- Add volumes/Remove volumes
- Change Keys and uniqueness
- Change record size
- Change Upgrade option
- Change % of FREESPACE etc.
Format :
ALTER
entryname/passwd parameters
Options :
·
ADDVOLUMES (volumes)
·
AUTHORIZATION(entry string)
·
BUFFERSPACE (size)
·
ERASE | NOERASE
·
FREESPACE(ci% ca%)
·
MASTERPW(password)
·
NEWNAME(newname)
·
READPW (password)
·
SCRATCH | NOSCRATCH
·
SHAREOPTIONS
·
(cross region cross system)
·
TO(date) |FOR(days)
·
UPDATE | NOUPDATE
·
UPDATEPW(password)
·
UPGRADE | NOUPGRADE
The ORDERED Parameter
The ORDERED Parameter tells VSAM to assign the KEYRANGES
values to the volumes, one by one, in the order in which the KEYRANGES and
VOLUMES are specified.
Format :
ORDERED | UNORDERED
Example :
KEYRANGES( (0001
1000) -
(1001 2000) -
(2001
3000)) -
VOLUMES (BS3013 -
BS3014 -
BS3001)
Note : When you code ORDERED, you must code the same no. of VOLUMES as KEYRANGES.
The IMBED Parameter
The IMBED Parameter directs VSAM to place the sequence set
on the first track of the Data Control Area and duplicate it as many times as
it will fit.
Advantage : reduces rotational delay
Format :
IMBED | NOIMBED
The REPLICATE Parameter
The REPLICATE Parameter directs VSAM to duplicate each index
record as many times as it will fit on its assigned track. It applies to a KSDS
index component only.
Format :
REPLICATE | NOREPLICATE
Example :
INDEX(NAME(DA0001T.LIB.KSDS.INDEX) -
IMBED -
REPLICATE -
)
The Password Protection Parameter
VSAM provides a hierarchical list of parameters that you can
specify for a non-DFSMS-managed VSAM dataset. However DFSMS-managed dataset you
must use a security package like RACF.
Format :
MASTERPW(password)
Allows the highest level of access to all cluster
components, including DELETE and ALTER authority
Format :
UPDATEPW(password)
Allows write authority to the cluster
Format :
READPW(password)
Allows read only access to the cluster
Note : Valid only for KSDS, ESDS, RRDS.
Passwords are initially specified in the DEFINE
CLUSTER
Example :
MASTERPW(TRGDEPT)
At the execution time, a password can be coded explicitly in
the PASSWORD clause of a COBOL SELECT clause
The AUTHORIZATION Parameter
AUTHORIZATION provides additional security for a VSAM
cluster by naming and assembler user verification routine (USVR).
Format :
AUTHORIZATION (entry-point
password)
entry-point : the name of the entry point of a USVR
written in assembly language
password : the password the routine is to verify
Note : Valid only for KSDS, ESDS, RRDS.
Example :
AUTH(MYRTN ‘TRGDEPT’)
ALTER -
DA0001T.LIB.KSDS.CLUSTER -
NEWNAME(A2000.MY.CLUSTER)
ALTER -
DA0001T.LIB.KSDS.INDEX -
FREESPACE(30
30)
The following attributes are alterable only for empty
clusters
·
KEYS(length offset)
·
RECORDSIZE(avg max)
·
UNIQUEKEY | NONUNIQUEKEY
The following attributes are unalterable. You have to DELETE
the cluster and redefine it with new attributes.
CISZ
Cluster type,
IMBED/REPLICATE
REUSE | NOREUSE
9. Generation DataSets
Although there are many different uses for sequential
datasets, many sequential files have one characteristics in common : they are
used in cyclical application
for example, sequential dataset that contains transaction
posted daily against a master file is cyclical; each days transactions, along
with the processing required to post them, from one cycle. Similarly a
sequential dataset used to hold the backup copy of a master file is cyclical
too; each time a new backup copy is made, new cycle is begun.
In most of the cyclical applications, it’s good idea to
maintain versions of the files used for several cycles. That way if something
goes wrong, you can recreate the processing that occurred during previous
cycles to restore the affected files to a known point. Then the processing can
continue from that point
For this MVS provides a facility called generation data
group, GDG is a collection of two or more chronologically related versions of
the same file. Each version of the file or member of the GDG, is called a
generation dataset. A generation dataset may reside on tape or DASD. It is
generally sequential (QSAM) or direct(BDAM) file. ISAM and VSAM files can’t be
used in GDGs.
As each processing cycle occurs a new generation of dataset
is added to the generation data group. The new version becomes the current
generation; it replaces the old current generation, which becomes a previous
generation.
file.c1(+1) Next Generation
file.c1(0) Current Generation
file.c1(-1) Previous Generations
file.c1(-2)
file.c1(-3)
Figure above is the structure of a generation data group.
There are 3 previous generations, note that generations are numbered relative
to the current generation, file.c1(0).
Relative generation numbers are adjusted when each
processing cycle completes, so that the current generation is always referred
to as relative generation 0.
MVS uses the generation data group’s catalog entry to keep
track of relative generation numbers. As a result, GDGs must be cataloged and
each generation dataset that’s a part of the group must be cataloged too.
When you create a generation data group’s catalog entry, you
specify how many generations should be maintained Example: You might specify
that five generations including the current generation should be maintained.
Then during each processing cycle, the new version of the file becomes the current
version.
Although MVS lets you use relative generation numbers to
simplify cyclical processing, MVS uses “Absolute Generation Numbers” in the
form GnnnnV00 to identify each generation dataset uniquely. GnnnnV00 represents
the chronological sequence number of the sequence number of the generation,
beginning with G0000.
V00 is a version number, which lets you maintain more than
one version of a generation. Each time a new generation dataset is created, mvs
adds one the sequence number. The sequence and version numbers are stored as a
part of the file’s dataset name, like this:
filename.GnnnnV00
35 chars
9 chars
// IN DD DSN=DA0002T.MASTER,
DISP=SHR
// OUT DD DSN=DA0002T.MASTER.DAY(+1),
DISP=
(NEW,CATLG,DELETE),
UNIT=3390,
VOL=SER=BP0031,
SPACE= (CYL,(10,5),RLSE),
DCB=(PROD.GDGMOD,
BLKSIZE=23440,LRECL=80,RECFM=FB)\
Relative
Name and Absolute Name
DA0002T.MASTER.DAY90)
---> Relative Name
DA0002T.MASTER.DAY.G00001V00
-->Absolute Name
// Step1
EXEC PGM=IDCAMS
// SYSPRINT DD SYSOUT = *
// SYSIN
DD *
DEFINE GDG
(NAME(DA0002T.MASTER.DAY)
LIMIT(5)
SCRACH
EMPTY)
/*
Following
code contains 1 job with 2 steps....
//DA0003TA JOB
//UPDATE EXEC PGM=PAY3200
//OLDMAST DD DSN=MMA2.PAY.MAST(0),DISP=OLD
//NEWMAST DD DSN=MMA2.PAY.MAST(+1),
DISP=
(NEW,CATLG),UNIT=3300,
VOL=SER=BS3001,
DCB=(LRECL=80,BLKSIZE=1600)
//PAYTRAN DD DSN=MMA2.PAY.TRAN,DISP=OLD
//PAYLIST DD
SYSOUT=*
//REPORT EXEC PGM=PAY3300
//PAYMAST DD DSN=MMA2.PAY.MAST(+1),DISP=OLD
//PAYRPT DD SYSOUT=*
Following code contains 2
jobs.........
//JOB1 JOB
//UPDATE EXEC
PGM=PAY3200
//OLDMAST DD DSN=MMA2.PAY.MAST(0),DISP=OLD
//NEWMAST DSN=MMA2.PAY.MAST(+1),
DISP=(NEW,
CATLG), UNIT=3300,
VOL=SER=BS3001,
DCB=(LRECL=80,
BLKSIZE=1600)
//PAYTRAN DD
DSN=MMA2.PAY.TRAN,DISP=OLD
//PAYLIST DD SYSOUT =*
//JOB2 JOB ...........
//REPORT EXEC PGM=PAY3300
//PAYMAST DD
DSN=MMA2.PAY.MAST(0),DISP=OLD
//PAYRPT DD
SYSOUT=*
GDG’s are a
group of datasets which are
related to each other chronologically and functionally.
Generations can continue until a
specified limit is reached. The LIMIT parameter
specifies total number of
generations that can exist at any one time.
Once limit is reached the oldest
generation is deleted.
GDG Index
have to be created using the
IDCAMS command ‘DEFINE GDG’ before datasets
that are to be included in them can be made a part of them.
Model containing parameter
information of the datasets to be included in the GDG has to be specified.
All datasets within a GDG will have the same name.
Generation number of a dataset, within a GDG is automatically assigned by OS
when created. Datasets within a GDG can be referenced by their relative
generation number. Generation 0 always references current generation
Creation of GDGs
Create and catalog the index
Use IDCAMS statement DEFINE GDG for creating Index
Parameters for creating index
Specification
Name of GDG
Number of generations
Limit …. maximum no of datasets in a GDG.
Action to be taken when limit is reached
- Uncataloging oldest generation once limit reached
- Uncataloging all generations when limit reached
Uncataloging entry without physical deletion
Defining a model for the GDG.
NAME …… refers to the name of the GDG Index
LIMIT ….. refers to the maximum no of datasets
in a GDG.
NOEMPTY…
EMPTY …
SCRATCH ….
NOSCRATCH …
Modifying Features of GDG
You can modify a GDG only with the ALTER command
//STEP1 EXEC PGM=IDCAMS
//SYSIN DD
ALTER
DA0001T.ACCOUNTS.MONTHLY -
NOSCRATCH -
EMPTY
/*
//
Deleting GDG Index
Can be deleted by the DELETE parameter of IDCAMS
Will result in an error on reference to any generation
datasets of the GDG
/STEP1 EXEC PGM=IDCAMS
//SYSIN DD
DELETE
DA0001T.ACCOUNTS.MONTHLY GDG
/*
//
Adding a Dataset to a GDG
Name of the model containing the GDG DCB parameter’s is
coded in the DCB parameter of the DD statement
//STEP1 EXEC PGM=GDG1
//FILE1 DD
// DSN=DA0001T.ACCOUNTS.MONTHLY (+1),
// DISP=(NEW,CATLG,DELETE),UNIT=SYSDA,
// SPACE=(TRK,(30,10),RLSE),
// DCB=(MODEL.DCB,
// RECFM=FB,LRECL=80,
// BLKSIZE=800)
Deleting GDG Index and Datasets
FORCE parameter in the DELETE statement of IDCAMS can be
used
Example :
/STEP1 EXEC PGM=IDCAMS
//SYSIN DD
DELETE
DA0001T.ACCOUNTS.MONTHLY` -
GDG -
FORCE
/*
//
10. COBOL VSAM Considerations
SELECT CLAUSE
SELECT file ASSIGN TO DDNAME /
AS-DDNAME
ORGANIZATION
IS SEQUENTIAL/INDEXED/RELATIVE
ACCESS
MODE IS SEQUENTIAL/INDEXED/DYNAMIC
RECORD
KEY IS primary Key Dataname
ALTERNATE
KEY IS Alternate Key Dataname [With Duplicates]
FILE
STATUS IS status-key.
status key=Cobol, VSAM
x(2) 9(2) - Return code
9(1)
- Junction code
9(3)
- Feedback code
FD Entry
Should have the record structure
If KSDS then key field must match with length and position
of KEYS parameter in DEFINE CLUSTER information
File Processing
Regular COBOL file handling commands
Alternate index processing :
In JCL there must be a DD statement for base cluster and one
or more DD statement for alternate index path name.
Note: There is no COBOL
standard for assigning ddnames to alternate indexes, so a quasi-standard has
emerged whereby a sequential number is appended to the eighth character of the
base cluster ddname.
//LIBMAST DD DSN=DA0001T.LIB.KSDS.CLUSTER,
// DISP=SHR
//LIBMAST1 DD
DSN=DA0001T.LIB.KSDS.NAME.PATH,
// DISP=SHR
//LIBMAST2 DD DSN=DA0001T.LIB.KSDS.DEPT.PATH,
// DISP=SHR
Remark:
No matter how many alternate indexes you specify in the
program, there’s only one ASSIGN clause pointing to the ddname of the base
cluster.
SELECT file
ASSIGN TO LIBMAST
RECORD KEY IS ............
ALTERNATE KEY IS .........
[WITH DUPLICATES]
FD : Should
have record description having primary
key dataname and alternate key
dataname
KEY of reference :
READ filename
KEY IS primary/alternate key
dataname
Key of Reference.
The key that is currently being used to access records is
called the key of reference. When the program opens the dataset, the primary
key becomes, by default, the key of reference. The primary key remains the key
of reference when accessing records until it is changed. To start accessing
records by an alternate index key, you merely change the key of reference by
using the KEY phrase as part of one of the following statements.
A random READ statement, for example
READ EMP-MAST KEY IS
EMP-NAME
A sequential READ statement, for example
READ EMP-MAST
NEXT
KEY IS EMP-NAMEA
START statement, for example
START EMP-MAST
KEY
IS EQUAL TO EMP-NAME.
key-1 key-2 Cause
Successful Completion:
0 0 No
further information,
2 Duplicate key detected.
4 Wrong
fixed-length record.
5
Data set created when pened.With
sequential
VSAM datasets,0 is returned.
7 CLOSE with NO REWIND or
REEL,
for non-tape.
End-of-file.
1 0 No further information.
4 Relative record READ outside
dataset
boundary.
Invalid key.
2 1 Sequence error.
2 Duplicate key.
3 No record found.
4 Key outside boundary of dataset.
Permanent I/O error :
3 0 No further information.
4 Record outside dataset boundary.
5 OPEN and required dataset not found.
7 OPEN with invalid mode.
8 OPEN of dataset closed with LOCK.
9 OPEN unsuccessful because of
conflicting
dataset attributes.
Logic error :
4 1 OPEN of dataset already open.
2 CLOSE for dataset not open.
3 READ not executed before REWRITE.
4 REWRITE of different-record size.
6 READ after EOF reached.
7 READ attempted for dataset not opened
I-O
or
INPUT.
8 WRITE for dataset not opened
OUTPUT,I-O
or
EXTEND.
9 DELETE or REWRITE for dataset not
opened I-O.
Specific compiler-defined conditions :
9 0 No further information.
1 VSAM password failure.
2 Logic error.
3 VSAM resource not available.
4 VSAM sequential record not available.
5 VSAM invalid or incomplete dataset
information.
9 6 VSAM-no DD statement.
7 VSAM OPEN successful.Dataset integrity
verified.
VSAM I/O error processing
I/O error handling is one vital area where VSAM dataset
processing differs from non-VSAM dataset processing. When processing non-VSAM
datasets, most programmers code their application programs to ignore errors,
because the access method would abend the program if a serious I/O error
occurs. Not so when processing VSAM datasets.
The COBOL FILE STATUS Key
VSAM places program
control in the hands of the programmer, not the O/S. For this reason, it is
important to check the COBOL status key designated in the FILE STATUS clause
after every I/O operation. For some error keys you'll want to abend the program
immediately; for others you can just display the key, the record, and an
informative message and continue processing.
For these status key values, continue processing normally :
00 successful I/O.
02 duplicate alternate key
encountered (expected).
10 end of file.
For these status key values, bypass the record, display
pertinent information, and continue processing :
21 Input record out of
sequence.
22 duplicate primary key or
unique alternate key
encountered
(un-expected).
23 record (or Key) not found.
Note: You
may want to have the program count the number of times these key values are
returned and terminate the program if the counter reaches an unacceptable
number, which would likely to indicate that your input is bad
For the following status key values, terminate the program :
24 out-of-space condition (KSDS or RRDS).
30 Nonspecific I/O problem.
34 out-of-space condition(ESDS).
49 REWRITE attempted; dataset not opened
for I-O.
90 Dataset unusable or logic error.
92 logic error.
93 Resource not available.
94 current record pointer undefined.
95 Nonzero HURBA for OPEN OUTPUT.
96
No corresponding JCL DD statement.
97
If your shop has enabled the implicit VERIFY command,
this means that the dataset was opened after and implicit VERIFY, and you can
continue processing.
No comments :
Post a Comment