COBOL DAY 7&8

Post on 10-Apr-2015

1,070 views 0 download

transcript

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

Application Operating System

VSAM

Request Reply

VSAM

VSAM acts as interface between

Operating System and Application Program

Main Storage Disk

VSAM

DATA DATA

VSAM

Interface between Main Storage and Disk

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.

CLUSTERINDEX

DATA

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

CI

Record Record .......

VSAM internals

CONTROL INTERVAL (CI)

VSAM stores Data and Index in Control Intervals (CI)

CI is similar to ‘Block’

DASD I/O Buffer

R1 R2 R3

CI

CONTROL INTERVAL

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

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.

3 bytes, Length of RecordHow many successive records have same length 4 bytes long, One per CI

Indicates Free space, where and how much

R1 R2 R3 FreeSpace

RDF

RDF

CI DF

CONTROL INTERVAL

CIDF & RDF are VSAM control functions

Used by VSAM to access data

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 CIDFLR LR LR LR.. FS....FS... RDF CIDFLR LR LR LR.. FS....FS... RDF CIDF

Cluster

VSAM datasets are defined as Clusters.

A Cluster is a combination of the data component and the index component.

The Index component is applicable only in the case of a KSDS.

The data component holds data records.

The index component holds the index records to access the required information from the data component

Highest Index Set

1300 1305 1310 1350 FS

1400 1410 1415 1600 FS

FS FS FS FS FS1001 1002 1005 1010 FS

1020 1022 1030 1055 FS

FS FS FS FS FS

1055

1600 FS 5000 FS FS

1010 1055 FS 1350 1600 FS

2210

5000

Index Set

Sequence Set

DATA COMPONENT (CA1)

Data Component (CA2)

Control Interval Split

When a data set is first loaded, the key sequence of records and their physical order are the same.

However, when records are inserted, control interval split can occur, causing the data control intervals to have a physical order that is different from the key sequence.

For example, try to insert '1004' in CI-1 shown below :

A Control Interval Split occurs and CI-1 is split exactly into two half CI's. CI-3, which is a free control interval is used, and some logical records of CI-1 are moved into CI-3. CI-3 is placed after CI-2 and it is not inserted in between CI-1 and CI-2.

1001 1002 1005 1010 FS

1020 1022 1030 1055 FS

FS FS FS FS

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

1001 1002 1004 FS

1020 1022 1030 1055 FS

1005 1010 FS FS

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

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

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

ESDS (Contd...)

CI

RBA of R1 is 80

RBA

Record location relative to the beginning of the file(Relative Byte Address)

R1 R2 R380 40 60

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

Freespace(PCT1,PCT2)

PCT1=> PCT FREE SPACE IN each CI

PCT2=> PCT Of unused CI in CA

RECORDSIZE(N1,N2)

N1=> AVG RECL

N2=> MAX RECL

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

//DEFKSDS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE CLUSTER(NAME(LEM0UXX.TEST.ESDS) -

VOLUMES(LEM001) -

NONINDEXED -

TRACKS(2,1) -

RECORDSIZE(50,50) -

CONTROLINTERVALSIZE(4096) -

FREESPACE(10,20)) -

DATA(NAME(LEM0UXX.TEST.ESDS.DATA))

