Sie sind auf Seite 1von 121

VSAM

Overview
VSAM (Virtual Storage Access
Method )

VSAM is an integral part of MVS. At the end of this


course, you, the user, will know VSAM in detail.
 know the different types of VSAM data sets
 be able to create, delete and alter VSAM data sets,
with indexes and alternate indexes
 know the organization of VSAM data sets
Access Methods

 An access method defines the technique by which


data is stored and retrieved. The different types of
dataset organizations in MVS are:
 Physical Sequential
 Partitioned
 Indexed Sequential
 Direct
 VSAM
What is VSAM?

 VSAM is Virtual Storage Access Method


 It is a method used to move data between Disk and
Main Storage
 VSAM operates in Virtual Environment
VSAM

 VSAM acts as interface between


 Operating System and Application Program

V
Request S Reply Operating
Application
A System
M
VSAM

 Interface between Main Storage and Disk

V
S
Main Storage DATA A DATA Disk
M
File access methods

 Data (Records) is retrieved


 Sequential (Reading from beginning to end)
 Random (Records are read by the value in the
key)
 Direct (Records are read based on their physical
location/address on disk)
 VSAM provides all these methods
 One access method supporting all types of data
retrieval
Traditional access methods

 QSAM (Queried Sequential Access Method)


 BSAM (Basic Sequential Access Method)
 for ‘flat’ files
 ISAM (Index Sequential Access Method)
 for Index files
 BDAM (Basic Direct Access Method)
 for direct access files
VSAM Dataset Types

Entry Sequenced Dataset (ESDS)


 ESDS contains records in the order in which they are entered.
Records are added to the end of the data set, and can be
accessed sequentially.
Key Sequenced Dataset (KSDS)
 KSDS contains records in ascending collating sequence.
Records can be accessed by a field called a key, or by a
relative byte address (RBA - relative position of the record
from the beginning of the dataset), or sequentially.
Linear Dataset (LDS)
 LDS contains data that has no record boundaries. The
manipulation of the data is completely controlled by the user.
Relative Record Dataset (RRDS)
 RRDS contains records in the order of relative record number.
These records can be accessed only by this number.
VSAM data set organization

 VSAM Data Set can contain three major components


 CLUSTER (Catalog entry)
 INDEX
 DATA (Actual data)
 Data Set is referred by cluster name in JCL

INDEX
CLUSTER
DATA
VSAM internals

 CONTROL INTERVAL (CI)


 VSAM stores Data and Index in Control Intervals (CI)
 CI is similar to ‘Block’

CI

Record Record .......


CONTROL INTERVAL

 CI is the unit of retrieval between DASD and I/O Buffer (Virtual


Storage)

DASD I/O Buffer

CI

R1 R2 R3 R1 R2 R3
Control Interval

 CI contains
 Records (or DATA)
 Free space (Optional)
 Control Information Definition Field (CIDF)
 Record Definition field (RDF)
Building blocks of a VSAM Dataset

Logical Record
 Logical records of VSAM data sets are stored in a different manner
from logical records in non-VSAM data sets. VSAM stores records in
control intervals.
Control Interval (CI)
A control interval consists of the following:
 Logical records (LR)
 Free space (FS)
 Control information fields
LR LR LR LR..FS....FS...RDF CIDF

 Free Space is the space reserved within the CI for inserting new records in a
KSDS or for lengthening the existing records.
CONTROL INTERVAL

 CIDF & RDF are VSAM control functions


 Used by VSAM to access data

R C
R
R1 R2 Free D I
R3 D
Space F D
F
F

3 bytes, Length of Record


How many successive
records have same length 4 bytes long, One per CI
Indicates Free space,
where and how much
CONTROL AREA

Control Area
 CIs are grouped into CA
 The control intervals in a VSAM data set are grouped
together into Control Areas.
 A VSAM data set is actually composed of one or more
control areas. The maximum size of a control area is a
cylinder, and the minimum size is one track.

Control Area (CA)


