ILOVEMAINFRAME 的个人资料I love mainframe日志列表 工具 帮助

日志


6月11日

典型 MAINFRAME 工作流程

绝大部分的 MAINFRAME 的工作流都可以被划分为以下两类:批处理(Batch processing)和联机处理(Online transactional processing,包括基于网络的应用)。下面给这两种工作流做一个纵览。

workloads

批处理 - Batch processing
MAINFRAME 的最大的一个优势就是能够从高速存储设备中处理千兆海量数据,然后产生出有价值的结果。比方说,MAINFRAME 系统为银行和其他金融机构实现了季度报表功能,能够为客户产生必要的报表(季度资产报表和养老金报表),或者向政府提交财务成果报表。零售店也可以为其区域销售经理复查生成和整合夜间销售报表。

生成这些报表的应用程序就是批处理。他们在 MAINFRAME 中处理,并且不需要用户的干预。它们在计算机上提交,成批的读入和处理,然后产生结果输出。UNIX 的脚本文件和 WINDOWS 中的后缀名为 .cmd 文件也大都是这个概念,只不过一些 z/OS 的批处理作业能够持续非常长的一段时间。

虽然批处理能够在分布式计算机系统中运行,但是它却远没有在 MAINFRAME 中那么简单易行。因为分布式计算机系统相对于 MAINFRAME 而言缺乏一下这些东西:

  • 充足的资料存储空间
  • 处理器的有效功率和回路
  • 系统资源的系统联合管理和作业时序安排
MAINFRAME 的操作系统一般都配备有非常尖端的作业时序安排软件。通过它数据操作员能够提交、管理和追踪这些批处理作业的执行和输出。

批处理流程有以下几个特点

  • 访问和读入海量数据,并能够产生大量数据输出。
  • 虽然交互式反应时间并不是必备条件,但是批处理作业通常必须在一个由基于服务品质协议(Service Level Agreement)的批处理窗口中完成。
  • 产生的信息可能和众多的用户相关;
  • 一个预定的批处理流程能够由成百上千的由预先设定好的顺序的作业的执行过程组成。
在批处理的过程中,会产生很多种样式的结果。最为典型的例如投资收益性报表信息整理,定制数据库备份。每日订单处理和库存更新。

下图所列的就是一些典型的 MAINFRAME 环境中的批处理作业。

workloads

下面我们来说明一下图例中的几个步骤

  1. 晚上,许多批处理作业和应用程序都被执行。他们直接巩固了白天联机处理流程的顺利执行。
  2. 使用批处理作业来生成商业统计报表。
  3. 在批处理窗口之前和之后备份关键性的文件和数据库。
  4. 商业统计报表会被发送大指定的数据集中以便在接下来的几天进行分析和检查。
  5. 不同的报表会被送到不同的部门。
  6. 所生成的月度帐户收支报表会被送到每一个银行客户的手中。
  7. 帐户操作的概要报表会被提交到相关的信用卡公司。
  8. 从合作的信用卡公司得到相关卡片的交易报告。
  9. 在产品控制部门,操作台用爱监控系统控制台上的消息和作业的执行。
  10. 作业和事务读取或更新那些联机处理流程中一样要使用的数据库,并在这个过程中在磁带上写上大量文件。
联机事务处理 - Online transactional processing
MAINFRAME 中提供了大量的联机书屋处理系统。大多情况下,他们的核心功能都是为商业运作提供任务性的应用程序。一些行业所使用的就是联机系统。

  • 银行业 - ATM 自动柜员机
  • 保险业 - 策略管理和需求处理的代理系统
  • 旅游业和运输业 – 航线预订系统
  • 制造业 – 库存控制,生产调度
  • 政府 – 税收处理,许可证发放和管理
在这些行业中工作的人员是如何与 MAINFRAME 系统相联合的呢?许多因素影响着公司中事务流程的成型,这些因素包括:

  • 同时能够与系统联接的用户的数量
  • 每秒处理事务的数量
  • 应用程序的实用性需求(比方说,应用程序是否需要一天24小时,一周七天运行,或者是否需要每周有一晚停止运行)
在个人电脑和智能工作站流行起来之前,最普遍的和联机 MAINFRAME 应用程序通信的方法就是使用 3270 终端。虽然它被认为是“哑”终端,但是相对于响应键盘操作的电脑它在搜集和整屏显示数据上要更加智能化,而且非常节省处理器的资源。字符的显示是黑底绿字,所以 MAINFRAME 的应用程序又被昵称为“绿屏”程序。

基于这些因素,用户在不同的暗转设置过程中就会有很多种不同的交互作用。由于现在应用程序都可以自主设计,所以在安装设置中重写了现在既有的一些 MAINFRAME 应用程序,为方便用户加上了基于网络浏览的接口。这种改变往往需要开发一些新的应用程序,最常见的就是从第三方购买一些软件来加一个门面。这样用户就根本不会意识到在屏幕背后和他交流的是 MAINFRAME。

连接事务处理被大多数人所熟知,比方说:

  • 使用ATM 取款机,存款、取款、查询和转帐
  • 在超市中用借记卡或者信用卡付款
  • 网上购物
联机事务处理一般来说有以下几个特点

  • 少量的输入数据、访问和处理存贮的数据、输出数据;
  • 响应迅速,通常不会超过一秒;
  • 众多的用户能够处理大量的事务处理;
  • 用户操作界面全天候有效;
  • 确保事务处理和用户资料的绝对安全。
以一间银行的分行为例,用户使用联机服务来查询帐户收支或者作投资。

workloads

