`
knightyzj
  • 浏览: 19015 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

VSAM学习(1)

阅读更多
VSAM(VirtualStorageAccessMethod)文件主要有以下几种形式:
1.
键顺序文件KSDS
2.
输入顺序文件ESDS
3.相对记录文件RRDS

4.
线性文件LDS

VSAM文件结构:

VSAM数据集中的数据除线性数据集外,都被组成记录(逻辑记录)。逻辑记录是用户访问

数据集的单位。·

CI

ControlInterval):

一个CI是直接访问存储设备的一片连续区域,用于存储数据记录及

其控制信息。当从直接存储设备上读取一个记录时,包含要读的记录的整个CI都被读到虚存

VSAMI/O缓冲中,然后用户要读的记录才从VSAM缓冲传输到用户定义的工作区。一个VSAM数据集在一个卷上可以占用最多119123Extent,或者占用4294967

296个字节。

每一个CI含有如下信息:

逻辑记录:每一个CI中可能包含多个逻辑记录。

自由空间:每一个CI中可能含有一定的自由空间,用于插入新的记录。

控制信息:主要为RDFCIDFRDF描述每一个记录的信息,而CIDF则描述整个CI

的信息。

注意:在线性数据集中,CI全部是数据,无控制信息。

CA(Control

Area):

VSAM数据集中的多个CI成组为直接访问存储设备中的一片连续区域称之为CA,一个VSAM数据集由一个以上的CA组成。CA最大为一个柱面,最小必须是一个磁道。在定义数据集时可以用SPANNED参数指定记录可以跨多个CI

ESDS

类似顺序文件。其记录长度可固定也可不固定,新记录只能加在数据集的末尾,

已存在的记录不可被删除,如果你一定要删除一个记录,你只能把这个记录标记为不活跃,

实际上并未被删除。记录的内容可以被修改但不能改变其长度。访问这样的数据通过其

RBA(RelativeByteAddress)来进行,RBA一般为双字整数,它表示逻辑记录从数据集起始

位置的位移量。尽管
ESDS没有索引,但你可以建立一个次键索引,用以记录记录的RBA

ESDS通过地址进行访问,因此可顺序访问也可随机访问。

KSDS

KSDS中,每一个逻辑记录含有一个称之为KEY的字段,它唯一地标识一个记

录,逻辑记录以KEY升序的顺序存放。KSDS的记录大小可以固定也可以不固定。KEY必须唯一,必须在每个记录的同样位置,如果是跨CI的记录必须在记录的第一个CI中。记录可以被删除,新增加的记录按其KEY值的大小插入在合适的位置。定义KSDS后,未用的空间可以散布在整个数据集,以允许插入新的记录。当新的记录插入到一个CI中时,或已存在的记录大小改变时,其后的记录移动到后面的自由空间,以便于新的记录的插入。同样,当一个记录被删除或变小时,释放的空间可以回收,以便于以后使用。创建使你可以指定一个参数FREESPACE指定每一个CI自由空间的比例。也可指定每个CA中自由空间的比例。

KSDS中,KEY可用于定位要插入的记录的位置,及读取已存在的记录。最有效地访问KSDS的方法是使用KEY。有以下几种方法:

用顺序的KEY访问可用于读、修改、增加、删除记录。当你指定了顺序的访问方法时,VSAM使用索引以升序或降序的顺序访问数据集。顺序处理可以从数据集的任何位置开始。

直接访问:同样也可用于读、修改、增加、删除记录。你可以指定一个KEY,以此KEY来访问数据集。这个KEY可以是完整的KEY,也可以不完整。比如:你可以指定一个不完整的KEYAB,后面是任何字符。

跳跃的顺序访问:同样也可用于读、修改、增加、删除记录。在这种方式下,VSAM只读选中的记录,并以升序或降序的顺序。

地址访问:以记录的RBA作为查找参数来访问。一般不建议这样访问。

LDS

LDSCI大小总是4096字节,无控制信息。应用去成组/分解逻辑记录。用DIVMACRO访问。

固定长度的RRDS:有多个固定长度的SLOT组成。每一个SLOT有一个相对记录号,SLOT以相对记录号排列。

可变长度的RRDS可变长度的RRDS与固定长度的RRDS类似,每一个记录也有一个惟一的相对记录号,并且也以相对记录号的顺序存放。但没有SLOT

你可以为一个KSDSESDS定义一个或多个次键索引。用它可以以与主键相同的方式访问数据集,次键可以不惟一,也就是说它可以指向多个数据记录。但是最多只能指向32767个记录。次键本身是一个KSDS,它包含索引组建和数据组件。数据组件中的记录含有次键,以及指向数据的指针。对ESDS来说,指针是RBA;对KSDS来说,指针是主键。在通过次键访问数据集之前,必须定义一个路径。可用DEFINEPATH命令来定义路径。

JCL定义VSAM数据集

除可变长度的RRDS外,任何类型的VSAM数据集都可以通过JCL来定义。

定义一个KSDS

//DDNAMEDDDSNAME=KSDATADISP=(NEWKEEP)

//SPACE=(80(202))AVGREC=URECORG=KS

//KEYLEN=15KEYOFF=0LRECL=250

其中:

DSNAME:数据集的名字。

DISP:创建新的数据集,并保留。

SPACE:记录长80,首次分配20,追加分配5

AVGREC:指示SPACE中指定的分配量的比例因子是1

RECORG:创建KSDS

KEYLEN:键长15

KEYOFF:键在记录中的位置。

LRECL:逻辑记录长250字节。

复制整个数据集:

//STEP1EXECPGM=IDCAMS

//SYSPRINTDDSYSOUT=A

//MASTERDDDSN=EXAMPLE.KSDS.MASTERDISP=OLD

//BKUPDDDSN=EXAMPLE.SAM.BACKUPUNIT=SYSDA

//SPACE=(TRK(21)RLSE)DISP=(NEWCATLG)

//VOL=SER=PUB101

//DCB=(RECFM=FBLRECL=80BLKSIZE=6120)

//SYSINDD*

REPROINDATASET(MASTER)

OUTDATASET(BKUP)

/*

可以只复制一部分记录。用FROMKEY指定从哪一个关键字开始,用FROMADDRESS

定从哪一个记录开始;TOKEY指定到哪一个关键字结束,TOADDRESS指定到哪一个记

录结束。例1.7

//STEP1EXECPGM=IDCAMS

//SYSPRINTDDSYSOUT=A

//SYSINDD*

REPROIDS(EXAMPLE.LASTNAME.INDEX)

ODS(EXAMPLE.EXTRACT.ESDS)

FROMKEY(DEAN)

TOKEY(LLOYD)

/*

归并两个数据集。

REPROIDS(INPUT)ODS(OUTPUT)REPLACE

定义次键

假定你有一个数据集叫PAYROLL.MASTER,其主键是雇员名字,你想建立一个次键。则:

1)定义次键:

DEFINEALTERNATEINDEX(NAME(PAYROLL.DEPT.AIX)

RELATE(PAYROLL.MASTER)

VOLUMES(AIX001)

UPGRADE)

DATA(NAME(PAYROLL.DEPT.AIX.DATA)

TRACK(55)

RECORDSIZE(2002096)

KEY(765)

NONUNIQUEKEY)

INDEX(NAME(PAYROLL.DEPT.AIX.INDEX)

IMBED)

2)定义路径:

DEFINEPATH(NAME(RAYROLL.DEPT.PATH)

PATHENTRY(PAYROLL.DEPT.AIX)

UPDATE)

3)在索引中装入数据:

BLDINDEXINDATASET(RAYROLL.MASTER)

OUTDATASET(PAYROLL.DEPT.AIX)

以后你在使用这个数据集时,如果你在JCL中的DD语句如下:

//DD1DDDSN=PAYROLL.MASTERDISP=SHR

则表示你使用主键访问该数据集。如果你在JCL中的DD语句如下:

//DD1DDDSN=PAYROLL.DEPT.AIXDISP=SHR则表示你使用次键访问该数据集。


使用访问控制服务的DELETE命令可以删除数据集


VSAM的编目

1、对数据集的编目实际是对数据集的入口建立列表和索引。

2、在z/OS系统中,主编目只有一个,它描述系统的数据集和用户编目,而用户编目则描述用户的数据集。

3、用户编目的建立是选择性的,主要目的是缩短编目的寻找时间。

4、z/OS系统中,编目结构只有两级。


IDCAMS(集成编目访问方法服务实用程序)

[格式]

//SYSINDD*

DEFINECLUSTER- /*续行标记 为“-”,切记

(NAME(ST018.EXAMPLE.KSDS1)-  /*子参数间不是用逗号隔开,而是空格,切记切记!

INDEXED-

VOLUNES(USER02)-

FREESPACE(2010)-

RECORDSIZE(100100))

[AMS命令的应用]

1、DEFINEMASTERCATALOG

建立主编目:

DEFINEMASTERCATALOG

(parameters)-

[DATA(parameters)]-

[INDEX(parameters)]-

[CATALOG(parameters)]-

2、DEFINEUSERCATALOG

建立用户编目:

DEFINEUSERCATALOG

(parameters)-

[DATA(parameters)]-

[INDEX(parameters)]-

[CATALOG(parameters)]-

3、DEFINECLUSTER(建立并定义VSAM数据集)

DEFINECLUSTER

(NAME(entryname)-

{CYCINDERS(primary[secondary])|-

RECORDS(primary[secondary])}-

[FREESPACE(cipercent[capercent])]-

[INDEXED|NONINDEXED|NUMBERED|LINEAR]-

[KEYS(LENGTHOFFSET)]-

[RECORDSIZE(averagemaximum)]-

[RECOVERY|SPEED]-

[SHAROPTIONS(crosspartition[crosssystem])]-

[VOLUMES(volser[volser...])])

[DATA

([NAME(entryname)])]

[INDEX

([NAME(entryname)])]

[CATALOG(mastercatname[/password])]


(1)NAME:指明VSAM数据集的名字,命名规则和其它数据集相同。

(2)CYLINDERS:以柱面为单位分配空间,仅限于磁盘数据集。Primary指第一次进行分配的数量,secondary指追加的分配数量。

(3)RECORD:以记录为单位进行数据集的分配。

(4)FREESPACE:给KSDS或者VRRDS中的每个CI和CA分别预留多少百分比的空间。默认为0;

(5)INDEXED:数据集类型为KSDS

(6)NONINDEXED:数据集类型为ESDS

(7)NUMBERED:数据集类型为RRDS,如果记录平均长度和最大长度不一样,则为VRRDS。

(8)LINEAR:数据集类型为LDS

(9)KEYS:说明数据集中索引的长度和起始位置。注意,偏移良是从零开始的。

(10)RECORDSIZE:分别指定记录的平均长度和最大长度。如果两值相等,则代表数据集的记录是定长格式

(11)VOLUME:卷标号

(12)DATA:代表KSDS数据集的数据部分

(13)INDEX:代表KSDS数据集的索引部分

4、REPRO

将记录存入数据集中、复制VSAM数据集、复制编目、分开编目或者合并编目。

REPRO{INDATASET(datasetname)|

INFILE(DDname)}</s

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics