新手入门之如何创建和使用VSAM(IDCAMS)
-
可以用来操作VSAM和GDG文件
-
关于VSAM:
Vsam文件:
Vsam(virtual storage access method)文件是IBM在虚拟存储和树型数据结构基础上,为满足数据量大,存取速度快和维护起来方便而发展起来的一种文件组织形式。VSAM以索引键(key)或相对字节地址(BRA)来安排纪录的存放位置,它支持直接访问和顺序访问两种方式。
VASM文件结构:
VSAM文件中的数据都以纪录的格式存放,逻辑纪录是访问数据的单位,VSAM文件将纪录存放一个个CI(Control Interval)中,一个CI是DASD中一片连续的区域,用来存储数据纪录以及控制信息。当读取一个记录时,这个记录所在的CI将整个读到VSAM I/O缓冲区,然后用户要读的纪录才从VSAM缓冲区传输到用户定义工作区。CI的大小在创建VSAM文件时由用户指定,也可以让系统自动选择合适的大小。
每个CI含有如下信息:
逻辑纪录:纪录用户数据,每个CI可以含有多个逻辑纪录
自由空间:每个CI可以有一定的自由空间,可以用来插入新的纪录
控制信息:主要是RDF和CIDF,RDF描述每一个记录的信息,而CIDF则描述整个CI的信息。
CICS支持以下三种VSAM文件:
KSDS(Key Sequenced Data Set)
ESDS(Entry Sequenced Data Set)
RRDS(Relative Record Data Set)
VSAM文件的定义:
VSAM数据集可以通过访问方法集(Access Method Services)的DEFINE CULSTER或ALLOCATE命令来定义,定义VSAM时要制定数据集的属性。
如果系统中使用了SMS来管理存储,定义的数据集又是系统管理的数据集,则可指定DATA CLASS,MANAGEMENT CLASS和STORAGE CLASS,
也可以使用系统默认的存储定义。
VSAM数据集的属性信息有:
INDEXED | NONINDEXED | NUMBERED | LINEAR:指定数据集的形式分别是 KSDS | ESDS | RRDS | LDS
RECORDSIZE:指定纪录的平均和最大长度。
KEY: 指明纪录的平均和最大长度
CATALOG: 指明所用编目的名字和口令
VOLUMES: 指明所用得卷
REDORDS | KILOBYIES | MEGABYIES | TRACKS | CYLINDERS:以不同方式份分配空间的大小
BUFFERSPACE: 指明处理数据集时应分配的最小缓冲区
CONTRLINTERVALSIZE: 指明CI的大小
SPANNED: 指明CI可否跨CI存放
IMBED: 指示是否把索引的顺序集放在相应的CA中
FREESPACE 指明预留自由空间大小
SHAREOPTION 指明文件在不同REGION之间共享级别****** ***************************** Top of Data ****************************** 000001 //jobcard 000007 //********************************************************************* 000008 //* STEP1 VSAM 000009 //********************************************************************* 000010 //STEP1 EXEC PGM=IDCAMS 000011 //SYSPRINT DD SYSOUT=* 000012 //SYSOUT DD SYSOUT=* 000013 //SYSIN DD * 000014 DELETE your.vsam.name CLUSTER PURGE 000015 DEFINE CLUSTER(NAME(your.vsam.name) - 000016 INDEXED - 000017 KEYS(5 0) - 000018 REC(50 10) - 000019 RECSZ(80 80) - 000020 CISZ(4096) - 000021 FSPC(10 20) - 000022 VOL(STN813) - 000023 SHR(3 3) - 000024 UNQ - 000025 SPEED) 000026 /* 000027 //********************************************************************* 000028 //* STEP2 INPUT 000029 //********************************************************************* 000030 //STEP2 EXEC PGM=IDCAMS 000031 //SYSPRINT DD SYSOUT=* 000032 //SYSOUT DD SYSOUT=* 000033 //INFILE DD * 000034 AAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA 000035 /* 000036 //OUTFILE DD DSN=your.vsam.name,DISP=SHR 000037 //SYSIN DD * 000038 REPRO IFILE(INFILE) - 000039 OFILE(OUTFILE) 000040 /* 000041 //********************************************************************* 000042 //* STEP3 PRINT 000043 //********************************************************************* 000044 //STEP3 EXEC PGM=IDCAMS 000045 //SYSPRINT DD SYSOUT=* 000046 //SYSOUT DD SYSOUT=* 000047 //INFILE DD DSN=your.vsam.name,DISP=SHR 000048 //SYSIN DD * 000049 PRINT IFILE(INFILE) - 000050 CHAR 000051 /* ****** **************************** Bottom of Data ****************************
定义一个ESDS类型的VSAM文件,如果该文件存在,则先删除
//jobcard //********************************************************************* //* STEP1 ESDS //********************************************************************* //STEP1 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * DELETE STJI.MJA.VE025.TESTVS CLUSTER PURGE IF MAXCC=8 THEN SET MAXCC=0 DEFINE CLUSTER(NAME(STJI.MJA.VE025.TESTVS) - REC(50 10) - RECSZ(80 80) - CISZ(4096) - FSPC(10 20) - VOL(STN813) - SHR(3 3) - NONINDEXED - SPEED) /*
定义一个RRDS类型的VSAM文件,如果该文件存在,则先删除
//jobcard //********************************************************************* //* STEP1 RRDS //********************************************************************* //STEP1 EXEC PGM=IDCAMS //SYSPRINT DD SYSOUT=* //SYSOUT DD SYSOUT=* //SYSIN DD * DELETE STJI.MJA.VE025.TESTVS CLUSTER PURGE IF MAXCC=8 THEN SET MAXCC=0 DEFINE CLUSTER(NAME(STJI.MJA.VE025.TESTVS) - REC(50 10) - RECSZ(80 80) - CISZ(4096) - FSPC(10 20) - VOL(STN813) - SHR(3 3) - NUMBERED - SPEED) /*
-