http://blog.csdn.net/uniqueren/archive/2008/12/04/3446538.aspx
VSAM学习(1) 收藏
VSAM(Virtual Storage Access Method)文件主要有以下几种形式:
1.键顺序文件KSDS
2.输入顺序文件ESDS
3.相对记录文件RRDS
4.线性文件LDS
VSAM 文件结构:
VSAM 数据集中的数据除线性数据集外,都被组成记录(逻辑记录)。逻辑记录是用户访问
数据集的单位。·
CI(Control Interval):
一个CI 是直接访问存储设备的一片连续区域,用于存储数据记录及其控制信息。当从直接存储设备上读取一个记录时,包含要读的记录的整个CI 都被读到虚存的VSAM I/O 缓冲中,然后用户要读的记录才从VSAM 缓冲传输到用户定义的工作区。一个VSAM 数据集在一个卷上可以占用最多119 到123 个Extent,或者占用4,294,967,
296 个字节。
每一个CI 含有如下信息:
逻辑记录:每一个CI 中可能包含多个逻辑记录。
自由空间:每一个CI 中可能含有一定的自由空间,用于插入新的记录。
控制信息:主要为RDF 和CIDF,RDF 描述每一个记录的信息,而CIDF 则描述整个CI的信息。
注意:在线性数据集中,CI 全部是数据,无控制信息。
CA(Control Area):
VSAM数据集中的多个CI成组为直接访问存储设备中的一片连续区域称之为CA,一个VSAM 数据集由一个以上的CA 组成。CA 最大为一个柱面,最小必须是一个磁道。在定义数据集时可以用SPANNED 参数指定记录可以跨多个CI。
ESDS:
类似顺序文件。其记录长度可固定也可不固定,新记录只能加在数据集的末尾,已存在的记录不可被删除,如果你一定要删除一个记录,你只能把这个记录标记为不活跃,实际上并未被删除。记录的内容可以被修改但不能改变其长度。访问这样的数据通过其RBA(Relative Byte Address)来进行,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,也可以不完整。比如:你可以指定一个不完整的KEY AB,后面是任何字符。
跳跃的顺序访问: 同样也可用于读、修改、增加、删除记录。在这种方式下,VSAM 只读选中的记录,并以升序或降序的顺序。
地址访问:以记录的RBA 作为查找参数来访问。一般不建议这样访问。
LDS:
LDS的CI大小总是4096字节,无控制信息。应用去成组/分解逻辑记录。用DIV MACRO访问。
固定长度的RRDS:有多个固定长度的SLOT 组成。每一个SLOT 有一个相对记录号,SLOT以相对记录号排列。
可变长度的RRDS: 可变长度的RRDS 与固定长度的RRDS 类似,每一个记录也有一个惟一的相对记录号,并且也以相对记录号的顺序存放。但没有SLOT。
你可以为一个KSDS 或ESDS 定义一个或多个次键索引。用它可以以与主键相同的方式访问数据集,次键可以不惟一,也就是说它可以指向多个数据记录。但是最多只能指向32767个记录。次键本身是一个KSDS,它包含索引组建和数据组件。数据组件中的记录含有次键,以及指向数据的指针。对ESDS 来说,指针是RBA;对KSDS 来说,指针是主键。在通过次键访问数据集之前,必须定义一个路径。可用DEFINE PATH 命令来定义路径。
用JCL 定义VSAM 数据集
除可变长度的RRDS 外,任何类型的VSAM 数据集都可以通过JCL 来定义。
定义一个KSDS
//DDNAME DD DSNAME=KSDATA,DISP=(NEW,KEEP),
// SPACE=(80,(20,2)),AVGREC=U,RECORG=KS,
// KEYLEN=15,KEYOFF=0,LRECL=250
其中:
DSNAME:数据集的名字。
DISP:创建新的数据集,并保留。
SPACE:记录长80,首次分配20,追加分配5。
AVGREC:指示SPACE 中指定的分配量的比例因子是1。
RECORG:创建KSDS 。
KEYLEN:键长15。
KEYOFF:键在记录中的位置。
LRECL:逻辑记录长250 字节。
复制整个数据集:
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//MASTER DD DSN=EXAMPLE.KSDS.MASTER,DISP=OLD
//BKUP DD DSN=EXAMPLE.SAM.BACKUP,UNIT=SYSDA,
// SPACE=(TRK,(2,1),RLSE),DISP=(NEW,CATLG)
// VOL=SER=PUB101,
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=6120)
//SYSIN DD *
REPRO INDATASET(MASTER) –
OUTDATASET(BKUP)
/*
可以只复制一部分记录。用FROMKEY 指定从哪一个关键字开始,用FROMADDRESS 指
定从哪一个记录开始; 用TOKEY 指定到哪一个关键字结束, 用TOADDRESS 指定到哪一个记
录结束。例1.7:
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
REPRO IDS(EXAMPLE.LASTNAME.INDEX) –
ODS(EXAMPLE.EXTRACT.ESDS) –
FROMKEY(DEAN) –
TOKEY (LLOYD)
/*
归并两个数据集。
REPRO IDS(INPUT) ODS(OUTPUT) REPLACE
定义次键
假定你有一个数据集叫PAYROLL.MASTER,其主键是雇员名字,你想建立一个次键。则:
1) 定义次键:
DEFINE ALTERNATEINDEX (NAME(PAYROLL.DEPT.AIX) –
RELATE(PAYROLL.MASTER) –
VOLUMES(AIX001) –
UPGRADE) –
DATA (NAME(PAYROLL.DEPT.AIX.DATA) –
TRACK (5 5) –
RECORDSIZE(200 2096) –
KEY (7 65) –
NONUNIQUEKEY) –
INDEX (NAME(PAYROLL.DEPT.AIX.INDEX) –
IMBED)
2) 定义路径:
DEFINE PATH(NAME(RAYROLL.DEPT.PATH) –
PATHENTRY(PAYROLL.DEPT.AIX) –
UPDATE)
3) 在索引中装入数据:
BLDINDEX INDATASET(RAYROLL.MASTER) –
OUTDATASET(PAYROLL.DEPT.AIX)
以后你在使用这个数据集时,如果你在JCL 中的DD 语句如下:
//DD1 DD DSN=PAYROLL.MASTER,DISP=SHR
则表示你使用主键访问该数据集。如果你在JCL 中的DD 语句如下:
//DD1 DD DSN=PAYROLL.DEPT.AIX,DISP=SHR 则表示你使用次键访问该数据集。
使用访问控制服务的DELETE 命令可以删除数据集
VSAM的编目
1、对数据集的编目实际是对数据集的入口建立列表和索引。
2、在z/OS系统中,主编目只有一个,它描述系统的数据集和用户编目,而用户编目则描述用户的数据集。
3、用户编目的建立是选择性的,主要目的是缩短编目的寻找时间。
4、z/OS系统中,编目结构只有两级。
IDCAMS(集成编目访问方法服务实用程序)
[格式]
//SYSIN DD *
DEFINE CLUSTER - /*续行标记 为“-”,切记
(NAME(ST018.EXAMPLE.KSDS1) - /* 子参数间不是用逗号隔开 ,而是空格,切记切记!
INDEXED -
VOLUNES(USER02) -
FREESPACE(20 10) -
RECORDSIZE(100 100) )
[AMS命令的应用]
1、DEFINE MASTERCATALOG
建立主编目:
DEFINE MASTERCATALOG
(parameters) -
[DATA(parameters)] -
[INDEX(parameters)] -
[CATALOG (parameters)] -
2、DEFINE USERCATALOG
建立用户编目:
DEFINE USERCATALOG
(parameters) -
[DATA(parameters)] -
[INDEX(parameters)] -
[CATALOG (parameters)] -
3、DEFINE CLUSTER (建立并定义VSAM数据集)
DEFINE CLUSTER
(NAME(entryname) -
{CYCINDERS (primary [secondary])| -
RECORDS (primary [secondary])} -
[FREESPACE (cipercent [capercent])] -
[INDEXED | NONINDEXED | NUMBERED | LINEAR] -
[KEYS(LENGTH OFFSET)] -
[RECORDSIZE(average maximum)] -
[RECOVERY | SPEED] -
[SHAROPTIONS(crosspartition [cross system])] -
[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(data set name)|
INFILE(DDname)}
{OUTDATASET(data set name)
OUTFILE(DDname)}
[NOREPLACE | REPLACE]
[NOREUSE | REUSE]
5、LISTCAT
显示编目的一部分或者全部信息
LISTCAT[CLUSTER | USERCATALOG]
[CATALOG (catname)]#说明要显示的数据集的编目信息
[ENTRIES(entryname)]#说明编目中的哪一个数据集信息需要显示
[NAME | ALL]# 把编目中指定的名称显示出来,ALL是显示所有的信息
********************一个例子*********************************
000100 //ST018A JOB ACCT#,'TRAINER',CLASS=A,NOTIFY=&SYSUID,
000200 //MSGCLASS=X,MSGLEVEL=(1,1)
000300 //STEP1EXEC PGM=IDCAMS
000400 //SYSPRINT DD SYSOUT=*
000500 //SYSINDD *
000600 DELETE 'ST018.VSAM.KSDS1'
000700 SET MAXCC = 0
000800 DEFINE CLUSTER -
000900 (NAME(ST018.VSAM.KSDS1) -
001000 INDEXED -
001100 VOLUME(USER02) -
001200 RECORDS(4000,100) -
001300 RECORDSIZE(80 80) -
001400 CONTROLINTERVALSIZE(4096) -
001500 KEYS(5,4))
001600 IF LASTCC=0 THEN -
001700DO
001800 REPRO INDATASET(ST018.SDS.DATA) -
001900O UTDATASET(ST018.VSAM.KSDS1)
002000IF LASTCC=0 THEN -
002100DO
002200 LISTCAT ENT(ST018.VSAM.KSDS1) ALL
002300 PRINTINDATASET(ST018.VSAM.KSDS1) DUMP -
002400 FROMKEY(00100) TOKEY(00300)
002500 IF LASTCC=0 THEN -
002600 DO
002700 LISTCAT ENT(ST018.VSAM.KSDS1) ALL
002800 DELETE 'ST018.VSAM.KSDS1'
002900 DEFINE CLUSTER -
003000 (NAME(ST018.VSAM.KSDS1) -
003100 INDEXED -
003200 VOLUME(USER02) -
003300 RECORDS(3000 100) -
003400 RECSZ(80 80) -
003500 KEYS(5 4) -
003600 CONTROLINTERVALSIZE(4096) -
003700 FREESPACE(10) -
003800 BUFFERSPACE(50000))
003900 LISTCAT ENT(ST018.VSAM.KSDS1) ALL
004000 END
004100 END
004200 ELSE -
004300 LISTCAT ENT(ST018.VSAM.KSDS1) ALL
004400 END
004500 //
要注意的几个地方:
1、KSDS里的KEY 不能重复,切记切记。
2、VSAM数据集可以JCL语句或3.2界面进行创建。
3、对VSAM数据集的操作必须使用M.7(DITTO)或者JCL直接调用
4、AMS里头的子参数是用空格隔开的,而非逗号,切记!
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/uniqueren/archive/2008/12/04/3446538.aspx
分享到:
相关推荐
ISAM(Indexed Sequential Access Method)和VSAM(Virtual Storage Access Method)是两种早期的数据库管理系统中使用的索引文件格式,它们提供了快速的查找和访问能力。 在实际应用中,数据库文件的管理往往涉及...
- 练习1:JOB、EXEC和DD语句 - DD参数 - 练习2:JOB、EXEC和DD语句(续) - 练习3:DD参数 #### 第二天 - AMS实用程序介绍 - 过程 - 练习4:AMS实用程序 - AMS JCL标准 - 练习5:过程 #### 第三天 - 高级主题 - ...
1. **处理VSAM文件数据**:VSAM(Virtual Storage Access Method)是一种高性能的文件系统,CICS提供了直接访问VSAM文件的接口。 2. **处理DB2关系数据库数据**:DB2是IBM的旗舰级关系数据库管理系统,CICS与DB2的...
- VSAM文件的优点在于动态调整,无需预分配空间,且能快速查找。 - 快速排序在已排序或接近排序时效率最低,而在随机分布时效率最高。 - 广义表操作提取banana的表达式是GetTail(GetTail(GetHead(L)))。 - 最优...
- **DataStage**提供了丰富的数据源接口,如DB2、Informix、Oracle、Sybase、SQL Server、Teradata、OleDB、SAS、Text、Excel、SAP、PeopleSoft、IMS、VSAM on 390、FTP、XML、Message Queue等,覆盖了大部分常见...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。学了数据结构后,许多以前写起来很繁杂的代码现在写起来很清晰明了. 本书的前半部分从抽象数据类型的...
这些功能的实现依赖于先进的图像处理和机器学习算法。人脸识别技术通过捕捉和分析面部特征,可以有效地进行身份验证和追踪特定个体。颜色识别则有助于在特定场景下筛选和追踪目标,如在人群中寻找特定衣着的人。 ...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参考教材。本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和排序的...
《数据结构》(C语言版)是为“数据结构”课程编写的教材,也可作为学习数据结构及其算法的C程序设计的参数教材。 本书的前半部分从抽象数据类型的角度讨论各种基本类型的数据结构及其应用;后半部分主要讨论查找和...
### 100 Cool Mainframe Tips - 关键知识点解析 #### ISPF (Interactive System ...综上所述,通过学习这些技巧和关键知识点,开发者能够更高效地利用大型机环境中的各种工具和技术,提高开发效率和产品质量。
在我国学习计算机的人中很少有不知道谭浩强教授的。他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校...
在我国学习计算机的人中很少有不知道谭浩强教授的。他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校...
#### 1. z/OS 和 z/OS UNIX - **z/OS**: IBM 的企业级操作系统,专为大型机设计,提供了高度可靠、可扩展且安全的计算环境。 - **z/OS UNIX**: z/OS 操作系统中实现了对 UNIX 标准的支持,允许用户在 z/OS 环境中...