上图所示的就是一些使用 MAINFRAME 的联机事务处理

  1. 一个用户正在使用 ATM 柜员机。它有着友好的界面和多样的功能:取款、查询、存款、转帐和信用卡取现。
  2. 与此同时,该分行的职员正在办公室里做着日常的操作:投资咨询,资金应用和汇票处理等。
  3. 在银行的主办公室中,商业分析师们在调整着事务以便提高工作效率。其他员工则使用不同的专门的联机系统里处理客户的关系管理,分期付款和股票等等。
  4. 所有的请求都被直接送到 MAINFRAME 上去处理。
  5. MAINFRAME 上的程序对数据管理系统(比方说 DB2)中的数据进行更新和查询。
  6. 这些数据文件会被存放到指定的磁盘存贮系统中。
6月10日

Mainframe 的操作系统

随着 MAINFRAME 硬件的不断发展,其操作系统也不断发生变化。从最初的 MVS 到后来的 OS390 以及目前的 z/OS,IBM MAINFRAME 的操作系统不断在原有基础上融合当前的先进技术,也逐渐由封闭走向开放。虽然MAINFRAME 也可以支持其他操作系统,甚至是开放的LINUX,但目前主要的应用系统仍运行在z/OS上。除了z/OS外,其他四种 MAINFRAME 的操作系统是:z/VM,VSE,Linux for zSeries和z/TPF。由于 z/OS 会单独拿出来介绍,所以我们这里只介绍一下其它四种。

z/VM
z/VM有两个基本组件:控制程序CP和一个单用户的操作系统CMS。

z/VM是一个系统管理程序(Hypervisor),它支持在物理硬件资源的基础上创建多个虚拟机器,用来运行其他操作系统。对用户来说,就好像独占那些实际上是共享的物理资源——包括打印机、存储设备和CPU等。z/VM的控制程序负责确保虚拟机器上的数据和应用程序的安全。物理的硬件可以被多个虚拟机器共享,或者出于性能要求被独占。系统程序编辑人员负责给虚拟机器分配物理设备。对于大多数客户而言,虚拟系统的使用免除了他们必须配备高性能硬件的麻烦。

z/VM 的另一组件是对话管理系统 CMS(Conversational Monitor System)。该组件运行在虚拟机器上,为终端用户提供交互接口和一般的应用程序接口。

VM 操作系统在 IBM MAINFRAME 上有很长的历史,目前的最新版本是z/VM 5.2。其在中国并不多见,目前最主要的功能就是为其它操作系统提供一个平台。

VSE
VSE(Virtual Storage Extended)无论在小型机还是大型机用户中都相当流行。只有当客户的性能要求超过 VSE 负荷时才会转而使用 z/OS。相对 z/OS,VSE 操作系统为批处理和交易处理提供相对较小的、更简易的基础支撑。VSE 的设计和管理结构非常适合运行常规产品工作负荷,包括大量并行运行的批次作业和大范围、传统的交易处理。在实际操作中,大多数 VSE 用户同样使用 z/VM 操作系统,把它作为 VSE 应用发展和系统管理的一般终端接口。

该操作系统以早期硬盘操作系统(DOS)而闻名,是第一个引入360大型机系统的基于硬盘的操作系统。直到OS/360诞生,DOS 才被取代。但由于 DOS 操作简单且占用空间小,许多大型机用户在 OS/360 产生后仍然坚持使用它。DOS 曾经被叫做 DOS/VS(当时DOS开始启用虚拟存储),VSE/SP 和后来的 VSE/ESA。在谈到最新的版本时才被称之为VSE。

Linux for zSeries
Linux 的很多版本都可用于大型机。这些版本不是由 IBM 开发的,但是其使用得到 IBM 的支持。这些 Linux 的版本一般分为两类:

  • S/390 版 Linux(使用31位寻址和32位中央处理寄存器)
  • zSeries 版 Linux(使用64位寻址和中央处理寄存器)
Linux 在 zSeries 主机上有三种实施方式:Native 自举方式;LPAR 逻辑分区方式;借助 VM 操作系统或 IBM 模拟映象工具 VIF 的方式。它们各有利弊,但后者提供了较大的灵活性,并且能够支持更多的 Linux 系统并存。

  • Native 自举方式
相对之前的 UNIX Service 而言,这种方式的确是一个突破,标志着无需额外支持,一个完整独立的 Linux 操作系统可以正常顺利地在 zSeries 上运行。多数情况下,客户出于成本的考虑不会在一台 zSeries 上仅运行Linux for zSeries 操作系统。随着更多工具和产品的出现,客户可以采用这种方式访问越来越多传统的或最新的外部设备。这一方式对于那些不愿负担 zSeries 操作系统认证成本的用户,或是那些在 zSeries 模拟环境上进行尝试的 MainFrame 忠实的爱好者来说,的确是一种不错的选择。

  • LPAR逻辑分区方式
对于只有 z/OS 或 VSE 操作系统的情况,这是初次引入 Linux 时的一个非常好的选择。当前 zSeries 体系结构支持每个物理系统上同时运行15个逻辑分区。考虑到 zSeries 系统较高的初始投资,为了更加充分地利用已有资源,同时又不增加系统管理的负担,在一个或多个分区上实施 Linux,既可以满足中小规模的应用需求又能够为内部人员提供学习和培训环境。从企业实施 Linux 服务前的测试阶段,一直到对已有的 Linux 服务进行集中或扩充时,这都不失为一种方案。

  • 基于 VM 或 VIF 的客户方式
对于多数用户,这是最灵活和最符合需求的办法。VM 不仅具备了大规模实施所需的实际资源管理和系统管理的能力。同时,也提供了 Native 模式和 LPAR 模式下所缺少的或需要获得认证的简单的备份和恢复方案。这非常适合于应用规模由小到大逐步实现的客户。虚拟映象工具 VIF 为不熟悉虚拟系统环境的客户提供一种低成本的方式,以实现虚拟环境的管理。最典型的情况是,在需要比 LPAR 方式和 Native 方式更多映象而又无法负担一个 VM 的完整认证时,VIF 就提供了快速实施 Linux for zSeries 的方法。在 VM 或 VIF 之上运行 Linux 服务映象的数量,仅受物理上内存和 CPU 资源的限制。在多数情况下,如果采用内置 OSA 卡实现网络通讯,那么最明显的限制就只是网络带宽了,目前 zSeries 系统可支持多达16块内置 OSA 卡。