/*

NONINDEXED - ESDS

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

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

ESDS (Contd...)

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 => ESDSINDEXED => KSDSRELATIVE => RRDS

ACCESS MODE OPTIONS

ESDS : SEQUENTIAL KSDS : SEQUENTIAL or RANDOM or DYNAMICRRDS: SEQUENTIAL or RANDOM or DYNAMIC

ESDS

ORGANIZATION IS SEQUENTIAL

ACCESS MODE IS SEQUENTIAL

INPUT OUTPUT INPUT-OUTPUT

EXTEND

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

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

//DEFKSDS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE CLUSTER(NAME(LEM0UXX.TEST.KSDS) -

VOLUMES(LEM001) -

TRACKS(2,1) -

INDEXED -

KEYS(9,0) -

RECORDSIZE(50,50) -

CONTROLINTERVALSIZE(4096) -

FREESPACE(10,20)) -

DATA(NAME(LEM0UXX.TEST.KSDS.DATA)) -

INDEX((NAME(LEM0UXX.TEST.KSDS.INDEX))

/*

KEYS(N1,N2)

N1=> length of the Key(Bytes)

N2=> is starting byte position

of Key in Record

RECORDSIZE(N1,N2)

N1=> AVG RECL

N2=> MAX RECL

Freespace(PCT1,PCT2)

PCT1=> PCT FREE SPACE IN each CI

PCT2=> PCT Of unused CI in CA

INDEXED - KSDS

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 INDEXEDACCESS 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 MODEREAD Operation

Overview

KSDS – RANDOM -READ

KSDS – RANDOM -READ

KSDS ORGANIZATION IS INDEXEDACCESS 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

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE CLUSTER(NAME(LEM0UXX.TEST.RRDS) -

VOLUMES(LEM001) -

NUMBERED -

TRACKS(2,1) -

RECORDSIZE(50,50) -

CONTROLINTERVALSIZE(4096) -

FREESPACE(10,20)) -

DATA(NAME(LEM0UXX.TEST.RRDS.DATA))

/*

RECORDSIZE(N1,N2)

N1=> AVG RECL

N2=> MAX RECL

Freespace(PCT1,PCT2)

PCT1=> PCT FREE SPACE IN each CI

PCT2=> PCT Of unused CI in CA

NUMBERED - RRDS

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 INDEXESALTERNATE INDEXES

Used whenever the data is required to be retrieved on the basis of more than one field

EMPNO ENAME SALARY

101 RAJESH 5000

102 RAMESH 6000

103 RANDY 7000

104 SURESH 8000

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

EMPNO ISBASE KEY

ENAME ISALTERNATE KEY

Reduce data redundancyCan have duplicatesEasy to define using IDCAMSAllow datasets to be accessed sequentially or randomlyCan be updated automatically

ALTERNATE INDEXESALTERNATE INDEXES

Disadvantages

Performance degradation

Complex update logic

Steps for Creating Alternate IndexSteps 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

Freespace(PCT1,PCT2)

PCT1=> PCT FREE SPACE IN each CI

PCT2=> PCT Of unused CI in CA

RECORDSIZE(N1,N2)

N1=> AVG RECL

N2=> MAX RECL

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

//DEFKSDS EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE AIX (NAME(LEM0UXX.TEST.AIX.CLUSTER) –

RELATE (LEM0UXX.INFILE.KSDS) -

VOLUMES(LEM001) -

KEY (10, 35) -

TRACKS(2,1) -

NONUNIQUEKEY -

RECORDSIZE(49,49) -

UPGRADE

CONTROLINTERVALSIZE(4096) -

FREESPACE(10,20)) -

DATA(NAME(LEM0UXX.TEST.AIX.DATA))

INDEX(NAME(LEM0UXX.TEST.AIX.INDEX))

/*

UNIQUE /NONUNIQUE

UPGRADE-> VSAM AUTOMATIC

Updates the AIX for all

ADD,UPDT,DEL of Base cluster

KEY ( N1,N2)

N1-> LENGTH OF AIX key

N2-> KEYS start Loc in BASE CLUSTER

• Syntax : UPGRADE/NOUPGRADE

• UPGRADE specifies that records in AIX are to be updated• automatically whenever the base cluster is updated

UPGRADE/NOUPGRADEUPGRADE/NOUPGRADE

BUILDING AN INDEX

Overview

BUILD INDEX

//JOB CARD

//STEP1 EXEC PGM=IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

BLDINDEX -

INDATASET(LEM0UXX.KSDS.CLUSTER') -

OUTDATASET('LEM0UXX.KSDS.AIX.CLUSTER') -

/*

BUILD INDEX is used

To load records in

AIX after it has been def

PATH AND ALTERNATE INDEX

Overview

DEFINE PATH

//JOB CARD

//STEP1 EXEC PGM = IDCAMS

//SYSPRINT DD SYSOUT=*

//SYSIN DD *

DEFINE PATH -

( NAME ( LEM0UXX.KSDS.PATH) –

PATHENTRY(LEM0UXX.KSDS.AIX.CLUSTER) –

UPDATE )

/*

//

Path Establishes

A Bridge Between

BASE CLUSTER & AIX

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 ORDER

SPOOL OUTPUT