Beruflich Dokumente
Kultur Dokumente
Overview
VSAM (Virtual Storage Access
Method )
V
Request S Reply Operating
Application
A System
M
VSAM
V
S
Main Storage DATA A DATA Disk
M
File access methods
INDEX
CLUSTER
DATA
VSAM internals
CI
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
R C
R
R1 R2 Free D I
R3 D
Space F D
F
F
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.
CI
R1 R2 R3
80 40 60
RBA of R1 is 80
Access Method Services (AMS)
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)
OVERVIEW
ESDS
Format:
SEQUENTIAL
[ACCESS MODE IS RANDOM
DYNAMIC
[FILE STATUS IS Data-name-1]
ORGANIZATION
ESDS : SEQUENTIAL
KSDS : SEQUENTIAL or RANDOM or DYNAMIC
RRDS: SEQUENTIAL or RANDOM or DYNAMIC
ESDS
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL
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)
//SYSIN DD *
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
WRITE - YES
DELETE YES
REWRITE YES
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
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
DELETE YES
REWRITE YES
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
//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
EMPNO IS ENAME IS
Performance degradation
Complex update logic
Steps for Creating Alternate Index
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
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)