mainframe访问磁带(Tape)
大机上磁带(tape)一般用来存储大容量的数据的,可以降低成本。我们要访问tape中的数据的时候,一般的做法是用JCL将tape中的记录转存到直接存储访问设备(DASD)中再查看。 下图中,我们通过utility ICEMAN
将IBMUSER.DNS.TAPE
这个tape中的所有记录都转存到IBMUSER.TAPE.TO.DASD
中,这样就能查看了。
不过,需要注意的是,tape里面的数据量一般都很大,所以更多时候我们再用的时候会指定读取的record的数目,比如这里我们指定读取100条:
甚至,你还可以用SORT中的语法筛选出你想要的条件。比如(1,4,EQ,'AAAA')
这样子。
用ISRSUPC在PDS所有member中搜索指定字符串
在一个PDS中搜索名字叫做“snailgo”的member,可以在command line上输入命令mem snailgo
即可。但是,如果想搜索整个PDS下所有的成员(Member)中指定字符串,有没有办法呢?答案是肯定的,我们可以用一个比较的utility ISRSUPC
来实现,同样的,只需submit一个JCL。
这里,我们在PDS “IBMUSER.TEST.LIB.JCL”
和“IBMUSER.TEST.LIB.PROC”
下的所有member中搜索字符串”SNAILGO”。参数为:PARM=(SRCHCMP,ANYC)
,其中SRCHCMP
指定要搜索的字符串,ANYC
表示ANY Case,即搜索任何符合的情况,要了解更详细的PARM的用法,可以参考IBM红宝书IBM manual ISPF/PDF Guide ...
新建空的GDG generation
有时候你不希望GDG的当前generation里面有数据,但GDG又不能没有generation,否则JCL会提示找不到dataset。这时候你可以用IBM的IEFBR14
utility来生成一个空的generation。IEFBR14
它实际上什么也不做的空程序,常常被我们用来生成空的FILE。不只是gdg,普通的dataset也可以生成。
submit,查看,空的generation G0001V00 就生成了:
more ...
更改GDG世代数参数
建完GDG base后更改GDG的generation。用下面的JCL提交即可。这里我将上次建的GDG base “IBMUSER.TEST.LIB.GDGBASE”
的世代数更改为5:
submit即可。 最后,你可以在GDG base前面用命令“LISTC GDG ENT(/) ALL”
来检查看看是不是参数已经从10改成5了。
新建GDG世代数据集
如何新建一个GDG base? 一种方法是用IDCAMS utility来建,只需提交一个JCL即可。看图:
其中,LIMIT(10)指定了生成GDG 的世代数(generation number),简单吧!
more ...IBM主机技术一本通笔记
这一系列文章将会是从《IBM主机技术一本通》里面选取我个人认为对我有用的部分来记录和阐述。
1、LRECL和BLKSIZE
LRECL:逻辑记录是程序想要处理的一个数据单元,通常由许多连接在一起的区域构成。
BLKSIZE:物理单元(又称块) 描述了在一次输入输出操作中需要传送的数据量,如上图所示,你一定发现了BLKSIZE必须是LRECL的整数倍,显然这是因为BLKSIZE是多个LRECL嘛! 任何时候发生输入输出时传送的是整个块而不是单个逻辑记录,这样做的好处显而易见,有效地使用空间,提高传送率。
2、I——PDS(分区数据集)信息分析
一直对这个知识点一知半解的,今天看了一本通之后,算是明白了。照着图说:
呃... 存储介质:标准磁盘;卷名:PRIM03;设备:3390;组织结构:PO(分区数据集),固定记录长度,记录长度80字节,块大小27920字节,首次分配1 track,用完后每次可扩展分配195个tracks,当前已经分配了2个track,一共分配了1次,最多可以有10个目录块,即最多可以有10x4=40个member,当前已经使用了2个tracks ...
more ...IBM主机技术一本通笔记续
1、JCL每行80列
原来这是因为在1960年那个年代,程序员使用的是穿孔卡片来将JCL作业控制语句一个一个的输入系统,构成了批量作业,而当时穿孔卡片只有80列。
2、JOB语句的关键字参数
ADDRSPC
REGION
MSGCLASS
SECLABEL
PASSWORD
BYTES
CLASS
RD MSGLEVEL
TIME
PERFORM PAGES
COND
LINES
CARDS
TYPRUN
PRTY
SCHENV
GROUP
RESTART
NOTIFY
USER CCSID
标有颜色的几个是我自己比较常用到的。
上张包含了这9个常用JCL关键字参数的图(当然,平常工作当中一般不可能在单个JCL当中都包含了所有的这9个关键字,我这里只是为了更好的说明才把它们罗列在一个JCL里面的,这点要明白)
!
CLASS
: 是作业运行队列的优先级,MSGCLASS是作业输出信息的级别,它规定了作业输出信息送往哪里显示。CLASS和MSGCLASS都是公司规定好了的,肯定有文档可以查看具体信息的。
NOTIFY
: 是指最终作业运行的结果通知给谁,可以写详细的ID,比如IBMUSER,也可以写通用的参数,比如&SYSUID ...
IBM主机技术一本通
周末去市图书馆走了一圈,竟然让我看到有本《IBM主机技术一本通》。这本书前两个月同事买了,貌似100多,现在京东报价是96元,淘宝上也差不多。当时我就快速翻了一遍,第一感觉是:书很厚,看了目录,贴近当前我所做的内容,还有就是内容丰富,涵盖的主机技术比较全,但貌似感觉有点罗列的成分,比较适合主机新人,给他们一个整体框架的印象。当然,800多页的书也并不是都是罗列,有很多内容是很详细的,我认为是:每个主机人都可以有针对性的看,你会的,快速过,不会的,详细看,最好要在大机上实践验证,这样记得牢。
刚拿回来,这么重的书我都背回来了,看来不看是对不住了。更何况是不花钱的好书。只不过没花钱买感觉有些对不住作者了。作者吕新民应该算国内主机界的资深前辈了吧。看人家的工作经历可以追溯到我出生之前好几年呢。
这是作者的新浪博客:http://blog.sina.com.cn/newmanworkshop,可以多关注下,都是为了学习进步嘛,希望前辈多出书呐!
好了,我会有一个详细的学习计划,好好把这本书吃透,从中汲取自己目前还欠缺的知识。
CICS应用编程接口
开发语言
可以用COBOL,C,C++,Assembler,PL/I等来编写CICS应用程序的主要的大部分逻辑处理功能,而只有少数的一部分功能需要用到CICS命令。
CICS命令格式
EXEC CICS SEND FROM (MSG-AREA) LENGTH(5) END-EXEC
——向终端发送长度为5的MSG-AREA信息
EXEC CICS READ FILE('FILEA') INTO (CUSTOMER-REC) RIDFLD(CUSTOMER-NUM)
——读和修改VSAM文件
EXEC SQL SELECT colum_names INTO program_variables From Table_name WHERE ... END-EXEC
——读和修改关系型数据库
EXEC CICS READ ... RESP(RESPONSE-FIELD)
或 EXEC CICS HANDLE CONDITION
——处理异常条件 ...
OLTP和CICS
OLTP:联机事务处理
事务的ACID属性:
- 原子性(Atomicity)
- 一致性(Consistency)
- 孤立性(Isolation)
- 持久性(Durability)
关于OLTP的完整性和可恢复机制,这里举两种情况:
a)、 某人从ATM取200块钱,ATM向银行的主机递交请求(主机存储着客户的账户信息),主机批准且从该人账户上扣去200元,此时ATM发生故障不工作了,此人没拿到钱。
b)、 某人从ATM取200块钱,ATM向主机递交请求,主机批准并且从客户帐上减去200元,ATM付200元给此人,此时主机保存取款记录的磁盘坏了,取款信息丢失。
此类问题层出不穷,增加了程序员代码逻辑处理的难度。我们需要一个环境,它能自动处理事务处理中所有可能的失败,使应用开发人员可以集中于商务的应用开发,而不必编写失败处理程序,不必关心通信和硬件等引起的问题。再来看一个问题:
c)、 航班订票,如果有两个客户在先后时间都要预定某一航班的同一座位,如何避免同一座位被售两次? 通过锁住记录的方法,使得第二个请求必须等待第一个请求完成,而此时,该座位已经变成已预订状态,自然不会被再次预定。 各大公司相应地采用事务管理器,如IBM公司的CICS和IMS,EBA Systems的TUXEDO,DEC的ACMS,Transara的Encina灯来实现这些功能 ...