大型机文件系统与windows、*nux的树形文件系统都不同。
它没有层级目录树的概念,也不使用面向字节流的文件。
大型机文件是面向记录的,没有回车换行、文件结束符。
文件的组织形式有很多种,顺序文件,索引访问文件等等,还没搞清楚。
大型机里把文件叫做数据集(DATA SET),
数据集的主要信息(数据集名,存储位置,长度,记录格式,时间戳等)存放在卷目录表里。
卷目录表(VTOC)大概可以对应到windows的文件分配表。
在访问、查找数据集时,需要知道下面3个信息:
数据集名 DATA SET NAME (DSN 或 NSNAME)
磁盘卷号 VOLUMN SERIAL (VOL SER)
设备类型 DEVICE TYPE
这些信息存储在目录(或称编目)中。
目录(CATALOG)分为主目录(MASTER CATALOG)和用户目录(USER CATALOG)。
主目录一直可用,而用户目录需要连接(CONNECT)到主目录后才可用。
访问用户目录下的文件集还需要在主目录中建立ALIAS。
例如,用户目录下的数据集为COBOL.V2R1M0.SIGYCOMP,
则,用户目录连接到主目录后,还要在主目录中建立名为COBOL的ALIAS,且关联到用户目录。
下面举例说明:
数据集SYS1.IPLPARM(LOADDM):
需要补充说明一下,SYS1.IPLPARM是一个分区数据集,
分区可以理解为这个数据集不是一个普通文件,而好像是一个文件夹,
里面可以存放多个普通文件--称为成员(MEMBER)。
SYS1.IPLPARM存放于磁盘卷DMTCAT上,设备类型为3390,类型为分区文件。
它里面包含了很多成员,其中一个是LOADDM,是系统启动参数文件。
数据集COBOL.V2R1M0.SIGYCOMP(IGYCRCTL):
这是COBOL编译器。
COBOL.V2R1M0.SIGYCOMP存放于磁盘卷DMTD01上,设备类型为3390,类型为分区文件。
在TSO下执行LISTDS命令,可以显示数据集。
-
READY
-
LISTDS 'SYS1.IPLPARM(LOADDM)'
-
SYS1.IPLPARM
-
--RECFM-LRECL-BLKSIZE-DSORG
-
FB 80 6160 PO
-
--VOLUMES--
-
DMTCAT
-
--MEMBER---TTR----ALIAS-TTRN-CNT-DATA
-
LOADDM 00001C NO 0 0F 01050027 0099279F 0100208F 10010008
-
00070004 D7D3E240 40404040 4040
注意,数据集名要加引号,否则会提示
IKJ58503I DATA SET IBMUSER.SYS1.IPLPARM NOT IN CATALOG
这是因为执行命令是会自动加上一个前缀(PREFIX)。
可以用ISPF的3.4查看LOADDM的内容,其中有配置主目录的语句:
SYSCAT DMTCAT113CCATALOG.MASTER.MCAT
说明主目录位于磁盘卷DMTCAT上,数据集名为CATALOG.MASTER.MCAT。(113C代表什么?)
目录也是个数据集,可以用LISTDS查看。
-
LISTDS 'CATALOG.MASTER.MCAT'
-
CATALOG.MASTER.MCAT
-
--LRECL--DSORG-
-
4086 VSAM
-
--VOLUMES-BLKSIZE
-
DMTCAT 4096
要查看目录里包含的内容,可以使用LISTCAT命令。
-
LISTCAT ENTRIES('SYS1.IPLPARM')
-
NONVSAM ------- SYS1.IPLPARM
-
IN-CAT --- CATALOG.MASTER.MCAT
ENTRIES/LEVEL用于指定查找的关键字。
ENTRIES是匹配全名,LEVEL是匹配上层名(HQL)。
通配符*只代表一层。所以IBMUSER.*不匹配IBMUSER.SY.SRCLIB。
-
LISTCAT ENTRIES('CATALOG.DATAMGMT.UCAT')
-
USERCATALOG --- CATALOG.DATAMGMT.UCAT
-
IN-CAT --- CATALOG.MASTER.MCAT
CATALOG.DATAMGMT.UCAT是用户目录(可以看到上面输出的USERCATALOG)
-
LISTCAT ENTRIES('COBOL')
-
ALIAS --------- COBOL
-
IN-CAT --- CATALOG.MASTER.MCAT
COBOL是一个ALIAS,指向用户目录CATALOG.DATAMGMT.UCAT
再看CATALOG.DATAMGMT.UCAT:
-
LISTCAT LVL('COBOL') CATALOG('CATALOG.DATAMGMT.UCAT')
-
NONVSAM ------- COBOL.V2R1M0.INSTALL
-
NONVSAM ------- COBOL.V2R1M0.SIGYCLST
-
NONVSAM ------- COBOL.V2R1M0.SIGYCOMP
-
NONVSAM ------- COBOL.V2R1M0.SIGYMAC
-
NONVSAM ------- COBOL.V2R1M0.SIGYPROC
-
NONVSAM ------- COBOL.V2R1M0.SIGYSAMP
-
READY
-
LISTCAT EN('COBOL.V2R1M0.SIGYCOMP') CATALOG('CATALOG.DATAMGMT.UCAT')
-
NONVSAM ------- COBOL.V2R1M0.SIGYCOMP
-
READY
-
LISTCAT EN('COBOL.V2R1M0.SIGYCOMP')
-
NONVSAM ------- COBOL.V2R1M0.SIGYCOMP
-
IN-CAT --- CATALOG.DATAMGMT.UCAT
指定CATALOG('CATALOG.DATAMGMT.UCAT')的意思是,
在用户目录CATALOG.DATAMGMT.UCAT中查找。省略时默认在主目录中查找。
使用IMPORT CONNECT建立用户目录和主目录的连接,
EXPORT CONNECT断开连接。
当没有建立连接时,将无法操作数据集COBOL.*。
建立连接后,还要建立名为COBOL,关联到CATALOG.DATAMGMT.UCAT的ALIAS才行。
建立连接:
编写下面的JCL并SUBMIT执行。
-
//JCLDUCAT JOB CLASS=A,MSGLEVEL=(1,1),MSGCLASS=A,NOTIFY=&SYSUID
-
//**********************************************************************
//* IMPORT CONNECT CATALOG.DATAMGMT.UCAT TO MASTER CATALOG
//**********************************************************************
//STEP1 EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=A
//SYSIN DD *
IMPORT -
OBJECTS((CATALOG.DATAMGMT.UCAT -
DEVICETYPE(3390) -
VOLUMES(DMTD01))) -
CONNECT -
CATALOG(CATALOG.MASTER.MCAT)
/*
//
或者执行TSO命令
-
IMPORT CONNECT -
-
OBJECTS(('CATALOG.DATAMGMT.UCAT' -
-
DEVICETYPE(3390) -
-
VOLUMES(DMTD01)))
建立ALIAS:
ISPF的3.2的V(VSAM Utilities),指定下面内容,EXEC执行。
-
DEFINE ALIAS (NAME(COBOL) -
-
RELATE(CATALOG.DATAMGMT.UCAT) -
-
) CATALOG(CATALOG.MASTER.MCAT)
阅读(794) | 评论(0) | 转发(0) |