1、VSAM:即虚拟存储访问方式;使用VSAM组织数据,管理数据信息的文件称为VSAM文件。VSAM文件所在的数据集称为VSAM数据集.VSAM文件的分类:LDS:线性数据集(Linear Data Set)ESDS:进入顺序数据集(Entry Sequenced Data Set)RRDS:相对记录数据集(Relative Record Data Set)KSDS:索引顺序数据集(Key Sequence Data Set)VRRDS:变长相对记录数据集(Variable-length Relative Record Data Set)LDS的定义LDS即线性数据集(linear data se
2、t),LDS是最简单的 一类VSAM数据集,只包含数据,不含任何控制信息。LDS通常仅用于保存和备份数据。LDS的结构及特征LDS中仅包含数据部分,这些数据是纯粹的数据,没有形成逻辑记录。因此LDS的CI(Control Interval)中没有RDF(Record Definition Field)和CIDF(CI Data Field)控制信息的。这一点是LDS区别于其他VSAM数据集的最大特点。LDS有多个CA(Control Area)组成,并且每个CA由由多个CI组成LDS的基本结构图 CI CA CI LDS CI CA CI数据数据数据数据LDS有某些特征如下LDS由ICF进行编
3、目管理,而没有记录管理。LDS中仅含有数据部分,而没有索引部分。在LDS中不能定义次索引。在LDS中不能使用Spanned Record技术。LDS中CI的大小最小为4KB,最大为32KB。LDS中的CI不含控制信息RDF以及CIDF。COBOL应用程序必须清楚LDS中各段数据所表示的意义。RRDS的定义RRDS即相对记录数据(Relative Record Data Set),在RRDS中存在着许多固定的区域,称为Slot。RRDS中的数据便是存放在这些Slot之中。RRDS的结构及特征RRDS结构上最大的特点是每一个CI中的数据部分被划分为等长的SLOT。这些Slot都被进行了编号,称之为
4、相对记录号码RRN(Relative Record Number)。RRDS的基本结构 CI CI CI CI CACARRDSslot1slot2未使用空间未使用空间RDF2RDF1CIDFslot3slot4未使用空间未使用空间RDF4RDF3CIDFslot5slot6未使用空间未使用空间RDF6RDF5CIDFslot7slot8未使用空间未使用空间RDF8RDF7CIDFRRDS主要有以下特征:RRDS只有数据部分逻辑记录按RRN进行存放逻辑记录只能为定长记录逻辑记录可以删除,并将其所占Slot置为空状态在创建RRDS时不能预留Free Space 可以更新逻辑记录的内容,但是不可以
5、改变逻辑记录的长度不能建立次索引不能改变逻辑记录的RRNRRDS的访问方式RRDS的访问方式通常有顺序访问和直接访问方式两种。对于顺序访问,应该注意一下两点:访问的顺序依据RRN的值从小到大的顺序顺序访问时,对于空的Slot,VSAM文件管理自动跳过当对RRDS直接访问时,将主要根据记录的RRN进行。对于直接访问方式,应该注意以下两点:VSAM文件系统将在内部把所提供的RRN转换为RBA(Relative Byte Address),以对记录进行访问不可直接使用RBA访问RRDS中的数据ESDS的基本概念ESDS即进入顺序数据集(Entry Sequenced Data set)。ESDS中数
6、据的存放必须依照先后顺序进行,并且新增的数据必须在原数据的末尾添加。ESDS的结构ESDS中仅有数据部分,不过其中的数据并非线性的,ESDS中的数据形成了相对独立的逻辑记录,并且每一记录主要通过相对字节位置RBA进行识别。在ESDS中包含有RDF和CIDF控制信息。ESDS的特征ESDS中仅含有数据部分,并且数据形成了逻辑记录。逻辑记录既可为定长记录,也可为变长记录。逻辑记录不可删除,不过可以进行逻辑隐藏。新的数据只可在原数据末尾进行添加。对逻辑记录进行顺序访问时,也可进行直接访问。当对逻辑记录进行顺序访问时,访问顺序为记录插入顺序。当对逻辑记录进行直接访问时,根据记录的RBA进行访问。支持s
7、panned record技术。在创建时不能预留free space。可以更新数据记录的内容,但不能改变原有记录的长度。不能改变资料记录的RBA。ESDS的访问方式顺序访问方式当对ESDS进行顺序访问时,所访问的数据记录将根据记录的存放顺序自动查找获得。直接访问方式直接访问方式是通过ESDS文件中的逻辑记录的RBA进行访问的。逻辑记录的RBA值和该记录在ESDS文件中的位置有关。第一条记录的RBA为0.对访问方式的说明ESDS中的逻辑记录不可在物理上进行删除,因为会影响到后面记录的RBA值,不过在应用程序中,可将其内容视为空,以此从逻辑上将其删除,实现逻辑隐藏。ESDS中的内容可以被更改,但长
8、度不可被更改。ESDS可访问的逻辑记录包括定长记录,变长记录,以及spanned record。ESDS文件添加记录时,只能在原数据的末尾进行添加。Spanned Record技术简单的说就是当逻辑记录的长度大于一个CI的大小时,将其进行切分,并分别使用多个CI进行存放。该技术仅使用与ESDS文件和KSDS文件。使用Spanned Record 技术处理的逻辑长度应该大于一个CI的大小。所处理的记录以CI的大小为单位进行分割,并将分割后的内容分别存放在多个CI中。存放逻辑记录分段的每个CI中应有连个RDF控制信息,以保证其连贯性。Spanned Record技术只可跨越多个CI进行,而不可跨越
9、CA。当逻辑记录的长度大于CI的大小减去7倍的RDF与CIDF大小之和时,将对其进行处理。整个逻辑记录的最大长度为一个CA的大小减去其中控制信息的长度。必须使用MOVE模式对其进行访问。程序的工作区域和I/O区域必须足够大,空间大小至少要大于最大的Spanned Record的长度。KSDS结构和特征与ISAM(Index Sequence Access Method)文件一样,KSDS文件根据用户在每个记录中所定义的键字段作为次序,也就是文件中的记录根据在每个记录中的键字段的排序序列而定位,每个记录在键字段有唯一的一个值。VSAM使用与每个记录相结合的键,把记录插入到文件中,或者从文件中检索
10、记录,记录的存取次序可以是随机的,也可以是顺序的。VSAM 文件可以有多个索引。这就是指文件中的记录,既有主键,也有次级键(AIX:Alternate Index,替换键),但最多能有253 个次级键,可以是记录中的任何字段,但必须有固定的长度和位置。替换键与主键一样具有同样的功能,而且,与主键相比,替换键的键值不必是唯一的值,因此在应用处理中允许用户能充分利用其灵活性。数据记录 数据记录 。数据记录 KEY10 KEY88 KEY1000 根据数据记录的键顺序而组织的键顺序文件KSDS即索引顺序数据集(Key Sequenced Data Set)最主要的特点是通过索引来组织和管理其中的数据
11、。在KSDS文件中,每条逻辑记录中的同一位置都有唯一的一个关键字(key)需要注意的几点:Key为定长数据,且位于每条逻辑记录中的相同的位置。逻辑记录根据Key值的升序排列存放在文件之中。每一个Key的值必须唯一,以确定逻辑记录在文件中的排序序列。Key的值必须严格按从小到大的顺序连续排列。一旦Key的值被设定后,该值不可被更改。不过,可以将包含该Key的整条逻辑记录删除,这样同时也将该Key删除。在KSDS中主要涉及:索引部分和数据部分索引设施:IS(Index Set)和顺序设施:SS(Sequence Set);KSDS的索引部分是在对其载入数据时自动建立的。并且,索引部分的SS包含所对
12、应CA中每条CI的一个入口。该入口为对应CI中最大的Key值。而IS则相应的包含每条SS的一个入口;CA里的每一行代表其中的一个CI。CI中每一个单元格代表其中的一个逻辑记录,单元格中的数值表示该逻辑记录的Key值。在KSDS中,逻辑记录是按照记录关键字(Record Key)的升序存放的。IS:Indexed Set 索引设施。SS:Sequence Set 顺序设施。CI:Control Interval 表示在一次I/O操作中数据的转移量。CA:Control Area 由多个CI组成。KSDS 的访问方式KSDS 的访问方式包含有顺序访问方式和直接访问方式这两种。对于顺序访问方式,需要
13、注意一下几点:顺序访问通过SS 中的Key 值对数据进行访问。访问顺序既可为升序,也可为降序。当一个CA 中的数据遍历完后仍未找到所求数据,将通过SS 中的水平指针 FS 访问下一 CA.可从 KSDS 文件中的任何一个位置开始顺序访问。当对 KSDS 中的数据记录进行直接访问时,将从 KSDS 的索引部分开始进行访问。对于直接访问方式,需要注意以下几点:直接访问从索引部分中最高一层的 IS 开始访问。通过索引部分层级之间的向下指针搜寻可能包含有所记录的 CA 及 CI。检索可能包含有所记录的整条 CI,以对记录进行访问,或判断该记录不存在。CI的分割结合例子来讲解 如果需要新增一个Key值为
14、1024的逻辑记录,根据Key值顺序,只能在CI1中添加。并且,该逻辑记录应该添加在Key值为1019和1350的这两个逻辑记录之间。由于CI1已没有更多的空间装下该条逻辑记录,将会把CI1中的逻辑记录对等分割为两半。其中一半逻辑记录将存放在该CA中空白的CI3中。添加该记录后的KSDS内容如图所示。SS KSDS 原始数据 CI 0CA CI 1 CI 2 CI 3 092814572705FS0715082409100928093609751019135014572089213725272705SS CI分割后KSDS的内容 CI 0 CI 1CA CI 2 CI 309281019145
15、72705FS07150824091009280936097510192089213725272705102413501457CA的分割如果对KSDS新增数据时,CA中没有空白CI用于进行CI分割了,将进行CA分割。例如,当在以上KSDS中再新增两个Key值分别为2107和2348的逻辑记录,KSDS数据部分内容将如图所示。需要注意的是,由于此时存在两个CA,因此索引部分中相应的也有两个SS。同时,这两个SS的上层IS中的数值也应相应地改变。因此,CA分割后,该KSDS的索引部分内容应该如图所示。CI 0 CI 1 CA 0 CI 2 CI 3 CA 分割前数据部分 0936097510190
16、715082409100928 CI 0 CI 1CA 1 CI 2 CI 3 CA分割后数据部分内容 2348252727052089210721371024135014570928145709281019FS145721372705FSCA分割后索引部分的内容分割后索引部分的内容次索引技术定义次索引为逻辑记录提供次级key,同主索引中key进行交互,以提高记录访问效率。每条次索引中所包含的数据信息:标题信息次关键字一个或多个指向主数据集中逻辑记录的指针指针类别主数据集是KSDS,指针为主关键字的值。主数据集为KSDS,指针为RBA的值在程序中指定VSAM文件对于COBOL程序而言,在对VS
17、AM处理之前需在环境部和数据部对其进行指定。VSAM在系统中的名称为VKSDS,接下来我们对各项参数分别介绍:KSDA文件在COBOL程序中:ORGANIZATION:用于指定VSAM文件的逻辑结构。通常可以为SEQUENTIAL或INDEXED,默认是为SEQUENTIAL。ACCESS MODE:用于指定对该VSAM文件的访问模式。通常可以为SEQOENTIAL、RANDOM或DYNAMIC。Sequential对应顺序访问方式;RANDOM对应直接访问方式;DYNAMIC既可以为顺序访问方式又可以为直接访问方式。RECORD KEY:用于指定Key在程序中的名称。FILE STATUS:
18、用于反映VSAM文件被读取或写入的状态。VSAM文件在COBOL程序中对于VSAM文件在数据部中的指定,主要需要注意一下几点。通过LABLE RECORD IS(ARE)STANDARD指明该VSAM文件是否含有标(label)。通过DATA RECORD IS(ARE)定义该VSAM文件中逻辑记录在程序中的名称。通过COPY命令将逻辑记录复制到程序工作区域中.VSAM文件在数据部中默认BLOCK CONTAINS 0 RECORDS一项。可默认RECORD CONTAINS n CHARACTERS一项。VSAM文件的打开和关闭在对VSAM文件进行任何处理之前,首先需要打开该文件。并且,为保
19、护文件数据,在程序结束后也应该关闭该文件。打开和关闭文件是通过OPEN和CLOSE命令进行的。并且,在打开的文件中需要指明该文件用来输入、输出还是中间文件。以下为打开和关闭VSAM文件的相应代码。PROCEDURE DIVISION.OPEN INPUT KS-FILE01,KS-FILE02 I-O RR-FILE OUTPUT ES-FILE.CLOSE KS-FILE01,KS-FILE02,RR-FILE,ES-FILE.STOP RUN.VSAM文件的读取顺序读取方式 相应的代码如下:READ KS-FILE01 NEXT RECORD AT END GO TO 100-TEST-E
20、ND END-READ.随机读取方式 相应的代码如下:READ KS-FILE02 KEY IS TEST-RCD-KEY INVALID KEY GO TO 200-TEST-ABEND END-READ.动态读取方式 动态读取方式是顺序读取方式和随机读取方式的综合。Write(写入)和 Rewrite(改写)在VSAM中write和rewrite操作与正常文件基本相同,其形式为:WRITE A FROM B.REWRITE A FROM B.与其他write和rewrite的区别在于:write可以用于output和I-O模式下打开的VSAM文件。rewrite只能用于I-O模式下的VSA
21、M文件所写入和改写的名称应该为记录名,而不是文件名,如:WRITE KS01-RCD FROM TEST-REC01.REWRITE RR-RCD FROM TEST-RCD02.VSAM文件的删除当需要对VSAM文件中的记录进行删除时,可以使用DELETE命令,一下为删除VSAN文件中记录的相应代码:DELETE KS-FILE01 RECORD INVILID KEY DISPLAY DELETE FAILED.其中INVILID KEY 从句指明当删除失败时的操作 START 语句当处理的VSAM文件为索引文件时(KSDS),在COBOL中还可以提供指针定位功能 相应代码如下:START KS-FILE02 KEY TEST-VALUE INVILID KEY DISPLAY NO SUCH RECORDVASM文件的处理方式:在线(ONLINE)方式批处理(BATCH)方式ONLINE方式:此时VASM文件不用在COBOL程序中进行打开和关闭。所用到的文件将在CICS打开。同时,该方式下可以实现多终端对文件的操作,而不必等待用户或资源。BATCH方式:VASM文件必须在COBOL程序中进行打开和关闭。同时,每次只能有一个作业可以对该文件进行操作。其余作业需要等到该作业结束后,才可对其所占用的VASM文件进行操作。