第6章访问外部数据CICS 技术文档06.docx
- 文档编号:30735865
- 上传时间:2023-08-20
- 格式:DOCX
- 页数:30
- 大小:239.31KB
第6章访问外部数据CICS 技术文档06.docx
《第6章访问外部数据CICS 技术文档06.docx》由会员分享,可在线阅读,更多相关《第6章访问外部数据CICS 技术文档06.docx(30页珍藏版)》请在冰豆网上搜索。
第6章访问外部数据CICS技术文档06
CICS技术文档
第六章访问外部数据
本章我们介绍以下几方面的内容:
在程序中编写访问数据所需的数据申明;编写和则试相应的程序区分访问单个记录和记录集的区别;访问VSAM时的常见出错处理等。
CICS应用程序可以通过两种方式从直接访问存储设备(DASD)读取数据,一种是通过VSAM文件,另一种是通过对关系数据库的操作(SQL语句)。
获取外部数据的工作流程参见图6.1。
图6.1取外部数据的工作流程
从图6.1中可以清楚地看出两种访问方式的区别;
(1)对CICS操作中用到的所有VSAM文件来说,系统定义一个文件控制表(FCT)来记录相应信息,文件控制表中的每一条记录对应一个相应的VSAM文件。
而且只需要定义文件的描述信息,不需要定义文件的物理结构和其他属性。
在CICS命令的FILE参数中的文件名必须和FCT中的文件名一致。
(2)对关系数据库(RDB)而言,系统提供一个连接CICS应用程序和数据库的接口,称为CICS附加设施(CICSATTACHMENTFACILITY)。
程序员通过它,用SQL语句向数据库发出数据访间请求。
6.1VSAM文件简介
6.1.1VSAM文件类型
VSAM(VirtualStorageAccessMethod)文件是IBM公司在虚拟存储器和树型数据结构的基础,为了满足数据量大,存取速度快和维护方便的要求而发展起来的一种文件组织形式。
VSAM以索引键或相对字节地址来安排记录的存放位置、它支持直接访问和顺序访问两种方式。
顾名思义,宜接访问允许以任意次序直接访问记录;顺序访间则按存放的先后顺序,依次访问记录。
CICS支持以下三种VSAM类型
✧进人顺序数据集(EntrySequencedDataset)
✧键顺序数据集(KeySequencedDataset)
✧相对记录数据集(RelativeRecordDataset)
接下来就对对这三种类型的VSAM的结构和访问方式作简要介绍。
(1)进人顺序数据集(ESDS)
在ESDS中,记录以进人数据集的顺序安排其存放位置,新加人的记录加在数据集的末尾。
ESDS通过与数据集起点的偏移,即相对字节地址RBA(RelativeByteAddress),来定位.ESDS中的记录按进人数据集的顺序排列,记录只能被加到数据集末尾,记录可被修改,但记录的长度不能被改变,且记录不能被删除。
为了在ESDS中通过直接访问的方式访问记录,必须记住或计算记录的相对字节地址(RBA)然后通过它进行定位,从而找到所需记录的内容。
(2)主键顺序数据集(KSDS)
在KSDS中,记录以主键升序的顺序存放.记录既可以使用具有固定长度和固定偏移(在记录中)的主键值来访问。
也可以通过RBAt检索.记录可以通过顺序访问方式读取,也可以通过宜接访问方式读取。
记录可以在任意地方被添加、删除和更新。
KSDS的组织包括两个部分数据和索引。
(3)相对记录数据集(RRDS)
RRDS由一系列定长的槽组成,这些增按相对记录号升序排列.槽中包含记录数据,也允许为空、记录按相对记录号,通过宜接访问或顺序访问的方式,存取至相应的槽中.有两种RRDS数据集:
固定长度的RRDS,记录必须是定长的可变长度的RRDS,记录长度可变。
6.1.2VSAM文件结构
VSAM数据集中的数据除线性数据集外,都被组成记录(逻辑记录)。
逻辑记录是用户访问数据集的单位.VSAM的逻辑记录与非VSAM数据集的存储方式不同。
VSAM将记录存于CI(ControlInterval)。
一个CI是直接访问存储设备的一片连续区域,用于存储数据记录及控制信息。
当从直接存储设备上读取一个记录时,先包含要读的记录的整个CI从DASD上读到虚存的VSAM缓存中,然后再将用户要读的记录从VSAM缓存传输到用户定义的工作区。
一个VSAM数据集在一个卷上可以占用最多123个Extent,VSAM可以跨卷存储,但VSAM的每个部件最多占用255个Extent,另外每个VSAM文件一般最多占用4GB磁盘空间,但扩展格式VSAM不受此限制。
CI的大小在不同的VSAM数据集中可以不同,但在一个数据集中必须相同.在创建数据集时,你可以用以访问方法服务(AMS)的DEPINE命令指定CI的大小,也可以让系统自动选择CI的大小。
每一个CI含有如下信息:
(1)逻辑记录每一个CI中可能包含多个逻辑记录。
(2)自由空间每一个CI中可能含有一定的自由空间,用于插入新的记录。
(3)控制信息,主要为RDF和CIDF,RDF描述每一个记录的信息,而CIDF则描述整个CI的信息。
注意:
在线性(LDS)VSAM数据集中CI全部是数据,无控制信息。
6.2VSAM文件资源定义的方法
6.2.1VSAM文件定义步骤
VSAM文件定义的完整步骤如下:
。
一、DEFINEMASTERCATALOG
使用VSAM时,首先要利用AMSDEFINEMASTERCATALOG命令定义目录(MasterCatalog)。
二、DEFINEUSERCATALOG
主目录建好后,使用者可依实际需要利用AMSDEFINEUSERCATALOG命令定义次目录(UserCatalog)。
三、DEFINESPACE
定义好目录后,接着利用AMS的DEFINESPACE命令,在磁盘上预留一块位置VSAM用,以存放此目录下的文件资料。
通常前面的三步工作由管理员统一来做。
四、DEFINECLUSTER
目录及SPACE建好后,利用AMSDEFINECLUSTER命令定义一个VSAM档,在VSAM里所指的文件称为Cluster,它可为KSDS、ESDS、RRDS,使用者依实际需要选用之。
五、LOADFILE
上述步骤完成之后,VSAM档里是空的,应使用AMSREPRO命令或编写应用程序,将资料存入VSAM文件,完成第一次的建档工作也就是所谓的DataSetLoading。
但建KSDS时必须先将输入资料按资料记录键(RecordKey),由小而大加进行排序后,再进行数据装载。
数据装载工作完成后,就可编写应用程序或使用AMS命令存取文件中的资料。
6.2.2VSAM文件定义命令及参数
具体来讲VSAM数据集可以通过DEFINECLUSTER或ALLOCATE命令来定义。
当定义了CLUSTER后,VSAM使用三个编目项描述一个CLUSTER。
(1)一个CLUSTER项把CLUSTER描述为一个部件;
(2)一个数据项描述CLUSTER的数据部件;
(3)对KSDS来说,一个素引项描述CLUSTER的素引部件。
VSAM文件的属性如下
如果使用DEFINECLUSTER命令,数据和索引部件的属性可以与CLUSTER的属性分别指定。
如果为CLUSTER指定了属性,则CLUSTER的属性同样适用于部件。
如果为CLUSTER和部件都指定了属性,则部件的属性覆盖CLUSTER的属性。
如果用ALLOCATE,则只能在CLUSTER一级指定属性。
定义VSAM数据集时,要指定数据集的属性。
如果SMS子系统启动了,定义的数据集又是系统管理的数据集,则可以指定DATACLASS,MANAGEMENTCLASS和STORAGECLASS。
以下定义的是与VSAM数据集有关的描述性信息
(1)INDEXEDONINDEXEDNUMBEREDLINEAR书定数据集的结构形式信息(KSDS、ESDS、RRDS、LDS)。
(2)RECORDSIZE指定记录的平均和最大长度,不适用于LDS类型的VSAM数据集。
注意:
(1)可变长度的RRDS用NUMBERED和RECORDSIZE定义而平均记录长度和最大记录长度必须不同。
(2)如果对于ESDSJSDS或可变长度的RRDS数据集,记录长度小于最大记录长度,VSAM把实际记录的长度记录在RDF中。
(3)KEYS指示KSDS中键的长度和位置。
(4)CATALOG指示CLUSTER所在的编目的名字和口令。
(5)VOLUMES指示CLUSTER所在的卷。
(6)RECORDSKILOBYTESMEGABYTESTRACKSCYLINDERS:
表示分配该数据集的空间的单位及大小。
(7)BUFFERSPACE:
措示在处理该数据集时,应分配的最小的缓存。
以下定义的是与VSAM数据集有关的性能信息:
(1)CONTROLINTERVALSIZE;指定CI的大小。
此参数必须大于记录的最大值,对LDS类型的VSAM数据集无效。
(2)SPANNED指示记录是否可以跨CI。
不适用于RRDS和LDSLDS类型的VSAM数据集。
(3)IMBED指示是否将素引的顺序集放在相应的CA中。
如果是,则会提高数据集的性能,但会增加空间。
(4)索引组件的VOLUMES:
指示是否把索引组件放在另一个卷上。
(5)FREESPACE:
%示预留自由空间的大小。
以下定义的是与VSAM数据集时有关的安全信息:
(1)AUTHORIZATION;指定你自己的一个授权子程序,验证对此数据集的访问是否合法。
(2)WRITECHECK;指示对此数据集写后是否要校验,以保证以后能读出。
(3)ERASE指示数据集被删除后,是否要彻底删除。
6.2.3VSAM文件定义举例
下面的例子将创建一个名为YETAU.TEST.KSDS的VSAM文件。
作业首先将旧的文件删除,然后创建新的文件,接下来将顺序书聚集YETAU.TEST.SEQDS的记录装到YETAU.TEST.KSDS,然后将YETAU.TEST.KSDS数据集的详细信息列出。
这个作业中一共用四个IDCAMS命令:
DELETE,DEFINE,REPRO,LISTCAT
//YETAUVSMJOBACCOUNT),'YETAUVSAM',MSGCLASS=X,MSGLEVEL=(1,1),
//NOTIFY=&SYSUID,CLASS=C,REGION=8M
//*
//S1EXECPGM=IDCAMS
//SYSPRINTDDSYSOUT=*
//SYSINDD*
DELETE'YETAU.TEST.KSDS'
SETMAXCC=0
DEFINECLUSTER(-
NAME('YETAU.TEST.KSDS')-
RECORDS(3000100)-
RECORDSIZE(8080)-
VOLUMES(EDPAK1)-
KEYS(54)-
)-
DATA(-
NAME('YETAU.TEST.KSDS.DATA')-
)-
INDEX(-
NAME('YETAU.TEST.KSDS.INDEX')-
)
REPROIDS('YETAU.TEST.SEQDS')-
ODS('YETAU.TEST.KSDS')
LISTCATENTRIES('YETAU.TEST.KSDS')ALL
/
//
当然VSAM文件可以用ISPF的ALLOCATE方式创建。
6.3CICS程序访问文件的特点
CICS在线程序对文件的访问与批处理下对文件的访问有很大的区别。
首先批处理程序几乎可以访问MVS上的包括VSAM在内的各种类型的文件,而CICS目前只支持访问VSAM文件,对于其他类型的文件如QSAM,CICS本身不能直接支持,而必须借助其他途径才能访问。
其次,第三章已经提到,批处理程序中的文件节在CICS在线程序中已经不需要了。
因为CICS在线程序对文件的访问已经不是直接对文件系统进行访问,而是通过请求CICS的文件服务功能间接的对文件进行访问。
CICS在线程序不需要了解文件的物理特性,如文件类型,记录长度,物理位置等等信息,只要CICS文件控制程序了解就行了。
为了CICS文件控制程序了解所要访问的文件的各种特性,就需要在文件控制表(FCT)中对要用到的所有VSAM文件进行定义。
第三,CICS在线程序中文件的打开、关闭不需要CICS应用程序直接控制。
文件在下列情况下被打开:
(1)系统初始化后,在FCT有打开请求的文件被打开
(2)文件已关闭,应用程序又发出文件访问请求;
(3)操作员在主终端上发出CEMTSETFILE(FILENAME)OPEN请求。
CICS文件一旦打开后就不会关闭,直到CICS停止或用户用CEMTSETFILE(FILENAME)CLOSE请求才会关闭。
另外,在线程序不允许用COBOL的READ,WRITE命令直接对文件操作,而必须利用CICS提供的统一编程接口命令来请求CICS的文件服务程序来完成。
6.4访问VSAM文件的基本命令
CICS提供了以下几个API命令来对文件进行访问:
✧READ
✧WRITE
✧REWRITE
✧DELETE
✧STARTBR
✧READNEXT
✧READPREV
✧ENDBR
✧RESETBR
接下来就讲解这几个API命令的用法。
6.4.1文件记录的检索
检索记录通过READ命令来实现,句法如下;
EXECCICSREADINTO(DATA-AREA)
[LENGTH(DATA-AREA)]FILE(NAME)
RIDFLD(DATA-AREA)[RBA|RRN]
[GENERIC][KEYLENGTH(DATA-VALUE)]
[GTEQ|EQUAL]
在VSCOBOLII中,如果记录为定长,选项LENGTH就不需要了;如果用的是非完全键,在KEYLENGTH中一定要指明长度,并加上GENERIC选项;在最后一项的选项中,缺省值是EQUAL。
下面介绍一个今后会经常用到的概念:
记录标识字段(RecordIdentifyField,RIDFLD),里面存放的是将要读到的记录的标识信息,用来标识、定位VSAM文件中的记录。
主要包括下面四种:
(1)记录键值(Key)
(2)相对字节地址(RelativeByteAddress,RBA)
(3)相对记录号(RelativeRecordNumber,RRN)
(4)部分键值(PartialKey)
其具体形式和内容与VSAM文件类型有关。
(l)对于KSDS文件,所指定的主键可以是一个完全键,也可以是一个部分键。
在使用部分键时必须提供主键的长度,RIDFLD必须能容纳一个键的长度,即使在使用部分键时也同样如此。
另外,也可不使用真正的键值,而使用相对字节地址RBA。
(2)对于ESDS文件,RIDFLD包含一个4字节的相对字节地址RBA。
(3)对于RRDS文件,RIDFLD包含一个4字节的二进制的相对记录号(RRN)。
例:
WORKING-STORAGESECTION.
05RECLPICS9(4)COMP.
05RECKEYPICX(6).
PROCEDUREDIVISION.
MOVE80TORECL.
MOVEvalueTORECKEY.
EXECCICSREADFILE('FILEA')
INTO(FILEREC)
RIDFLD(RECKEY)
LENGTH(RECL)
END-EXEC.
设文件“FILEA’包含如下记录
FILE…000762000983001222001781…
则使用READ命令后,相应的参数和读到的记录结果参见下表:
READ命令使用的选项
READ的结果
GENERIC
KEYLENGTH
RIDFLD
省略
省略
EQUAL
000983
000983
省略
省略
EQUAL
000870
NOTFOUND
省略
省略
GTEQ
000870
000983
YES
4
EQUAL
0009
000983
YES
4
EQUAL
0008
NOTFOUND
YES
4
GTEQ
0008
000983
使用READ命令,最常见的异常处理条件有以下几种
(1)处理信息出错
NOTFND(直接检索时常见)指定主键值的记录在文件中找不到
ENDFILE(浏览时常见)已到文件尾
(2)应用程序出错
INVREQ非法请求
FILENOTFOUND文件名在FCT中找不到
ILLOGIC不包含在其他CICS响应类别中的其他VSAM错误
(3)外部条件
IOERR不在其他CICS用非正常情况中的特殊事件
DISABLED文件被禁用,很可能因为预先企图打开已失败或被管理员临时禁用
NOTOPEN文件已关闭
由于异常情况可能在执行CICS命令过程中的任何时候发生,所以必须用一个标准系统的默认行为来检则是否发生.可以通过READ命令中的RESP选项来不定时地检则任务状况。
RESP选项可以用来则试READ命令执行的反应。
RESP所带参数是一个用户定义的二进制全字数字可比较变量,用来和DFHRESP(XXXX)作比较.其中的XXXX即是上一段所列出的异常情况分类主键。
例如下面的句子就被用来检则是否有异常情况发生:
IFERR-CODENOTEQUALDFHRESP(NORMAL)
ERR-CODE为上一个CICS文件访问语句中的RESP选项所带的参数。
如果条件为真表示上一个文件访问语句执行时有异常。
下面给出一段检则异常情况的实例:
WORKINGSTORAGESECTION.
05RECLPICS9(4)COMP.
05RECKEYPICX(6).
05ERR-CODEPICS9(8)COMP.
PROCEDUREDIVIS1ON.
MOVE80TORECL.
MOVEvalueTORECKEY.
EXECCICSREADFILE('FILEA')
INTO(FILEREC)
RIDFID(RECKEY)
LENGTH(RECL)
RESP(ERR-CODE)
END-EXEC.
IFERR-CODENOTEQUALDFHRESP(NORMAL)
IFERR-CODEEQUALDFHRESP(NOTFND)
6.4.2文件记录更新和删除
在介绍了如何读取外部数据后,接下来要了解的就是怎样更新VSAM文件。
由于联机事务处理系统是一个典型的多用户环境,因此对数据的更新和删除我们更是要考虑一致性和完整性。
一致性包括对两种情况的保护:
1)不可预料的中断
这包括以下几种典型情况:
✧程序异常终止;
✧物理灾害,如断电、雷击、水灾、恐怖袭击等;
✧操作员误操作等。
2)并发访问引起的资源冲突。
即当多个用户更新同一资源时,CICS也需要提供对资源的保护,保证数据的一致性。
CICS通过在两个不同的层次上的排他控制来对VSAM文件提供一致性保证。
(1)VSAM排他控制
这种保护包含了所有要请求更新的记录的鳖个控制段(CI),这种保护自动进行,并且从READUPDATE到REWRITE,即持续整个更新周期。
(2)CICS排他控制
保护资源不被另一个CICS任务使用,它在LUW(逻辑工作单元)完成前通过延长任务进人队列的持续时间来达到目的,但只有对被定义为可恢复的文件才提供这种保护。
关于一致性保护的排他控制,参见表6.1。
表6.1
持续时间
作用范围
VSAM
整个改变过程
整个CI
CICS
整个逻辑工作单元
逻辑记录
但请注意如果使用的是VSAMSHAREOPTIONS(3)或(4),CICS就不能保证其一致性,因为可能会受到来自其他CICS区域的更新操作的影响。
由于CICS是一个多用户的系统,所以必须提供这样的保护来确保更新资源的程序是唯一正在改变这个资源的。
CICS在整个更新过程完成前可以通过回滚所有更新来确保数据一致性。
当用户任务出现错误时,CICS撤消失败的任务以及该任务所作的修改,并回滚到任务执行前的状态;而当系统出现错误时,在下一次重启时,CICS将撤消系统错误时正在运行的所有任务及它们所作的修改。
CICS将所有在逻辑工作单元(LUW)中的更新行为认作一个可恢复的单元。
当你发出第一个更新文件的请求时LUW就开始了,直到同步点(SYNCPOINT)命令发出,它才停止,处于读过程中的任务叫做飞行中(In-flight)的任务。
应用程序可以通过SYNCPOINTROLLBACK命令在当前的LUW中回滚所有的修改。
当一个任务结束时,CICS会自动产生一个SYNCPOINT,此时,所有的更新才被提交。
你也可以自己发出SYNCPOINT命令,让应用程序决定在这个LUW中可包含多少个更新请求。
如果在一个LUW中产生了一个错误,CICS便撤消所有发生在可恢复资源上的更改,恢复到LUW开始时的状态。
一个长时间运行的会话任务应该包含SYNCPOINT命令,来确保如果在运行过程中出错,能及时方便地保护数据。
前面提到过的VSAM排他控制在下列情况之一出现时释放:
(1)修改过的记录已重新写回文件;
(2)要更新的记录被删除;
(3)用UNLOCK命令取消更新操作;
(4)整个任务终止。
而CICS排他控制则不同,它只在接收到一个显式的SYNCPOINT命令或任务结束时才终止。
接下来介绍对VSAM文件进行修改的命令若REWRITE,语法如下:
EXECCICSREWRITEFROM(data-area)
[LENGTH(data-value)]
FILE(name)
END-EXEC.
注意,REWRITE命令一定要跟在一个READUFDATE命令之后才有效,而且修改记录时,主主键字段是不可以被修改的,也不能重复。
而删除文件中的数据可以用DELETE命令,语法如下:
EXECCICSDELETE[RIDFLD(data-area)]
FILE(name)
[KEYLENGTH(data-value)]
[GENERIC[NUMREC(data-area)]]
[(RBA|RRN)]
只有主键顺序数据集(KSDS)结构和相对记录数据集(RRDS)结构的VSAM文件中的记录才可以被删除,这与它们的数据存放方式有关。
顺序连续数据集(ESDS)结构中,记录按进人的顺序排放,新记录只能加到文件尾,所以只能更新,不能删除,而且更新时不可改变长度。
如果该记录在请求删除前正被更新,那么参数RIDFLD可以不指定,默认为当前记录。
如果使用GENERIC参数,表明同时删除一批记录,这时一定要指定KEYLENGTH,即所使用的键的长度,同时NUMREC指出要删除的记录的条数。
更新数据的异常处理。
大部分在更新数据时出现的异常情况类型与读取数据时一样,但有一种是在读取数据时不会出现的,那就是NOSPACE,它与其他三种:
LENGERR、INVREQ以及ILLOGIC含义不同。
详见下面的说明
(1)LENGERR
将要写人的记录长度没有指定或太长。
(2)NOSPACE
文件没法再放在它原先的那部分空间。
原因是文件中可变长记录的长度被增加了。
(3)INVREQ
非法请求,多由以下原因所致:
在重写入一个记录前没有运行过READUPDATE命令或者,在一个READUPDATE发出的更新请求
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第6章访问外部数据CICS 技术文档06 访问 外部 数据 CICS 技术 文档 06