LR LR LR LR.. FS....FS... RDF CIDF
LR LR LR LR.. FS....FS... RDF CIDF
LR LR LR LR.. FS....FS... RDF CIDF
Cluster

 VSAM datasets are defined as Highest Index Set


Clusters. 2 5000
210
 A Cluster is a combination of
the data component and the Index Set
index component. 1 1600 FS 5000 FS FS
055
 The Index component is
applicable only in the case of a Sequence Set
KSDS.
1010 1055 FS 1350 1600 F
 The data component holds data S
records.
 The index component holds the DATA COMPONENT
index records to access the (CA1)
required information from the
data component 1300 1305 1310 1350 FS
1400 1410 1415 1600 FS
Data Component (CA2)
FS FS FS FS FS
1001 1002 1005 1010 FS
1020 1022 1030 1055 FS
FS FS FS FS FS
Control Interval Split

CA-1 (CI-1 to CI-3) - Before split


 When a data set is first
loaded, the key sequence of 1001 1002 1005 1010 FS
records and their physical
order are the same.
1020 1022 1030 1055 FS
 However, when records are
inserted, control interval split
can occur, causing the data FS FS FS FS
control intervals to have a
physical order that is
different from the key CA-1 (CI-1 to CI-3) - After split
sequence.
 For example, try to insert 1001 1002 1004 FS
'1004' in CI-1 shown below :
 A Control Interval Split occurs 1020 1022 1030 1055 FS
and CI-1 is split exactly into
two half CI's. CI-3, which is a
free control interval is used,
1005 1010 FS FS
and some logical records of
CI-1 are moved into CI-3. CI-3
is placed after CI-2 and it is
Control Area Split

 Now, if record ‘1025’ is inserted, there is no free


control interval for a CI split to occur. Hence, a CA
(control area) split occurs. The CA-1 is split into two
half control areas; some of the Control intervals of
CA-1 are moved into the newly created CA (CA-2).
CA-1 (CI-1 to CI-3) - After split

1001 1002 1004 FS


1020 1022 FS FS FS
FS FS FS FS

CA-2 (CI-1 to CI-3)

1025 1030 1055 FS


1005 1010 FS FS
FS FS FS FS
Types of VSAM data sets

 ESDS Entry Sequenced Data Set


 KSDS Key Sequenced Data Set
 RRDS Relative Record Data Set
 LDS Linear Data Set
ESDS

 Similar to Sequential File


 Sequenced by the order in which data is
entered/loaded
 New Records are added at the end only
(chronological order)
 Supports both Fixed and Variable formats
 Contains only CLUSTER & DATA components
ESDS (Contd...)

 Only sequential access in Batch Cobol Programs


 Random access is supported in on-line applications
(CICS) using Relative Byte Address (RBA)
 Alternate Index is supported in on-line applications
(CICS)
 NO primary index
RBA

 Record location relative to the beginning of the file


(Relative Byte Address)

CI

R1 R2 R3
80 40 60

RBA of R1 is 80
Access Method Services (AMS)

 Access Method Services is a service program that helps


you to allocate and maintain VSAM data sets and
catalogs.
 IDCAMS is the name of the utility program used to
perform the following operations on VSAM data sets.
 Creating a Data set

 Loading a VSAM data set.

 Printing a Data set

 Deleting a Data set

 Error Detection for KSDS Data set

 Creating Generation Data Groups (GDG) etc.


INVOKING ACCESS
METHOD

IDCAMS UTLITY
Defining a VSAM Cluster

 The Define Cluster command is used to allocate VSAM data sets. The basic
information required for defining a VSAM data set is:
 Name of the cluster.
 Volume(s) on which the data set will be allocated.
 Type of data set (KSDS, ESDS, RRDS or LDS).
 Space needed for the data set.
 For a KSDS, the length of the key and its offset from the beginning of the
record.
 Record size, and whether it is fixed or variable in length.
 Control interval size.
 CI and CA Free Space.
 The following keywords have to be used to define the different types of VSAM data