Linux 在 IBM 大机上主要有以下两种使用方式:

  1. 将大量的分散在各种平台服务器上的应用集中到一台大机上,在多个 Linux 映像上运行集中上来的应用,从而增强整个系统的可管理性,降低管理成本和维护成本。
  2. 将核心应用(如数据库服务器)放在传统大机的操作系统 z/OS 上,将外围的应用(如应用服务器、Web服务器等)运行在 Linux 分区上,实现服务器的整合。
综上所述,Linux for zSeries 是把 Linux 的灵活性、开放性与 zSeries 主机的服务质量结合起来,它能满足当代电子商务的需求,适应于企业级 IT 的系统架构,克服了分布式服务器群的各项弊病。

z/TPF
z/TPF(Transaction Processing Facility)系统是一种在实时环境中运行交易处理应用程序的操作系统,主要用于面向交易量较大的业务,譬如信用卡公司和航空预定系统。

z/TPF 系统是为具有庞大的在线交易量和巨大网络覆盖面的业务模式而设计。由于其强大的处理能力和高度的可用性,比之其它操作系统,它能够更好地适应交易量瞬间峰值的冲击,以及业务范围可预见的或突发的快速扩充。它尤其能够满足那些需要强大处理能力和低廉的平均交易成本的应用领域。

6月8日

IKJEFT01

IKJEFT01是一个TMP程序. (terminal monitor program).

可以执行clist,rexx,tso.e command命令等.

例1
SB01 EXEC PGM=IKJEFT01,DYNAMNBR=50
STEPLIB DD DISP=SHR,DSN=DSN.DSNLOAD
SYSTSPRT DD SYSOUT=*
SYSPRINT DD DSN=XXXX.XX.XXXX,DISP=(,CATLG),
DCB=(RECFM=FBA,LRECL=133,BLKSIZE=133),
SPACE=(CYL,(5,5)),UNIT=SPLD
SYSIN DD DSN=&&CTL,DISP=(OLD,DELETE)
SYSTSIN DD DSN=XXXX.IOCS.SQLLIB(DSNTEP2),DISP=SHR

XXXX.IOCS.SQLLIB
********************************* Top of Data **********************************
DSN SYSTEM(DSN)
RUN PROGRAM(DSNTEP2) PLAN(DSNTEP2) LIB(’DSN.RUNLIB.LOAD’)
******************************** Bottom of Data ********************************
SYSTSIN sysin控制参数 这里是一段CLIST程序

例2
在DB2使用中,DSN用来获取DB2在OS/390的Subsystem identifier,用来对DBRM进行BIND PLAN或者 BIND PACKAGE的,也能PLAN和PACKGAE进行RUN。

在IKJEFT01中输入执行语句应该写在 SYSTSIN里
BIND的时候:
//DBRMLIB DD DSN=XXX.XXX.XXX,DISP=SHR
//SYSTSIN DD*
DSN SYSTEM(Subsystem identifier)
BIND PLAN(PLAN-name) MEMBER(DBRM-name) ACT(REP) ISO(CS)
END
/*

RUN的时候 :
//SYSTSIN DD *
DSN SYSTEM(Subsystem identifier)
RUN PROGRAM(DB2PGM-name) PLAN(PLAN-name) -
LIBRARY(’DATASET-name of DB2PGM’)
END
/*

对于abend情况的处理,可以用IKJEFT1A,IKJEFT1B

6月6日

Mainframe 就在我们间

尽管 MAINFRAME 在商业发展中占尽优势,但是这种机器对于大众、学术界甚至一些有经验的 IT 专家们来说仍旧不过是一个隐形物。与此相反,其他一些类型的电脑却能够吸引更多人的眼球。事实如此也不用显得吃惊。毕竟,我们之中有谁需要访问 MAINFRAME 呢?如果我们想去访问,应该从哪里下手呢?事实上,我们都是 MAINFRAME 的用户,只不过我们可以自己都没有意识到这一点罢了。

我们绝大部分人都能够熟练使用个人电脑,都会买一台电脑,装上方便快捷的软件,浏览网页,或者给大学教授写毕业论文。如果拥有更高的技术知识,我们能够更详细的钻研那些带有Intel?标记的有着各种设备的工作站(个人电脑)。通过直接的或者间接的,有辅导的或者没有辅导的的方法从书本或者网页上找到相应的资料去研究其性能。

然而对于 MAINFRAME 我们并没有什么机会去研究它,因为它似乎在逃避大众的目光。它们仍旧非常可靠的完成的所有人物。并且几乎能够抵抗 所有那些令PC机备受折磨的攻击,例如邮件炸弹,邮件病毒,木马程序等等。正因为它运行的可靠性,几乎可以忽略不计的宕机时间, MAINFRAME 可以说是所有计算机的典范。

今天 MAINFRAME 在世界上绝大多数的公司的日常运作中扮演着中枢的角色。当其他的电脑在外部处理着各种各样的业务的时候,MAINFRAME 在当今的电子商务的大环境中早已占领了令人觊觎的位置。银行、金融、卫生保健、保险、事业单位、政府,还有各种国营和私营的企业,MAINFRAME 不无例外的在为它们的现代商务发挥着基础的作用。当你走到银行的 ATM 取款的时候,其实你已经在享受 MAINFRAME 为你提供的服务了,他正在你无法看到的地方发挥着巨大的作用,但是你身边的每一点小事也许都会受它的影响。MAINFRAME 就在我们中间。

6月5日

IEBUPDTE

IEBUPDATE 这个 UTILITY 最常见的用法是用来在分区数据集中创建多个 member,或者更新这些 member 中的数据。虽然 IEBUPDATE 能够用来处理给中类型的数据,但是主要用途还是创建或者维护JCL的过程库或者汇编语言的宏程序库。今天,这个 UTILITY 大多用来做程序产品的发布和维护了。很少被普通 TSO 用户使用。

这里有一个很基本的例子用来往 MY.PROCLIB 中添加两个 JCL 的过程的 MEMBER。运用 ISPF 也许能够很方便的完成这些事情,但是如果我们假设这个 JOB 已经在磁带上了,那么很显然就会比 ISPF 操作更加有效。

//OGDEN10 JOB 1,BILL,MSGCLASS=X
// EXEC PGM=IEBUPDTE
//SYSPRINT DD SYSOUT=*
//SYSUT1 DD DISP=OLD,DSN=MY.PROCLIB
//SYSUT2 DD DISP=OLD,DSN=MY.PROCLIB
//SYSIN DD DATA
./ ADD LIST=ALL,NAME=MYJOB1
//STEP1 EXEC=BILLX1
//PRINT DD SYSOUT=A
// (more JCL for MYJOB1)
//SYSUDUMP DD SYSOUT=* (last JCL for MYJOB1)
./ REPL LIST=ALL,NAME=LASTJOB
//LIST EXEC PGM=BILLLIST
// (more JCL for this procedure)
//* LAST JCL STATEMENT FOR LASTJOB
./ ENDUP
/*

对这个例子进行一下说明:

  • 这是一个更新数据集的过程,所以 SYSUT1 和 SYSUT2 都指向了同一个数据集。如果指向不同的话,那么就会是一个先复制然后再更新的过程。
  • 从SYSIN DD DATA 的格式来看,输入流的前两列会有 // 表示,它并不会被 JCL 语句打断。输入流的结尾会有 /* 的标识。IEBUPDATE 的 UTILITY 控制语句由 ./ 来引导。
  • 一个名为 MYJOB1 的 MEMBER 被加入到 MY.PROCLIB 中。而且这个 MEMEBER 并不需要已经存在。而已经存在的 MEMBER LASTJOB 就会被新的内容替换掉。
另外,IEBUPDATE 这个 UTILITY 还能够根据控制语句中的序列号来添加或者替换相应的 MEMBER。这也是针对 JCL 语句或者源语句中那些数字序列的所剩不多的用法。
最后我们需要再次重申 IEBUPDATE 最有代表性的用法是用作程序的发布和维护。比方说,如果需要给客户的程序库中添加25个 JCL 过程,我们只需要将这25个过程作为一个程序包用 IEBUPDATE 导入。这样做的一个好处是由于所有的产品都使用一种源程序格式,客户就可以很方便的在使用之前进行审核。

6月4日

z/OS中使用OSFP路由协议的简单介绍

Z/OS环境中,OMPROUTE是一个静态路由的守护进程,对于IPv4,OMPROUTE遵守了RFC 1583(OSPF version2)RFC 1850(OSPF version2 Management Information Base)RFC 1058 (Routing Information Protocol) RFC1723 (RIP version 2 - Carrying Additional Information);对于IPv6,OMPROUTE遵守了RFC 2080 (RIPng for IPv6) RFC 2740 (OSPF for IPv6)


OMPROUTE管理TCP/IP堆栈的路由表。在OMPROUTE的初始化阶段,会删除所有的在TCP/IP堆栈的路由表中的动态路由信息,之后,OMPROUTE重新生成TCP/IP堆栈的路由表,根据通过OSPF路由协议学习到的路由信息。OMPROUTE不使用BSDROUTINGPARMS语句,代替的是,OMPROUTE使用的是配置文件,这个配置文件同时被OSPFRIP协议使用。OSPFRIP协议通过在配置文件中定义的OSPF_INTERFACERIP_INTERFACE参数进行连接通信。
OMPROUTETCP/IP堆栈之间存在一个一对一的连接,OSPF/RIP支持多个TCP/IP堆栈,就需要多个OMPROUTE的实例。
OMPROUTE的环境中,OSPF相对于RIP或其他的路由协议,具有最高的优先级。例如,OSPFRIP在环境中同时使用,对于到相同的目的地,会优先使用OSPF
OMPROUTE
允许存在多个路由(成本相同、目的地相同),因此支持在多个路由之间做load balance的选择。
OMPROUTE
支持VIPAVirtual IP Address)的技术,通过转换到另外的路径,可以避免网卡故障受到的影响。VIPA的路由信息通过OSPFRIP的广播传递给邻近的路由器,路由器可以使用这些信息,到达ZOS系统中的目的地。
OSPF环境中,使用静态路由的要特别注意。有两种类型的静态路由:可替换和不可替换的。如果是可替换的静态路由,如果OSPF发现新的路由,将会替代静态路由;如果是不可替换的静态路由,即使OSPF发现一条更优的路由,也不会替代静态路由。
ZOS中,配置OMPROUTE需要以下的步骤:
生成OMPROUTE的启动的procedure


以上是一个OMPROUTE的启动procedure的例子。

定义OMPROUTE的环境变量:



以上的例子就是一个OMPROUTE的环境变量的文件的内容,在OMPROUTE的启动的PROCEDURE中通过STDENV DD语句标明环境变量文件的位置。环境变量的文件在ZOS中是data set ,这个data set 必须定义为RECFM=V。这是由于RECFM=Fdata set 会在环境变量的尾部填充空格。

ZOS中,对OMPROUTE的管理可以通过以下的命令进行:
启动OMPROUTE:使用start命令即可。
停止OMPROUTESTOP <procname> 或者 MODIFY <procname>,KILL命令。
更改OMPROUTE的配置:F procname,RECONFIGF procname,ROUTESA=ENABLE/DISABLEF procname,OSPF,WEIGHT,NAME=<if_name>,COST=<cost>
启动、停止和更改OMPROUTEtracedebuglevelF procname,TRACE=n:F procname,DEBUG=n:F procname,SADEBUG=n:
显示OMPROUTE的数据信息:F procname,RTTABLEF procname,OSPF,LIST ALL
显示OMPROUTE的数据信息:D TCPIP,TCPIPA,OMP,OSPF,LIST,ALL
显示OSPF area的数据信息:D TCPIP,TCPIPA,OMP,OSPF,LIST,AREAS
显示OFPS interfaces的数据信息:D TCPIP,TCPIPA,OMP,OSPF,LIST,IFS
显示一个LSA的内容的数据信息:D TCPIP,TCPIPA,OMP,OSPF,LSA,LSTYPE=1,
LSID=10.10.2.1,ORIG=10.10.2.1,AREAID=0.0.0.2
显示连接到某个路由器的所有OSPFarea的信息:D TCPIP,TCPIPA,OMP,OSPF,AREASUM
显示AS external advertisements的列表:D TCPIP,TCPIPA,OMP,OSPF,EXTERNAL
显示OSPF的邻近的lyq的信息:D TCPIP,TCPIPA,OMP,OSPF,NBR
显示OSPF路由器之间的数据信息:D TCPIP,TCPIPA,OMP,OSPF,ROUTERS
显示OMPROUTE的路由表中的所有路由信息:D TCPIP,TCPIPA,OMP,RTTABLE


6月3日

IDCAMS

IDCAMS 其实算不上是一个记录在 z/OS UTILITY 手册中的常规组件。IDCAMS 更主要的用途是用来创建和使用 VSAM 数据集。它还有一些其他功能,比如更新 CATALOG。但是和它联系最紧密的还是 VSAM。IDCAMS 的复杂的功能还是留给大家自己看手册,我们还是讲些最基本的用法。

下面是一个很有代表性的 IDCAMS 的例子:
//OGDEN12 JOB 1,BILL,MSGCLASS=X
//DEL EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN DD *
DELETE OGDEN.DATA.VSAM CLUSTER
/*
//LOAD EXEC PGM=IDCAMS
//SYSPRINT DD *
//DATAIN DD DISP=OLD,DSN=OGDEN.SORTOUT
//SYSIN DD *
DEFINE CLUSTER (NAME (OGDEN.DATA.VSAM) -
VOLUMES(WORK02) CYLINDERS(1 1) -
RECORDSIZE (72 100) KEYS(9 8) INDEXED)
REPRO INFILE(DATAIN) OUTDATASET(OGDEN.DATA.VSAM) ELIMIT(200)
/*

这个程序里面有两个 JOB STEP。第一步,删除在第二步将会创建的 DATASET。这是一个清除的功能。如果这个 DATASET 并不存在的话,这一步将会被忽略掉。

第二步中进行了执行了两个功能。用 DEFINE CLUSTER 命令创建一个VSAM 数据集;然后用 REPRO 命令将一个顺序数据集的内容导入。VSAM 数据集被创建在 WORK02 卷上,主空间为一个 CYLINDER,第二分配空间也是一个 CYLINDER。由于 VSAM 数据集大多使用变长的数据,所以该数据集被定义为平均 72 个字节,最大为 100字节。每个记录的 9 个自己的偏移量的首 8 个字节被设置为主键。ELIMIT 参数定义了 REPRO 操作中在终止运行之前允许忽略的错误次数。

很多 IDCAMS 的函数中中能够使用 TSO 命令,比方说 DEFINE CLUSTER 就是 TSO 命令。但是一般情况下我们不建议在 IDCMAS 中使用很复杂的命令,那样的话遇到的错误也会是很复杂的。一般我们查看和或者检查 IDCAMS 的命令和产生的消息都需要到 SDSF 中检查该 JOB 的输出结果。

6月2日

IEBDG

IEBDG 这个 UTILLITY 可以在指定的 DATASET 中在不同的区域生成不同样式的数据。IEBDG 是一个很具有代表性的生成测试数据的 UTILITY。能够生成各式各样的区块数据,并且还能够对其进行进行形状上的改动,比方说做成波浪形。另外,IEBDG 还支持输入式数据并覆盖制定区域的操作。

下面我们举一个最简单的例子:

//OGDEN7 JOB 1,BILL,MSGCLASS=X
// EXEC PGM=IEBDG
//SYSPRINT DD SYSOUT=*
//OUT DD DISP=(NEW,CATLG),DSN=OGDEN.TEST.DATA,UNIT=3390,
// VOL=SER=WORK01,SPACE=(CYL,(10,1)),
// DCB=(RECFM=FB,LRECL=80,BLKSIZE=8000)
//SYSIN DD *
DSD OUTPUT=(OUT)
FD NAME=FIELD1,LENGTH=30,FORMAT=AL,ACTION=RP
FD NAME=FIELD2,LENGTH=10,PICTURE=10,'TEST DATA '
FD NAME=FIELD3,LENGTH=10,FORMAT=RA
CREATE QUANTITY=90000,NAME=(FIELD1,FIELD2,FIELD3)
END
/*

这个JOB生成了一个叫做 OGDEN.TEST.DATA 的有90000条数据的DATASET。在 第一个 DD 里面的 DCB 参数中制定了每一条数据占80字节,控制声明段制定了一共有3个区域的数据占据了前50个字节的空间。剩下的空余位置,IEBDG 会默认将其设置为二进制的0,在 DATASET 中显示“.”。

我们指定的3个区域分别是:

字母字段,30个字节长,承叠进的波纹显示;
第二个区域放入的是固定的文字“TEST DATA ”,10个字节长;
第三个区域时随机产生10个字节长的的二进制数据。

这个例子是最简单的对 IEBDG 的用法的描述,IEBDG 还可以生成更加复杂的样式,这里就不再举例说明了。

6月1日

编辑数据集

本人才疏学浅 只能来点简单东西 凑个热闹 写点数据集编辑命令

主命令:

CANCLE:取消所做的编辑并退出编辑环境
CAPS ON/OFF:退出编辑环境后系统自动将所有字母转换为大写/小写
CHANGE(RCHANGE):替换字符,RCHANGE表示重复上次的替换。格式:CHANGE ** ** [ALL]
FIND(RFIND):查找字符串
RECOVERY ON/OFF:设置编辑方式,ON表示用户可以通过UNDO命令取消上一次编辑操作
RESET:重置编辑器,清除不需要的信息
SAVE:保存当前修改,并继续编辑
SORT:对文档行按字典顺序排序
SUBMIT:提交作业;若作业是一段JCL程序,则通过该命令可以提交作业程序
UNDO:取消上一次编辑(仅当在RECOVERY ON编辑方式下)
s(setup)+member:创建新成员(PDS)
CUT:复制当前内容(配合CC和MM来使用)
PASTE:粘贴当前内容(配合CUT来用 很常用)
COPY+member-name:复制同一DATASET下MEMBER内容(配合AB使用)
HI+XXX:高亮显示某种语言(JCL COBOL REXX等等)
MEMBER+member-name:查询当前所有DATASET下该member是否存在(非常实用)
PROFILE:列出当前编辑环境的所有的editor profile
HEX ON/OFF:打开关闭十六进制编码形式
AUTOSAVE ON/OFF:打开关闭自动保存
AUTONUM ON/OFF:自动重新编号行号(SAVE后生效)
PROFILE UNLOCK/LOCK:可以修改ISPF的editor profile
PACK ON/OFF:是否将该MEMBER保存成PACK格式(一种主机上标准的压缩格式)
TABS ON/OFF:编辑的时候是否允许用TAB键跳格

行命令:

C、CC、Cxx:拷贝命令。与其他行命令(A、B)或主命令 结合使用 C 拷贝当前行,CC拷贝多行,用两个CC来定位,Cxx拷贝多行,XX表示行数
I、IXX:插入命令。执行一次插入命令后,可直接按回车(ctrl)换行
D、DD、Dxx:删除
R、RR、Rxx:复制
O:覆盖当前内容(结合C和R来用)
A:定位于当前行之前
B:定位于当前行之后
X、XX、Xxx:隐藏
S、Sxx:显示隐藏的内容
COLS:屏幕的刻度标尺
UC、UCxx:转换成大写
LC、LCxx:转换成小写
(, (xx:将当前行左移一列或xx列(或者<)
), )xx :将当前行右移一列或xx列(或者>)
TS:将一行文本切分为两行
TF:将多行文本合并为一行

只能记得那么多了 希望大家补遗

5月31日

IEBGENER

IEBGENER 这个 utility 拷贝一个顺序数据集到另一个。(记住:分区数据集中的 member 可以被用作一个顺序数据集。)这个 utility 同样还能做一些数据的过滤,可以改变 LRECL 和 BLKSIZE,产生记录,以及几个其他的功能。然后,它被用的最多的是简单拷贝数据集,下面是一个典型的例子:

//OGDEN2 JOB 1,BILL,MSGCLASS=X
// PGM=IEBGENER
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=X
//SYSUT1 DD DISP=SHR,DSN=BILL.SEQ.DATA
//SYSUT2 DD DISP=(NEW,CATLG),DSN=BILL.COPY.DATA,UNIT=3390,
// VOL=SER=WORK02,SPACE=(TRK,3,3))

IEBGENER 需要四个 DD 语句。SYSIN DD 语句是用来读取控制参数,用于简单情况,就不需要控制参数,这时候可以用 DD DUMMY 来代替。SYSPRINT 语句用于打印 IEBGENER 信息。SYSUT1 语句用于输入而SYSUT2 语句用于输出。这个例子读取一个现有的数据集然后把它拷贝到另一个新的数据集中。

如果输出的数据集是新的并且没有指定 DCB 参数,IEBGENER 就会赋予它和输入数据集一样的 DCB 的参数。(DCB 参数包括 LRECL,RECFM 和 BLKSIZE)

另一个常用的例子是:

//OGDEN2 JOB 1,BILL,MSGCLASS=X
// PGM=IEBGENER
//SYSIN DD DUMMY
//SYSPRINT DD SYSOUT=X
//SYSUT2 DD DISP=OLD,DSN=BILL.TEST.DATA
//SYSUT1 DD *
 This is in-stream data. It can be as long
 as you like. It appears to an application as
 LRECL=80, RECFM=F, BLKSIZE=80. You would
 want to have the SYSUT2 data set allocated with
 a better blocksize.
/*

这个例子假设 BILL.TEST.DATA 这个数据集已经被创建了,这个作业将会用 SYSUT1 输入流中的数据重写它,因为输出的数据集已经存在,IEBGENER 将使用它现有的 DCB 属性。

IEBGENER 是提供给 z/OS 的最基本拷贝或者 list 的程序,它在 OS/360 第一个发行版本就存在了。

Mainframe 的发展历程

这里我们将粗略的回顾一下 IBM Mainframe 从1964年诞生到现在的一个发展历程。下图是一个涵盖的介绍:
Mainframe 的发展历程

s360 1964年4月7日,IBM 推出了 System/360,它又五台运行统一系统的计算机组成,能够同时连接使用44个外部设备。同时,I/O(输入/输出)系统概念和并行接口也诞生了。
这也是商业公司第一次在高安全级别的平台上处理商业运作。
1968年,随着 CICS - Customer Information Control System - 的推出,个人用户终于可以通过工作站对数据进行查找,更新和回朔了。即使到现在,CICS 仍旧是非常流行的业务监控产品。

s370 1970年,IBM 推出了新一代的性能更加强的 Mainframe - System/370, 能够在同一电脑上使用多个处理器,并能够共享内存。随着70年代机器向更大速度更快发展,System/370 开始使用独立的单片内存条,这也是业内首创。由于能够全面兼容 System/360 的程序,这就省去了客户升级的繁琐过程。在这一时期,IBM 还提出了并在 System/370 虚拟内存的概念,这也是计算机领域的一大进步。

3081 1980年,3081处理器被推出,其比原来的Mainframe 处理器在内部执行能力上提升了很多倍。并且由于同期 TCMs(Thermal Conduction Modules) - 热传导模块 - 的推出,Mainframe 进一步降低了空间使用率和能耗。
1982年,寻址空间从24位上升到了31位。
1984年,IBM 推出了1MB的硅铝半导体芯片。
1988年,扩展名被引入支持多重寻址。同年 IBM 对 DB2 的使用进行了调整,减低了CPU使用率并戏剧性的提升了效率。

s390 进入了90年代,很多预言家语言 Mainframe 会在个人电脑的流行趋势中消逝。但是随着 System/390 的推出,预言被击碎了。IBM不仅提升了技术水平,而且还将价格减了下来。IBM 提出了系统聚类和数据共享的概念,并推出了 System/390 并行系统联合体(Parallel Sysplex),这将 Mainframe 的实用性提到了一个新的高度。90年代,计算机技术日新月异,IBM 也同时提出了许多概念,如ESCON、FICON、CUoD、OSA。这些新概念都为 Mainframe 添色不少。

z990 经过了电脑技术高度发展的90年代,在 IBM 提出了一系列新的理念之后。2000年,最新一代的 Mainframe 推出了 — IBM eServer™ z/Series。z/Architecture 其实是扩展了的 ESA/390, 他的寻址空间已近上升到了64位,动态通道管理的概念也被提出并引入。现在最新一代的 Mainframe 成员是 z990,能够支持32个芯片。

Mainframe 在随需应变的要求下不断丰富完善着其功能。IBM eServer™ z/Series 目前已经成为了能够适应高密度工作量,并能够提供高度安全、稳定和实用性的旗舰产品。

5月30日

IEFBR14

这个程序的唯一功能是提供一个0的返回码,它被用作一个“执行 JCL ”的安全的媒介。执行 JCL 的书法并不是一个非常准确的术语,但是这里能够很好的传达想法。如下面的例子:

//OGDEN1 JOB 1,BILL,MSGCLASS=X
// EXEC PGM=IEFBR14
//A DD DSN=OGDEN.LIB.CNTL,DISP=(NEW,CATLG),VOL=SER=WORK02,
// UNIT=3390,SPACE=(CYL,(3,1,25)
//B DD DSN=OGDEN.OLD.DATA,DISP=(OLD,DELETE)

尽管被执行的程序(IEFBR14)并没有做任何事情,但是这还是一个非常有用的作业。当准备运行这个作业的时候,initiator 分配了数据集 OGDEN.LIB.CNTL 并保持到作业完成。它同时在作业完成时删除了数据集 OGDEN.OLD.DATA。在这个作业中 DD 的名字 A 和 B 其实没有任何意义,但是这里被使用是因为 DD 语句的语法要求每个 DD 都要有的名字。

你完全可以通过 ISPF 来完成新增一个数据集和删除另一个数据集。但是这些 JCL 代码可能会被作为一个很大顺序执行 batch 作业的一个部分。

注释:IEFBR14 名字的来历也非常有意思,早期 IBM 开发 OS/360 的一个团队使用 IEF 作为他们所有模块的前缀。在汇编语言中,BR 的意思是跳到(Branch)寄存器中的地址,而跳到通用寄存器14的地址是结束一个程序的标准方法。尽管这不是什么机灵的名字,实际上所有献身于 z/OS 的用户都能非常容易记的 IEFBR14。

IEFBR14 不是一个 utility,从这个意义上来说他不应该包含到 Utilities 的手册上。然后没有任何其他特别的分类可以包含这个有用的程序,所以我们专制地把它放到 Utility 的分类中。

下一个 utility:IEBGENER

什么是 JCL

JCL(Job Control Language,作业控制语言)是描述运行在 IBM 大型机上的 z/OS 和 z/VM 操作系统中的作业(执行单元)的语言。大型机操作系统给以在电脑上启动的所有作业分配时间和空间资源。作业依次被分解为作业步。作业是无需用户交互的操作(例如,打印作业)的后台执行单元(有时称 Batch)。另外,操作系统管理着交互的(前台的,Online)用户请求,这些请求初始化了执行单元。一般来说,前台操作被赋予了比后台操作更高的优先级。

一本IBM的手册把整套JCL语言比作餐馆的点菜的订单。整个订单就像是作业。在后台厨房,厨师把订单分解开来,作出每一道菜(作业步)。当作业步都完成时,整顿饭就做好了(但每道菜必须按指定的顺序来做,就像某些作业步是依赖于其他一些已经执行了的作业步一样)。

JCL 语句主要描述了需要访问的输入数据集,将要被创建或修改的输出数据集,需要为这个作业分配哪些资源,以及要使用这些输入输出数据集来运行的程序。一个作业的 JCL 语句集将会以数据集的形式存储下来,并且能够通过交互启动它。z/OS 提供了一个交互式的像菜单一样的接口 ISPF,可以用它来初始化和管理作业。

JCL 语句主要分为三部分:

  • JOB — 给系统提供作业名,它可能含有帐号信息和其他参数
  • EXEC — 要去执行的程序名,在一个作业可能含有多个 EXEC 语句,在同一个作业中的 EXEC 语句叫做作业步(Job Step)
  • DD — 数据集定义(Data Definition)定义了 EXEC 语句中的执行程序的输入和输出数据集。这个语句链接到一个数据集或者 I/O 设备或者是程序中 DDNAME 中定义的数据集,DD 语句是和一个特定作业步相关。
在 z/OS 中,操作系统中用来处理 JCL 的那部分被称作作业入口子系统(JES)。总共有两个版本,JES2 和后来的一个带有附加功能的版本 JES3。

JCL 的语法是比较简单,如果你有什么不明白的地方你可以给我们留言,我们会尽力回答你们的问题。
接下来的关于 JCL 文章,我们会主要介绍 JCL 的 Utilities,第一个我们会介绍的是 IEFBR104

Mainframe 系统架构进化

Mainframe 在20世纪60年代开始得到大力发展。在那时,mainframe 只是某种类型的电脑而已,它们只能支持很少的商业活动。销量也很少,并且每台 mainframe 是独一的,被裁剪以适合客户主要的(经常也是唯一的)商业程序。

在1964年,事情发生了戏剧性的变化, mainframe 厂商开始统一标准化它们提供给客户的硬件和软件。这个改变发出了开始一般用途电脑的年代的信号。mainframe 以标准化运行他们的 workload,客户可以不用去指明底层的硬件和软件去写他们的商业程序。此外,客户可以免费的升级到更新的并更强大的处理器,而不需要去考虑和他们现存程序的兼容性问题。第一批用来写客户商业程序的语言绝大部分是 COBOL,FORTRAN 或者 PL/1。而且这些非常老的程序绝大部分今天依就在使用。

从1960年开始每十年,mainframe 计算机开始稳步发展并实现了巨大的运算能力,今天的 Mainframes 已经有无与伦比的能力去服务成千上万的最终用户,可以管理 P 级别的数据,并能重新装配硬件和软件去适合 workload 的改变,– 所有的知一切都是来源于一台电脑的控制。


5月29日

什么是 Mainframe

z900 既然我们的 BLOG 叫做 BlueMainframe,那么我们所讨论的内容就都围绕着 IBM Mainframe。那么什么是 Mainframe 呢?

现今,我们已经很少使用 Mainframe - 主机、大型机 - 这些词了,取而代之用语是大型商业计算机或者服务器,Mainframe 被归为大型商业服务器一类了。就像我们说的 zSeries Mainframe 叫做 Z 系列服务器。服务器的增长速度相当惊人,我们日常的商务活动中已经涉及到太多的服务器:业务服务器、数据服务器、邮件服务器、网络服务器等等。从普通的家庭个人电脑到时下最顶尖的主机硬件的需求始终都是决定服务器的功能水平。最初的 Mainframe 是作为一个中央数据库或一个网络集线中心出现的,存储着大量的数据,通过相对功能较低的工作站或者终端连接着各个用户的设备。它的出现意味着数据的大规模集中,用以节省客户的资源和维护成本,同时还能够增进数据的流动。但是随着个人电脑的运算速度的加快、更加功能化,Mainframe 必须向更灵活更多元化的方向发展以适应市场的需要。于是能够动态配置硬件或者软件的 Mainframe 出现了。

但是当硬件已经不能更好的分档管理的时候,Mainframe 需要有更好的方法来解决。于是在 1964 年,IBM推出了第一代计算机操作系统:System/360™ (or S/360™)。并以此为基础提出了操作系统平台,并每十年的对操作系统构架进行一次革新,1970年推出了 System/370™,1983年推出了 System/370 Extended Architecture (370-XA),1990年推出了 Enterprise Systems Architecture/390® (ESA/390),到了2000年 z/Architecture™ 诞生了。这段历史会在随后的介绍性帖子中陆续将到。IBM 推出的这一系列操作系统平台将 Mainframe 的灵活性和应用广泛包容性推到了顶峰。

回到主题,什么是 Mainframe 呢?Mainframe 在今天更多地被形容成一整套操作、应用和系统的集合。但是从工作性质和运用的方面来定义:Mainframe 就是指在商业活动中,用以管理商业数据和维护交易服务并能够提供更高级别的安全性和实用性的机器。

其实 Mainframe 是不可能用一句话来定义的,各种定义都会很牵强,也有很多偏拨之处。因为 Mainframe 本身的含义已经超越了其字面理解的范围。我们不妨用几个词或句子来形容以下 Mainframe:

  • 兼容性 - 提供硬件和软件以及几乎所有操作系统的兼容;
  • 集中性 - 实现资源的集中管理以提高资源的合理利用率;
  • 保护性 - 硬件或软件被同时从不同途径访问的时候自动对其进行保护;
  • 流程化 - 能够在即使轮班的情况下使用操作手册完成一系列的复杂操作;
  • 并行化 - 硬件或者操作系统上同时进行成百上千的I/O运算;
  • 聚类化 - 能够在一个系统中同时操控多个系统,并对其应用软件进行增减(这一点在 z/VM 系统中尤为突出);
  • 共享性 - 在不同的操作系统间共享资源并允许用户跨系统访问。
Mainframe 就是将这些特点集于一身的最有代表性的机器。

敬请期待 Mainframe 下篇文章: Mainframe 系统架构进化

开始

我们会以一系列的基础知识的介绍开始我们的博客,希望这些基础知识能够帮助大家重新认识和理解mainframe以及相关的技术。

大概一个星期五篇这个样子,目前由DSmith来给大家写。但是我们也是mainframe的工作经验也不是很丰富,知识面也不是很宽。所以任何建议和批评都是欢迎的,也希望热心的你也加入到我们之中来。

目前我们还有的大型机系统维护的论坛也在进行中,如果你有任何问题,非常欢迎你到我们的论坛上提问或者解答提出的问题。

首先是我们的第一篇:什么是 Mainframe

5月28日

Hello Blue Mainframe!

我们大型机的系统维护的博客开博了!大家多多来捧场!