sets:
 NONINDEXED for ESDS.
 INDEXED for KSDS.
 NUMBERED for RRDS.
 LINEAR for LDS.
Sample JCL to create an ESDS cluster

//LEM0UXXA JOB
MSGCLASS=Q,CLASS=Q,NOTIFY=&SYSUID
//DEFKSDS EXEC PGM=IDCAMS NONINDEXED - ESDS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DEFINE
CLUSTER(NAME(LEM0UXX.TEST.ESDS) -
VOLUMES(LEM001) - RECORDSIZE(N1,N2)
NONINDEXED - N1=> AVG RECL
TRACKS(2,1) -
N2=> MAX RECL
RECORDSIZE(50,50) -
CONTROLINTERVALSIZE(4096) -
FREESPACE(10,20)) -
DATA(NAME(LEM0UXX.TEST.ESDS.DATA))
/*
Freespace(PCT1,PCT2)

PCT1=> PCT FREE SPACE IN each CI

PCT2=> PCT Of unused CI in CA


COBOL AND ESDS

OVERVIEW
ESDS

 Similar to Sequential File


 Sequenced by the order in which data is
entered/loaded
 New Records are added at the end only
(chronological order)
 Supports both Fixed and Variable formats
 Contains only CLUSTER & DATA components
ESDS (Contd...)

 Only sequential access in Batch Cobol Programs


 Random access is supported in on-line applications
(CICS) using Relative Byte Address (RBA)
 Alternate Index is supported in on-line applications
(CICS)
 NO primary index
FILE-CONTROL Paragraph
  

Format:
 

SELECT [OPTIONAL] File-name-1 ASSIGN TO Assignment-name-1


SEQUENTIAL
[ ORGANIZATION IS INDEXED
RELATIVE

SEQUENTIAL
[ACCESS MODE IS RANDOM
DYNAMIC
 
[FILE STATUS IS Data-name-1]

 
 
 
 
ORGANIZATION

SEQUENTIAL => ESDS


INDEXED => KSDS
RELATIVE => RRDS

ACCESS MODE OPTIONS

ESDS : SEQUENTIAL
KSDS : SEQUENTIAL or RANDOM or DYNAMIC
RRDS: SEQUENTIAL or RANDOM or DYNAMIC
ESDS

 ORGANIZATION IS SEQUENTIAL
 ACCESS MODE IS SEQUENTIAL

INPUT OUTPUT INPUT- EXTEND


OUTPUT
READ YES - YES -

WRITE - YES YES

DELETE

REWRITE YES
VSAM === ESDS

ORGANIZATION IS
SEQUENTIAL.
ACCESS MODE = SEQUENTIAL

OVERVIEW
CREATING ESDS
Writing Data in ESDS
Writing Data in ESDS
Writing Data in ESDS
RUNNING A PROGRAM
View the data from
ESDS

REPRO COMMAND
PRINT ESDS EXAMPLE

Overview
PRINT ESDS
PRINT ESDS
PRINT ESDS
KSDS (KEY
SEQUENTIAL DATA SET
)
Sample JCL to create a KSDS cluster
KEYS(N1,N2)

N1=>
//LEM0UXXA JOB MSGCLASS=Q,CLASS=Q,NOTIFY=&SYSUID length of the Key(Bytes)

//DEFKSDS EXEC PGM=IDCAMS N2=> is starting byte position

//SYSPRINT DD SYSOUT=* of Key in Record

//SYSIN DD *

DEFINE CLUSTER(NAME(LEM0UXX.TEST.KSDS) - RECORDSIZE(N1,N2)


VOLUMES(LEM001) - N1=> AVG RECL
TRACKS(2,1) -
N2=> MAX RECL
INDEXED -

KEYS(9,0) -
INDEXED - KSDS
RECORDSIZE(50,50) -

CONTROLINTERVALSIZE(4096) -
Freespace(PCT1,PCT2)
FREESPACE(10,20)) -
PCT1=> PCT FREE SPACE IN each CI
DATA(NAME(LEM0UXX.TEST.KSDS.DATA)) -
PCT2=> PCT Of unused CI in CA
INDEX((NAME(LEM0UXX.TEST.KSDS.INDEX))
SELECT & ASSIGN Syntax
READ statement
WRITE & REWRITE statement
KSDS

 ORGANIZATION IS INDEXED
 ACCESS MODE IS SEQUENTIAL

INPUT OUTPUT INPUT-


OUTPUT
READ YES - YES

WRITE - YES

DELETE YES

REWRITE YES

START YES YES


INDEX FILE

ORGANIZATION IS INDEXED.
ACCESS MODE = SEQUENTIAL

OVERVIEW
CREATING KSDS
WRITING A KSDS
WRITING A KSDS
WRITING KSDS
RUNNING A KSDS
Running a KSDS
READING INDEX FILE-KSDS

ORGANIZATION IS INDEXED.
ACCESS MODE = SEQUENTIAL

OVERVIEW
READING A KSDS
READING A KSDS FILE
EXECUTE A PROGRAM FOR READING
DATA FROM KSDS
SPOOL OUTPUT
SPOOL OUTPUT
START & DELETE statement
START :Position a Record
START COMMAND
START COMMAND
DELETE COMMAND
DELETE COMMAND
EXECUTE A PROGRAM AFTER
COMPILE
PRINT THE KSDS DATASET
PRINT THE KSDS
KSDS
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
KSDS

 ORGANIZATION IS INDEXED
 ACCESS MODE IS RANDOM

INPUT OUTPUT INPUT-


OUTPUT
READ YES - YES

WRITE - YES YES

DELETE YES

REWRITE YES

START
KSDS – RANDOM- WRITE
KSDS – Random -WRITE
KSDS –RANDOM MODE
READ Operation

Overview
KSDS – RANDOM -READ
KSDS – RANDOM -READ
KSDS
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
KSDS

 ORGANIZATION IS INDEXED
 ACCESS MODE IS DYNAMIC

INPUT OUTPUT INPUT-


OUTPUT
READ YES - YES

WRITE - YES YES

DELETE YES

REWRITE YES

START YES YES


KSDS- DYNAMIC MODE
WRITE OPERATION

Overview
KSDS –DYNAMIC- WRITE
KSDS –DYNAMIC-WRITE
KSDS –DYNAMIC-READ
KSDS-DYNAMIC-READ
RRDS

Overview
Sample JCL to create an RRDS cluster

//LEM0UXXA JOB
MSGCLASS=Q,CLASS=Q,NOTIFY=&SYSUID

//DEFRRDS EXEC PGM=IDCAMS NUMBERED - RRDS


//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE CLUSTER(NAME(LEM0UXX.TEST.RRDS) -
RECORDSIZE(N1,N2)
VOLUMES(LEM001) -
N1=> AVG RECL
NUMBERED -
N2=> MAX RECL
TRACKS(2,1) -

RECORDSIZE(50,50) -

CONTROLINTERVALSIZE(4096) -
Freespace(PCT1,PCT2)
FREESPACE(10,20)) -
PCT1=> PCT FREE SPACE IN each CI
DATA(NAME(LEM0UXX.TEST.RRDS.DATA))
PCT2=> PCT Of unused CI in CA
/*
RELATIVE-RANDOM-WRITE
RELATIVE-RANDOM-WRITE
RELATIVE-RANDOM-READ
RELATIVE-RANDOM-READ
RELATIVE-DYNAMIC-READ
RELATIVE-DYNAMIC-READ
RELATIVE-DYNAMIC-READ
ALTERNATE INDEX

Overview
ALTERNATE INDEXES

 Used whenever the data is required to be retrieved on the


basis of more than one field
EMPNO ENAME SALARY
3 RAJESH 5000
4 RAMESH 6000
5 RANDY 7000
6 SURESH 8000

 e.g., Can be defined for both KSDS & ESDS

EMPNO IS ENAME IS

BASE KEY ALTERNATE KEY


ALTERNATE INDEXES

Reduce data redundancy


Can have duplicates
Easy to define using IDCAMS
Allow datasets to be accessed sequentially or
randomly
Can be updated automatically
Disadvantages

 Performance degradation
 Complex update logic
Steps for Creating Alternate Index

 Define AIX using IDCAMS DEFINE AIX


 Specify Alternate Index Path using IDCAMS DEFINE
PATH
 Build AIX & populate it using IDCAMS BLDINDEX
Sample JCL to create an AIX cluster
UPGRADE-> VSAM AUTOMATIC

Updates the AIX for all

//LEM0UXXA JOB ADD,UPDT,DEL of Base cluster


MSGCLASS=Q,CLASS=Q,NOTIFY=&SYSUID
//DEFKSDS EXEC PGM=IDCAMS
UNIQUE /NONUNIQUE
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
KEY
DEFINE AIX (NAME(LEM0UXX.TEST.AIX.CLUSTER) ( N1,N2)

RELATE (LEM0UXX.INFILE.KSDS)
N1->- LENGTH OF AIX key

VOLUMES(LEM001) -
N2-> KEYS start Loc in BASE CLUSTER
KEY (10, 35) -
RECORDSIZE(N1,N2)
TRACKS(2,1) -
NONUNIQUEKEY - N1=> AVG RECL
RECORDSIZE(49,49) -
UPGRADE N2=> MAX RECL
CONTROLINTERVALSIZE(4096) -
FREESPACE(10,20)) -
DATA(NAME(LEM0UXX.TEST.AIX.DATA)) Freespace(PCT1,PCT2)
INDEX(NAME(LEM0UXX.TEST.AIX.INDEX))
PCT1=> PCT FREE SPACE IN each CI
/*
PCT2=> PCT Of unused CI in CA
UPGRADE/NOUPGRADE

• Syntax : UPGRADE/NOUPGRADE

• UPGRADE specifies that records


in AIX are to be updated
• automatically whenever the
base cluster is updated
BUILDING AN INDEX

Overview
BUILD INDEX

//JOB CARD
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
BUILD INDEX is used
//SYSIN DD *
To load records in
BLDINDEX -
INDATASET(LEM0UXX.KSDS.CLUSTER') - AIX after it has been def
OUTDATASET('LEM0UXX.KSDS.AIX.CLUSTER') -
/*
PATH AND ALTERNATE
INDEX

Overview
DEFINE PATH

//JOB CARD
//STEP1 EXEC PGM = IDCAMS Path Establishes
//SYSPRINT DD SYSOUT=* A Bridge Between
//SYSIN DD * BASE CLUSTER & AIX

DEFINE PATH -
( NAME ( LEM0UXX.KSDS.PATH) –
PATHENTRY(LEM0UXX.KSDS.AIX.CLUSTER) –
UPDATE )
/*
//
ALTERNATE Index
Example
Define BASE CLUSTER
LOADING DATA INTO BASE CLUSTER
LOADING DATA INTO BASE CLUSTER
LOADING DATA INTO BASE CLUSTER
EXECUTING A PROGRAM TO LOAD
DATA
EXECUTING A PROGRAM TO LOAD
DATA
DEFINING AIX

RECORDSIZE(N1,N2)

N1= LENGTH OF BASE CLUSTER KEY(3)

+ LENGTH OF AIX KEY(5) + 5 for CI


Build index
Create path for Bridge
READING RECORDS BY ALTERNATE INDEX
READING RECORD BY ALTERNATE KEY
READING RECORD BY ALTERNATE KEY
EXECUTE A READ PROGRAM BY
ALTERNATE KEY

DD1-> BASE CLUSTER

DD11-> PATH NAME

DDNAME SHOULD BE IN ORD


SPOOL OUTPUT

Das könnte Ihnen auch gefallen