百硕客户通讯,总第 - bayss.com

36

Upload: others

Post on 02-Mar-2022

17 views

Category:

Documents


0 download

TRANSCRIPT

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

1

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

2

CICS TS V4.1 简介

引言:

CICS® Transaction Server (CICS TS) V4.1将在

2009年第2或第3季度发布,新版本增加支持Web 2.0、Event Processing的功能,系统更加开放。新增

加了CICS Explorer工具,该工具整合了IBM工具及

第三方产品的特点,功能强大且使用方便。

下面是IBM对CICS TS V4.1新增功能的一个

初步介绍,大家先睹为快。

At a glance CICS® Transaction Server (CICS TS) V4.1 will deliver important new function to help businesses meet the demands of increased regulatory scrutiny, address changing demographics, and position themselves to take advantage of new growth opportunities. New function includes: • Non-invasive detection and emission of business events from within CICS applications will provide insight into business behavior. • Atom feeds and RESTful APIs will enable existing CICS applications to participate in mashups and similar Web 2.0 development styles. • The CICS Explorer will simplify the development and management of traditional and modern applications and provide an integration point for IBM® and third-party tools. Overview CICS Transaction Server for z/OS® (CICS TS) is a modern, dependable, and cost-effective application platform. In second or third quarter 2009, CICS TS V4.1 will deliver new business event capabilities, Web 2.0 programming support, and new operational tooling that will enable enterprise agility when responding to business opportunity and risk in rapidly changing markets. Its traditional qualities of security, reliability, availability, scalability, data-integrity, and application responsiveness make CICS TS the

perfect transaction-server partner for Web application servers. CICS TS V4.1 will build on the solid foundations, mature service oriented architecture (SOA) support, and open connectivity of previous CICS versions, bringing new levels of ease-of-use and flexibility to meet the needs of the next generation of business users. It will assist its users in their activities directed at: • Competing for new opportunities by gaining insight into business processes and responding by modifying key business applications quickly and with confidence • Complying with corporate, industry and government policies to manage business risk of critical business applications • Controlling costs by simplifying IT infrastructure and improving development and operations productivity through easier-to-use interfaces and functions Key prerequisites The minimum required level of operating system for CICS TS V4.1 is z/OS V1.9 (5694-A01). Key enhancements CICS TS V4.1 will support two or more of these themes, simultaneously. For example, the ability to generate business events without changing application programs reduces the cost and complexity of delivering compliant and flexible business solutions. Support for event processing Users will be able to specify atomic business events and then capture and emit them from a CICS application, without the need to change the application. These business events can be used in many ways, such as providing insight into business activity and processing, or driving new processing to respond to business opportunities or threats. For example, they could be consumed by another CICS

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

3

application or placed on a WebSphere® MQ queue. Once on the queue, they could be consumed in a variety of ways, including: • By a business event processing engine, such as WebSphere Business Events. Customers with CICS TS V3 can generate events today using SupportPactm CB11 -- CICS Events for WebSphere Business Events. • By a dashboard, such as WebSphere Business Monitor • Other methods, such as reading the event in another program Atom feeds from CICS CICS will be able to provide access to CICS resources and application programs in a RESTful style by exposing them as Atom feeds or collections, structured according to the Atom Syndication Format and the Atom Publishing Protocol. This implementation of REST (Representation State Transfer) permits the HTTP methods GET, PUT, POST, and DELETE to be used to read and update the contents of CICS resources from an external HTTP client application. This will allow the business content currently locked within CICS to be viewed and manipulated using modern Web2.0 applications, such as feed readers and mashups. The CICS Explorer The CICS Explorer - the new face of CICS - is the new systems management tool framework for CICS. It will provide an intuitive, easy-to-use way of managing one or more CICS regions. The CICS Explorer provided with CICS TS V4.1 will support all of the new function in the release - for example, resources associated with event processing and resource bundles. It allows both viewing and updating operations for resource definition and system management operations for both single and multiple CICS regions. The CICS Explorer also acts as a point of Integration for other CICS tools. Developers of complementary tools, whether from IBM teams, business partners, or customers, can use a supplied software development kit to extend and

integrate their software tools as plug-ins to the Explorer framework. Other important enhancements The other important enhancements in CICS TS V4.1 are grouped by the theme that they primarily support. Business flexibility Support for application components CICS will provide the infrastructure and runtime support for the deployment and management of application components. These application components will provide a common programming interface for service invocation, and a service description that is compliant with the Service Component Architecture (SCA). This further improves the ability to publish and use CICS applications in an SOA. Support for application bundles Users will be able to deploy a set of resources that are supported by the new CICS bundle resource type. By enabling and disabling a bundle, users will be able to manage the availability of an application and the life-cycle of its associated resources. CICS will dynamically create, enable, or disable the set of resources and maintain the relationship between them. Improvements to data mappings CICS will provide faster and enhanced conversion between XML and language structures for all Web services, and new APIs to use these services independent of Web services. Support for Web services addressing CICS TS V4.1 will support services that use the Worldwide Web Consortium (W3C) Web Services Addressing (WS-Addressing) specifications. WS-Addressing is a transport-neutral mechanism for passing messaging information between Web services. WS-Addressing combines an Endpoint Reference (EPR) with Message Addressing Properties (MAPs). Support for Java 6 CICS TS V4.1 will support the latest Java language features, environment and unique

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

4

System z extensions provided by IBM 31-bit SDK for z/OS Java Technology Edition, V6. The IBM 31-bit SDK for z/OS Java Technology Edition, V6 is designed to be compliant with the Java SDK 6 compatibility test and provides the stability, service, and scalability and exploitation of System z Application Assist Processors (zAAPs) you expect from System z. CICS continues to manage effectively and scale large workloads comprised of Java applications or a mixture of Java, COBOL, and other compiled languages. Governance and compliance Improvements in management of resource definitions A new resource signature will provide change management information for resources that are installed or changed under CICS TS 4.1. Users will be able to take advantage of these improved details to detect resource modifications to support audit tracking and problem resolution. Exploitation of identity propagation CICS TS V4.1 will be able to use the z/OS Identify Propagation capabilities that allow distributed end-user identities to be associated with z/OS user IDs, enabling CICS applications to participate in end-to-end security solutions and support accountability auditing. Security improvement for DB2 users The CICS interface with DB2® will provide additional function when using DB2 and RACF®. CICS can be configured to pass the address of its region user ID Access Control Environment Element (ACEE) to simplify the recommended migration from DB2 internal security to using RACF. Support for WebSphere Service Registry and Repository to publish and read Web service descriptions The CICS Web services assistants will include support for directly publishing and reading Web service description language (WSDL) information from WebSphere Service Registry and Repository. WebSphere Service Registry

and Repository provides features to store, find, enrich, manage, and govern Web services. IT simplification Extensions to CICS-to-CICS intercommunications over TCP/IP As part of the multi-release IP interconnectivity (IPIC) initiative, CICS will provide the facility to use TCP/IP instead of SNA for key base intercommunications functions, including 3270 based transaction routing, and START and CANCEL commands. This is in addition to Distributed Program Link (DPL) introduced in CICS TS V3.2. Support is also provided for the definition and installation of IPIC connections between CICS regions using SYSLINK resources. Support for Internet Protocol version 6 CICS will operate natively in an Internet Protocol version 6 (IPv6) network without the need for address translation. IPv6 provides for a greater number of addresses and provides improvements in areas such as routing and network auto-configuration. CICS will also continue to operate in an IPv4 network as before. Support for WebSphere MQ queue-sharing groups The CICS-WMQ connection will be easier to configure, manage and is more robust. New resource definitions configure the CICS-WMQ connection and can specify a WebSphere MQ queue-sharing group. CICS will connect to any eligible queue manager in the group, and in failure scenarios will automatically reconnect to another member. Improvements to workload management support CICS is now able to use the coupling facility to store more detailed, accurate workload management data. This enhancement supports dynamic workload management capabilities when running in a z/OS Parallel Sysplex® environment and enables improved performance and overall transaction throughput. The CICS systems management client API

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

5

CICS will provide a powerful new CICS systems management client API using Representational State Transfer (RESTful) principles, for use by HTTP client applications including the CICS Explorer. This new API can be used to develop RESTful client applications that manage CICS resources. New system programming commands for managing the CSD A new set of CICS System Programming Interface (SPI) commands will enable automation programs to inquire and change resource definitions in the CICS System Definition (CSD) file as an alternative to the 3270 user transaction CEDA and the DFHCSDUP batch utility. The Discovery Library Adapter for CICS The Discovery Library Adapter (DLA) for CICS will provide a utility that will collect runtime configuration and relationship information about CICS and CICSPlex® SM

resources, and then generate XML files that can be used by a discovery library reader, such as Tivoli® Business Service Manager, for the purpose of generating Business Service Views and dashboards. Improvements in CICS monitoring New performance data metrics will be provided for Web and Web service applications, enabling improved performance reporting and analysis of these applications to be performed. New transaction resource class monitoring data will be provided for distributed program link (DPL) requests, enabling users to better understand the work load management of their DPL applications. Reference information An open beta version of CICS TS V4.1 will be made available free of charge. To register your interest, visit :http://www.ibm.com/software/htp/cics/tserver/v41/openbeta

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

6 6

通过 CICS 访问 VSAM 文件的程序设计

百硕资深工程师 罗畅

在主机上通过 CICS 进行开发和管理,经常需要联机访问 VSAM 文件,而目前 CICS自带的面向应用的基本功能是“CECI READ FILE()”语句。这些 CECI 命令基本能满足

查看文件记录的功能,但重复使用这些命令去查看文件记录显得操作繁杂。市场上有访问

联机文件功能的工具软件:FILE-MANAGER(IBM 公司产品),FILE-AID(COMPUWARE公司产品)等。这些工具的优点是为客户提供了友好的用户界面,其集成性和简单化大大

方便了使用者的操作。在主机应用深入发展的今天,笔者认为可以结合国内主机应用的特

点,自主开发基于主机 CICS 使用的简单辅助程序。

本篇文章抛砖引玉,介绍了使用 COBOL 语言通过 CICS 应用实现联机读取 VSAM 文

件并显示记录的小程序。

此联机访问文件程序实现的思路比较简单:将 COPYBOOK 各个变量的信息显示在

MAP 的左侧;交易同时把读取的记录按照 COPYBOOK 变量的格式显示在 MAP 的右侧,

这样就构成简单的用户访问界面。示例如下:

1.输入需要访问的 CICS 联机文件:

2.按 ENTER 键后转到以下界面:

图 1 图 2 图 3

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

7 7

3.按 F2 键后可以切换到以下界面:

以问答的方式列出此程序具体实现的部分关键技术如下: 1. 如何通过 CICS 读取 PDS 内的 COPYBOOK 信息? 2. 如何获取 COPYBOOK 的数据结构?

如何通过 CICS 读取 PDS 内的 COPYBOOK 信息?

通过 CICS 访问 PDS 的 MEMBER 主要有两种方法:

第一种:CICS 程序通过汇编程序 SVC 99 的方式访问,此种方法需要较高的汇编编程

技术能力。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

8 8

第二种:通过 CICS 自带的 SPOOLOPEN,SPOOLWRITE,SPOOLCLOSE 命令准备

和提交 JCL,通过这个 JCL 访问 PDS 上的 COPYBOOK 后,再通过 EXCI 接口,将

COPYBOOK 的内容传回到 CICS。这可以使用较为简单的 COBOL 语言来实现,而相对于

汇编语言来说,COBOL 语言的掌握和使用相对容易些。

以下将针对第二种方式,列出访问 PDS MEMBER 的设置和部分程序代码:

A. 三处系统设置:

1). 确认当前 JES2 支持的 NODE。在 CONSOLE 上 DISPLAY NODE 的信息如下: 00- 01.35.45 \D NODE(01)

01.35.45 \HASP826 NODE(1)

\HASP826 NODE(1) NAME=N1,STATUS=(OWNNODE),AUTH=(DEVICE=YES,

\HASP826 JOB=YES,NET=NO,SYSTEM=YES),TRANSMIT=BOTH,

\HASP826 RECEIVE=BOTH,HOLD=NONE,PENCRYPT=NO,

\HASP826 ENDNODE=NO,REST=0,SENTREST=ACCEPT,COMPACT=0,

\HASP826 LINE=0,LOGMODE=,LOGON=0,

\HASP826 PASSWORD=(VERIFY=(NOTSET),SEND=(NOTSET)),

\HASP826 PATHMGR=YES,PRIVATE=NO,SUBNET=,TRACE=YES

2). 按照以下参数设置 CICS 中 EXCI 接口的 SESSION 和 CONNECTION: OBJECT CHARACTERISTICS CICS RELEASE = 0620

CEDA View CONnection( CTSO )

CONnection : CTSO

Group : TESTGRP

DEscription : CONNECTION FOR TSO

CONNECTION IDENTIFIERS

Netname :

INDsys :

REMOTE ATTRIBUTES

REMOTESYSTem :

REMOTEName :

REMOTESYSNet :

CONNECTION PROPERTIES

ACcessmethod : IRc Vtam | IRc | INdirect | Xm

PRotocol : Exci Appc | Lu61 | Exci

OBJECT CHARACTERISTICS CICS RELEASE = 0620

CEDA View Sessions( CTSOSESS )

Sessions : CTSOSESS

Group : TESTGRP

DEscription : SESSION FOR TSO

SESSION IDENTIFIERS

Connection : CTSO

SESSName :

NETnameq :

MOdename :

SESSION PROPERTIES

Protocol : Exci Appc | Lu61 | Exci

MAximum : 000 , 000 0-999

3). 设置目标 CICS 为 z/OS 系统的 SUBSYSTEM: 找到当前系统生效的 DFHSSIxx,添加目标 CICS 为 SUBSYSTEM,例如需要使用的 CICS 为 CIC1:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

9 9

VIEW ADCD.ZOSV1R3.PARMLIB(IEFSSN00) - 01.03 Columns 00001 00072

Command ===> Scroll ===> CSR

****** ***************************** Top of Data *****************************

000001 SUBSYS SUBNAME(JES2) /* JES2 AS PRIMARY SUBSYSTEM */

000002 PRIMARY(YES) START(NO)

000003 SUBSYS SUBNAME(RACF) /* RACF SUBSYSTEM */

000004 INITRTN(IRRSSI00) INITPARM('#')

000005 SUBSYS SUBNAME(TNF)

000006 SUBSYS SUBNAME(VMCF)

000007 SUBSYS SUBNAME(CICS)

000008 SUBSYS SUBNAME(CIC1)

(以上设置目标 CICS 为 SUBSYSTEM)

在 CONSOLE 上输入以下命令,动态添加新设立的 CICS SUBSYSTEM:

SETSSI ADD,S=CICS

B. ONLINE 程序提交 JCL 的部分程序代码: 5000-PREPARE-SPOOL.

MOVE 'INTRDR' TO WK-USERID --- INTRDR 参数表示此 JCL 会被马上提交

MOVE 'N1' TO WK-NODE --- 在 JES2 中选择存在的 NODE 节点

MOVE 'A' TO WK-CLASS --- 可以设定作业运行的 CLASS

EXEC CICS SPOOLOPEN OUTPUT NODE(WK-NODE)

USERID(WK-USERID)

TOKEN (TOKEN-ID )

CLASS(WK-CLASS)

NOCC

RESP(WK-RESP)

RESP2(WK-RESP2)

END-EXEC.

PERFORM VARYING WK-IX FROM 1 BY 1

UNTIL WK-IX > 26

PERFORM 5100-WRITE-SPOOL THRU 5100-EXIT

END-PERFORM

EXEC CICS SPOOLCLOSE

TOKEN (TOKEN-ID)

RESP(WK-RESP)

RESP2(WK-RESP2)

END-EXEC.

5000-EXIT.

EXIT.

****************************************************

5100-WRITE-SPOOL.

EXEC CICS SPOOLWRITE

FROM(JCL-LINE(WK-IX)) --- JCL-LINE 数组里放置 JCL 的内容

FLENGTH(80)

TOKEN(TOKEN-ID)

RESP(WK-RESP)

RESP2(WK-RESP2)

END-EXEC.

5100-EXIT.

EXIT.

JCL-LINE 数组的内容在下文有详细说明。

如何获取 COPYBOOK 的数据结构?

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

10 10

COPYBOOK 记录的数据结构,具体包括各个 FIELD 的长度、偏移量、变量属性等信

息,准确获得这些信息才能将联机文件的记录按照 COPYBOOK 的格式列出来。而编译

COBOL 程序的作业输出中,有以下两种格式的信息: DATA DIVISION OFFSET 信息:

01 WK-AREA. BLW=0000+1F0 0CL145

05 WK-SYSTIME PIC S9(15) PACKED-DECIMAL. BLW=0000+1F0,0000000 8P

05 WK-FUNC PIC X(01). BLW=0000+1F8,0000008 1C

88 WK-FUNC-OK VALUE '1' '2' '3' '4' '5'

'6' '7' '8' '9'.

05 WK-PROGNAME. BLW=0000+1F9,0000009 0CL8

10 FILLER PIC X(05) VALUE 'TSOL1'. BLW=0000+1F9,0000009 5C

10 WK-PRGFLD1 PIC X(01) VALUE SPACE. BLW=0000+1FE,000000E 1C

IMP

10 WK-PRGFLD2 PIC X(01) VALUE '0'. BLW=0000+1FF,000000F 1C

10 FILLER PIC X(01) VALUE SPACE. BLW=0000+200,0000010 1C

IMP

DATA DIVISION MAP 信息:

Hierarchy and Base Hex-Displacement Asmblr Data

Data Name Locator Blk Structure Definition Data Type

PROGRAM-ID

TSOL001--------------------------------------------------------------------------------------------------

1 WK-AREA . . . . . . . . . . . . . . . . . . . BLW=0000 1F0 DS 0CL145 Group

2 WK-SYSTIME. . . . . . . . . . . . . . . . . BLW=0000 1F0 0 000 000 DS 8P Packed-Dec

2 WK-FUNC . . . . . . . . . . . . . . . . . . BLW=0000 1F8 0 000 008 DS 1C Display

88 WK-FUNC-OK. . . . . . . . . . . . . . . . .

2 WK-PROGNAME . . . . . . . . . . . . . . . . BLW=0000 1F9 0 000 009 DS 0CL8 Group

3 FILLER. . . . . . . . . . . . . . . . . . BLW=0000 1F9 0 000 009 DS 5C Display

3 WK-PRGFLD1. . . . . . . . . . . . . . . . BLW=0000 1FE 0 000 00E DS 1C Display

3 WK-PRGFLD2. . . . . . . . . . . . . . . . BLW=0000 1FF 0 000 00F DS 1C Display

3 FILLER. . . . . . . . . . . . . . . . . . BLW=0000 200 0 000 010 DS 1C Display

2 WK-RESP . . . . . . . . . . . . . . . . . . BLW=0000 201 0 000 011 DS 4C Binary

2 WK-SEND-MSG . . . . . . . . . . . . . . . . BLW=0000 205 0 000 015 DS 20C Display

2 WK-SEND-MSG-LENGTH. . . . . . . . . . . . . BLW=0000 219 0 000 029 DS 2C Binary

2 WK-RUN-AREA . . . . . . . . . . . . . . . . BLW=0000 21B 0 000 02B DS 0CL100 Group

3 WK-RUN-RUN-STATUS . . . . . . . . . . . . BLW=0000 21B 0 000 02B DS 1C Display

在 z/OS 编程中,知道了一个变量的偏移(OFFSET)、长度(LENGTH)、数据属性

(是压缩十进制、还是二进制、或是字符等)就能准确获得这个变量的内容。COMPILE LIST中 OFFSET 和 MAP 这两种信息完整地列出了 COPYBOOK 里面各个域的偏移量(Blk),长

度(Structure)和属性(Data Type),根据这些变量的信息,我们可以获得变量的内容。在程

序设计中,只需要选择 OFFSET 和 MAP 两种信息其中的一种就可以完全描述 COPYBOOK内的域了。

以下列出了一种技巧,准备好 JCL 校验 COPYBOOK 的合法性,并获得 COPYBOOK内变量的信息:

01 JCL-CNTL-AREA.

05 FILLER PIC X(80) VALUE

'//TSJP002 JOB '.

05 FILLER PIC X(80) VALUE

'//COBOL EXEC PGM=IGYCRCTL,REGION=2M,PARM=(MAP)'. –COMPILE OPTION 为 MAP

05 FILLER PIC X(80) VALUE

'//STEPLIB DD DSNAME=IGY310.SIGYCOMP,DISP=SHR'.

05 FILLER PIC X(80) VALUE

'//SYSLIB DD DSNAME=TEST.LC.BAT.MACLIB,DISP=SHR'.

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

11 11

05 FILLER PIC X(80) VALUE

'//SYSPRINT DD DSNAME=&&OUTREC,UNIT=3390,'.

05 FILLER PIC X(80) VALUE

'// DISP=(NEW,KEEP,KEEP),'.

05 FILLER PIC X(80) VALUE

'// SPACE=(TRK,(3,3)),DCB=(BLKSIZE=3200)'.

05 FILLER PIC X(80) VALUE

'//SYSLIN DD DSNAME=&&LOADSET,UNIT=3390,'.

05 FILLER PIC X(80) VALUE

'// DISP=(MOD,PASS),SPACE=(TRK,(3,3)),'.

05 FILLER PIC X(80) VALUE

'// DCB=(BLKSIZE=3200)'.

05 FILLER PIC X(80) VALUE

'//SYSUT1 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT2 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT3 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT4 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT5 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT6 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSUT7 DD UNIT=3390,SPACE=(CYL,(1,1))'.

05 FILLER PIC X(80) VALUE

'//SYSIN DD DSN=TEST.LC.BAT.MACLIB(COPHEAD),DISP=SHR'. –COPHEAD 内容如下

05 WK-INPUT PIC X(80) VALUE

'//*'.

*注释 WK-INPUT 的内容为 MAP 中输入的 PDS 和 MEMBER

05 FILLER PIC X(80) VALUE

'// DD DSN=TEST.LC.BAT.MACLIB(COPTAIL),DISP=SHR'. –COPTAIL 内容如下

05 FILLER PIC X(80) VALUE

'//COP0 EXEC PGM=TSBP001,COND=(4,LE,COBOL)'.

05 FILLER PIC X(80) VALUE

'//STEPLIB DD DSN=TEST.LC.BAT.LOADLIB,DISP=SHR'.

05 FILLER PIC X(80) VALUE

'// DD DSN=CICSTS22.CICS.SDFHEXCI,DISP=SHR'.

05 FILLER PIC X(80) VALUE

'//TSCOP0 DD DSN=&&OUTREC,DISP=SHR'.

05 FILLER PIC X(80) VALUE

'//SYSPRINT DD SYSOUT=*'.

05 FILLER PIC X(80) VALUE

'/*EOF'.

01 JCL-CNTL-ITME REDEFINES JCL-CNTL-AREA.

05 JCL-LINE OCCURS 26 TIMES PIC X(80).

引用的 COPYBOOK 内容如下: VIEW TEST.LC.BAT.MACLIB(COPHEAD) - 01.19 Columns 00001 00072

Command ===> Scroll ===> CSR

****** ***************************** Top of Data ******************************

000001 ID DIVISION.

000002 PROGRAM-ID. COPYBOO.

000003 ENVIRONMENT DIVISION.

000004 DATA DIVISION.

000005 WORKING-STORAGE SECTION.

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

12 12

000006

****** **************************** Bottom of Data ****************************

VIEW TEST.LC.BAT.MACLIB(TSCFTSQ) - 01.04 Columns 00001 00072

Command ===> Scroll ===> CSR

****** ***************************** Top of Data *****************************

000001 01 TSQ-DATA.

000002 05 TSQ-INDEX PIC 9(05) PACKED-DECIMAL.

000003 05 TSQ-LINE PIC 9(07) PACKED-DECIMAL.

000004 05 TSQ-LVL PIC X(02).

000005 05 TSQ-FLDNAME PIC X(35).

000006 05 TSQ-NORMAL-FG PIC X(01).

000007 05 TSQ-UP-FG PIC X(01).

000008 05 TSQ-OCC-FG PIC X(01).

000009 05 TSQ-RED-FG PIC X(01).

DELETE SOME ROWS………………

VIEW TEST.LC.BAT.MACLIB(COPTAIL) - 01.19 Columns 00001 00072

Command ===> Scroll ===> CSR

****** ***************************** Top of Data ******************************

000001 PROCEDURE DIVISION.

000002 STOP RUN.

****** **************************** Bottom of Data ****************************

联机程序准备并提交作业 JSJP002。作业 JSJP002 使用 COBOL II 编译器 IGYCRCTL,对 COPHEAD,TSCFTSQ,COPTAIL 组合成的 COBOL 程序进行编译;而其中 TSCFTSQ正是之前图一中输入的 COPYBOOK。在提交的作业 JSJP002 中,若 IGYCRCTL 的执行作

业步返回码小于等于 4,则说明 COPYBOOK TSCFTEST 里的内容是满足 COBOL 语法的。

而编译后 COPYBOOK 的 OFFSET 和 MAP 的信息,将被存放在临时数据集“&&OUTREC”中。

作业 JSJP002 随后执行 BATCH 程序 TSBP001,处理 COPYBOOK 中的数据结构和属

性的信息,而在程序 TSBP001 中会调用联机程序 TSOLQUE,将 COPYBOOK 变量的偏移

量、长度、属性等信息传递到 CICS 中。作业 JSJP002 中调用的 BATCH 程序部分关键源代

码如下(BATCH 程序 TSBP001 将获取的 COPYBOOK 信息通过联机程序 TSOLQUE 传送

到 CICS 中): 000001 CBL XOPT(EXCI) ---CBL 代表 COMPILE OPTION

000002 ID DIVISION.

000003 PROGRAM-ID. TSBP001.

DELETE SOME ROWS……………… 000438 *****************************************************************

000439 *WRITE TSQ *

000440 *****************************************************************

000441 3000-WRITE-TSQ.

000442 MOVE TSQ-DATA TO BAT-COMMAREA

000443 MOVE LENGTH OF BAT-COMMAREA

000444 TO LINK-COM-LEN

000445 MOVE LENGTH OF BAT-COMMAREA

000446 TO LINK-DAT-LEN

000447 MOVE 'CICS1' TO WK-APPLID ---目标 CICS 的信息

000448 MOVE 'TSOLQUE' TO WK-PROGRAM ---TSOLQUE 执行写 TSQ 的功能

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

13 13

000449 MOVE 'CSMI' TO WK-TRANSID ---TRANSID 为 CSMI

000458 EXEC CICS LINK PROGRAM(WK-PROGRAM)

000459 APPLID(WK-APPLID)

000460 TRANSID(WK-TRANSID)

000461 COMMAREA(BAT-COMMAREA)

000462 LENGTH(LINK-COM-LEN)

000463 DATALENGTH(LINK-DAT-LEN)

000464 RETCODE(EXCI-EXEC-RETURN-CODE)

000465 SYNCONRETURN

000466 END-EXEC.

000467 3000-EXIT.

000468 EXIT.

通过以上方式,CICS 获得了 PDS 中 COPYBOOK 的变量信息,放置在 MAP 的左边;

同时 CICS 读取联机 VSAM 记录后,可再使用读取到的 COPBOOK 变量的偏移量、长度、

属性等信息,获取 VSAM 记录中变量的内容放置在 MAP 的右边,这样就组成文章开头的

图二和图三的画面,形成了一个对 VSAM 文件方便访问的界面。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

14 14

如何自动生成虚拟 磁带整合作业 百硕资深工程师 罗文军

在使用磁带库的主机系统环境下,如果仅有本地磁带库而没有异地磁带库,常用的一

种数据异地保存的操作方式是:操作员每日执行虚拟磁带(以下简称虚带)整合作业,将

虚带合成物理磁带送往异地存放。要实现该功能的传统做法是:首先需要操作员检查多个

备份作业的输出结果,手工记录这些备份数据集所使用的虚带带标。之后,系统操作员开

始编写虚带整合作业,手工输入所记录的虚带带标, 后提交该整合作业。带库软件提供

的虚带整合作业示例如下: //STEP1 EXEC PGM=SWSADMIN

//SLSPRINT DD SYSOUT=*

//SLSIN DD

CONS VTV( -

Z00023,-

Z00024,-

Z00026 –

....................

)

然而每次处理的虚带数目较多,在本案例中,据统计,客户的系统操作员每天至少要

登记 40 多个虚带带标。除此以外,在每月第一天的虚带整合过程中,操作员还要登记上个

月每天的日志备份虚带约 30 盘左右,总共约 70 盘虚带。因此该项工作的手工操作内容较

多,容易造成人为疏漏。有鉴于此,我们可以通过 IBM 提供的主机程序,结合作业的自动

化处理方式,自动生成虚拟磁带整合作业,减轻操作员的工作负担,并保证质量。

为达到上述目标,我们需要考虑的因素包括:

1)如何更方便地得到虚带信息;

2)如何对虚带信息提取虚带带标名称,再生成虚带整合作业流。

下面将与各位分享自动化进行虚拟磁带整合的实现方法及改造后的批量流程。

一、 如何更方便地得到虚带信息

首先,我们使用 TSO 命令“RMM SEARCHDATASET”列出批量备份作业中备份数据

集所用的全部虚带带标。这种方式比直接查看备份作业输出结果获取虚带带标更为直观,

并且其输出结果具有规范、整齐的特点,更有利于 REXX 程序读取虚带带标信息,这有利

于我们下一步对该输出信息进行自动化脚本处理。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

15 15

“RMM SERACHDATASET(简写为 SD)”命令的输出结果示例如下: RMM SD DSN('BK.JRN.D080813' ) OWNER(*) LIMIT(*)

Data set name Volume Owner Create date Seq

-------------------------------------------- ------ -------- ----------- ----

BK.JRN.D080813 X02658 STCUSER 2008/227 1

EDG3011I 1 ENTRY LISTED

READY

RMM SD DSN('BK.PRD.DE3.D080813') OWNER(*) LIMIT(*)

Data set name Volume Owner Create date Seq

-------------------------------------------- ------ -------- ----------- ----

BK.PRD.DE3.D080813 X02660 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02662 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02664 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02667 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02669 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02670 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02672 STCUSER 2008/227 1

BK.PRD.DE3.D080813 X02673 STCUSER 2008/227 1

EDG3012I 8 ENTRIES LISTED

READY

如果我们拟采用“RMM SD”命令的作业方式,接下来的问题是:如何通过“RMM SD”

命令列出备份数据集的虚带信息。

以下是有关备份数据集列表。

备份数据集名称

BK.PRD.DE1.Dyymmdd

BK.JRN.Dyymmdd

BK.PRD.DE3.Dyymmdd

BK.PRD.DE4.Dyymmdd

BK.PRD.DE5.Dyymmxx

BK.PRD.DE9.Dyymmxx

BK.PRD.DE6.Dyymmdd

BK.PRD.DE7.Dyymmdd

BK.PRD.DE8.Dyymmdd

BK.PRD.DEA.Dyymmdd

注:yymmdd 表示昨日日期;yymmxx 表示前日日期

通过对备份数据集命名规则的观察,我们可以看出每天备份数据集的命名中除了日期

以外,其它部分是固定不变的。因此,如果以备份数据集的日期作为一个程序变量的话,

程序中对日期的计算如下:

根据整合作业执行的当日系统日期,并由此往前推进行计算。

前日日期=当日日期-2;

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

16 16

昨日日期=当日日期-1;

另外,在每个月的第一天(1 日),需对上个月所有日志备份虚带进行整合处理。因

此我们在每个月的 1 号还需要获取上个月的月份信息,获取之后,加上通配符“*”,就可

以通过“RMM SD”命令方式列出上个月所有的日志备份数据集及所用的备份虚带带标。

月份的计算逻辑公式如下:

上个月月份=(当前月份的 1 日-14)之后的日期所在的月份。

注:

1)在 REXX 程序中,需对日期格式进行转换才能进行各个日期的计算

2)14 为我们随意设定的参与月份计算的一个计算数。也可以是其它满足月份计算要

求的数

在得到每日备份数据集的命名计算规律之后,我们就很容易利用 REXX 程序加工生成

每日要执行的“RMM SD”作业。生成的作业内容示例如下。其中的“B1DAY”、“B2DAY”、

“B1MON”等为需要计算的日期变量,分别代表昨日日期、前日日期、上个月月份。 //STEP01 EXEC PGM=IKJEFT01,DYNAMNBR=20,REGION=0M

//SYSTSPRT DD DISP=(NEW,CATLG),DSN=hlq.STKVOL.OUTPUT,

// UNIT=SYSDA,SPACE=(CYL,(1,1),RLSE),

// DCB=(LRECL=80,RECFM=FB)

//SYSLBC DD DUMMY'

//SYSTSIN DD *

RMM SD DSN(''BK.PRD.DE1.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.JRN.D'B1MON'*'' ) OWNER(*) LIMIT(*)

RMM SD DSN(''BK.JRN.D'B1DAY''' ) OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE3.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE4.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE5.D'B2DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE6.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE7.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE8.D'B1DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DE9.D'B2DAY''') OWNER(*) LIMIT(*)

RMM SD DSN(''BK.PRD.DEA.D'B1DAY''') OWNER(*) LIMIT(*)

/*'

下一步工作就是对“RMM SD”输出信息进行过滤,获取虚带带标列表。

二、 如何提取虚带信息

如本文第一节中“RMM SD”命令的输出所示,在本案例中所有的虚带带标在带库定

义中命名都以“X”作为前缀,并存在于固定的作业输出格式位置-第 46 列上。因此,我

们可以采用 REXX 程序以此为检查条件,对符合条件的记录进一步加工处理,得到虚带带

标列表,如下所示:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

17 17

DO I = 1 TO DATAIN.0

PARSE VAR DATAIN.I LINE1

IF SUBSTR(LINE1,46,1)= 'X' THEN

DO

CALL VOLSER_PROCESS

END

END

三、 改造后的批量流程

改造后包含自动生成整合作业的批量流程如下:

1) 操作员提交作业调用 REXX 程序,自动生成含 TSO 命令“RMM SEARCHDATSET”的作业。“RMM SEARCHDATASET”命令中的虚带备份数据集名称按照虚带备

份数据集的命名规范,包含昨日及前日的日期信息或上个月的月份信息。

2)系统自动执行以上生成的批量作业,得到作业输出。

3)系统自动调用 REXX 程序对作业输出进行加工,得到虚带带标列表

4)系统调用 REXX 程序生成虚带整合作业。

5)系统操作员执行自动生成的虚带整合作业。

四、 自动生成的程序作业流程图

虚拟磁带整合作业自动生成的流程顺序图如下所示:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

18 18

RMMREXX

TSO RMM SD

TSO RMM SDTSO

RMM SD TSOhlq.STKVOL.OUTPUT

IEBGENER

REXXTSO

hlq.STKVOL.OUTPUT

hlq.STKVOL.CONJCLCONSOLID

IEBGENER

TSO RMM SD

(1)

(2)

(3)

(4)

(5)

虚拟磁带整合作业自动生成的流程顺序说明:

编号 流程顺序说明

(1) 操作员提交作业,该作业的第一步调用 REXX 程序,生成含 TSO 命令“RMM SD”作业的数据集

(2) 在操作员提交的作业中,第二步调用 IEBGENER 程序启动生成的含 TSO 命

令“RMM SD”的作业

(3) 执行含“RMM SD”TSO 命令的作业,该作业第一步执行 TSO 命令“RMM SD”,该命令列出了当日批量备份数据集以及所用的虚带带标,并生成含此

信息的数据集 hlq.STKVOL.OUTPUT

(4) 在该作业的第二步调用 IEBGENER 程序启动另一作业,对生成的

hlq.STKVOL.OUTPUT 数据集进行处理 (5) 被启动的作业调用 REXX 程序,对 hlq.STKVOL.OUTPUT 数据集进行处理,

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

19 19

编号 流程顺序说明 获取虚带带标列表,整合生成名为 hlq.STKVOL.CONJCL 的数据集,内含作

业名为 CONSOLID 的虚带整合作业

以上是虚拟磁带整合作业自动生成的主要设计内容和批量流程介绍。这项工作程序实

现的难度并不大,但它的意义在于大大减轻了操作员的批量工作负担。这类工作也正是系

统管理员所应关注的,也是我们的职责所在。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

20 20

METAL C:新视野 百硕资深工程师 罗兴魁

随着 z/OS V1.9 的发布,XL C/C++的编译器新增了一个编译参数‘METAL’,选择该

参数后 XL C/C++编译器将不再生成 Object Code,编译后的输出为汇编源码。这与 IBM 使

用的 PL/X 系列编译器工作原理类似,不同之处是 PL/X 不对外公布细节,而 METAL C 作

为 z/OS 上的一个产品可以被用户使用。METAL C 的另外一个优势是采用 C 语言的语法,

较 PL/X 更加易用。

本文将对 METAL C 的一些重要特性做简短介绍。

Language Environment

传统 XL C/C++程序的运行需要 LE 运行环境支持,在系统编程的很多场景下这是不可

接受的。而 METAL C 彻底摆脱了对 LE 的依赖,这使得 METAL C 非常适宜用作系统编程。

Standard Library Functions

METAL C 支持大部分标准 C 函数,一部分函数是通过内嵌的汇编指令来实现的,另

外一部分函数则是通过跳转到 LPA 中的 METAL C 公用模块来实现的。METAL C 不提供

可以直接做 I/O 的函数。

内嵌汇编指令支持

这是 METAL C 激动人心的功能,它意味着 METAL C 程序可以使用几乎所有系统

服务。

内嵌指令通过_ASM 语句实现,如下图所示:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

21 21

METAL C 中的 C 变量在生成的汇编代码中的名字是由编译器动态产生,因此嵌入汇

编代码中无法直接引用 C 变量,如下例所示: void main()

{

int var1=8;

_asm(" L 6,%0" : :"m"(var1));

return;

};

嵌入汇编的目的是要把变量 var1的内容载入寄存器R6中,METAL C的处理逻辑如下:

操作数按照从左至右的顺序分别对应%0,%1 等,因此"m"(var1)对应%0;

这个操作数的修饰符为 m,表示内存操作数,并且位于 INPUT 位置,对于作为 INPUT的内存操作数,METAL C 会用对应 C 变量的地址 D(X,B)形式来替换汇编语句中的

操作数。

产生的汇编代码为: LA 2,@3var1

L 6,0(2)

0(2)是 C 变量 var1 的地址 D(B)形式,为使得该表达式合法,METAL C 在_ASM 语句

之前生成了一条汇编指令,将 var1 的地址存入寄存器 R2 中。

注意:在生成的汇编代码中 var1 的实际名字为@3var1。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

22 22

如果将修饰符换为 r,这表明我们需要一个寄存器作为操作数,寄存器中应是变量 var1的内容: void main()

{

int var1=8;

_asm(" L 6,%0" : :"r"(var1));

return;

};

生成的汇编代码: L 3,@3var1

L 6,3

METAL C 选择了 R3 作为操作数,同时事先将变量 var1 的内容存入 R3 中。

这里我们注意到根据_ASM 生成的 LOAD 指令在语法上是错误的,LOAD 语句需要的

是一个 D(B)形式的操作数,而我们错误地告诉 METAL C 需要的是寄存器操作数。METAL C 自身无法识别内嵌汇编语句的意义,只是根据%n 做操作数的替换。

看下面的例子: void main()

{

int var1=8;

_asm(" %0" :"=r"(var1));

return;

};

为说明 METAL C 只关心操作数替换,汇编语句中只写了一个操作数,该操作数位于

OUTPUT(=表示 write only)位置,这是告诉 METAL C 内嵌的汇编语句会向变量 var1 中

写入内容,生成的汇编代码如下: LA 2,@3var1

4

ST 4,0(,2)

METAL C 选择 R4 作为操作数替换%0,并在嵌入汇编指令之后生成 ST 指令,将 R4的内容写入变量 var1 中。

理论上嵌入汇编指令中可以不使用 METAL C 操作数,比如: _asm(“ XR 5,5”);

嵌入的汇编指令将寄存器 R5 清零,由于 METAL C 对此并不知晓,嵌入的这条汇编指

令可能会毁掉整个程序的逻辑,正确的做法是通过 CLOBBER 告诉 METAL C 嵌入汇编指

令会修改寄存器 R5: _asm(“ XR 5,5”:: "r5");

METAL C 在生成汇编代码时将保证 R5 被插入的汇编指令被修改后不会对程序其它部

分造成影响。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

23 23

使用_ASM 插入宏指令时需要考虑寻址(Addressability),很多宏的展开都包含嵌入的数

据区,由于 METAL C 生成的汇编指令一律使用 Relative Branch,因此 METAL C 生成的汇

编指令区域是 Baseless 的,对带有嵌入数据区域的宏需要手动建立寻址性,下面是一个完

整的,使用 PGSER 宏来 FIX 住一段虚存区域的 METAL C 代码片段: /* --- Structure Definition - */

struct D8_PARM {

char cmd[LEN2];

char resp[LEN3];

char end;

};

struct D8_PARM d8parm;

/* --- PAGE-FIX the parm area - */

_asm(" BASR 6,0\n"

" PUSH USING\n"

" DROP\n"

" USING *,6\n"

" PGSER R,FIX,A=(%0),EA=(%1),ECB=0,LONG=Y,BACKOUT=Y\n"

" DROP 6\n"

" POP USING"

: :"r"(&d8parm),"r"(&(d8parm.end)):"r6");

关于 METAL C 的更多信息请参考<Metal C Programming Guide and Reference, SA23-2225-00>,使用 METAL C 的关键点在于如何让插入的汇编语句与 METAL C 程序其

它部分共存,由于 METAL C 对_ASM 语句的实现与 GCC(GNU C Compiler)类似,这一

部分可参考 GCC 相关资料。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

24 24

自编程为 TBSM Server

提供数据源 百硕资深工程师 王晓兵 牛文灿

一、 TBSM 的意义

TBSM 全称是 IBM Tivoli 业务服务管理器,其主要目的是使系统数据和报警信息可视

化、图形化,以醒目的图形报告方式反映系统运行是否正常,系统的资源占用情况,以及

关键性能指标的状态,进而得到核心业务的运行状况。通过 TBSM 的集中监控视图,系统

维护人员能实时跟踪数据库、中间件以及其它应用软件和生产系统等的运行状况,通过

TBSM 的图形化管理界面,能够统一集中管理并能快速诊断出故障,修复系统正常运行,

保障业务系统的无间断性运行。

二、 TBSM 原有主机端数据采集和传输的方式

TBSM 对主机系统的事件信息搜集主要是通过 IBM Tivoli Event Pump 进行的,在每个

z/OS Image 中,Event Pump 使用了下列 3 个 Address Space:

Source Collector:用于事件信息的搜集,并将信息送到 Data Space 的信息队列中

Data Space:在 Source Collector 和 Event Distributor 之间提供通讯和中间消息队列

Event Distributor:用于与开放端的 EIF Probe 进行通讯,并将数据传输活动记录 Log

Event Pump 支持的事件信息来源包括:

从 Extended MVS Console 搜集 MVS Console 的信息,这些信息可以是启动任务、

批量作业、CICS Region 或是 DB2 UDB for z/OS 的 Start、Stop 和 Abend 等事件

通过 EDI 接口可以整合 CA 自动化软件 OPS/MVS 产生的状态或例外信息

DB2、IMS 子系统和 SA/390 的信息则需要通过 Netview PPI 接口转发给 Event Pump

Event Pump 搜集到以上事件信息后转发给 EIF Probe,而 EIF Probe 在接收到信息之

后按照 Probe 规则将信息格式化为 Netcool/OMNIbus Alerts ,再转发给

Netcool/OMNIbus object server,之后这些 Netcool/OMNIbus Alerts 可以被 TBSM 或

其他 Netcool/OMNIbus 的浏览器使用。

Event Pump 和相关部件的工作流程示意如下图所示:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

25 25

三、 自开发为 TBSM 提供数据源接口

为使主机端的数据搜集更加灵活和可控,可采用自编程的 Socket 统一接口(Socket Sender),为 TBSM 提供新的数据源接口支持,作为 Event Pump 的补充或替代。

这样做的优势是:不同来源的数据,均可以使用统一的传送接口,使信息处理流程更

为简单和透明。此外,用户根据自身监控需求,可能会增加一些自定义的数据搜集功能,

这些新的数据搜集功能是 TBSM 本身所不具备的,如在主机端通过主动发送命令检查系统

(即通过在主机端发命令,获取结果并进行分析,若出现异常则形成状态事件信息),或者

不仅需要向 TBSM 前端发送事件信息,而且需要发送一些关键 KPI 的性能信息,KPI 的性

能信息搜集功能同样也是 TBSM 本身所不具备的,这些客户化的数据信息均可以使用自编

程的 Socket 接口统一与 TBSM 的开放端进行通讯。

四、 实际案例介绍

以下是一个使用自编程 Socket 处理,实现为 TBSM 提供统一主机数据传输接口的实际

案例示意:

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

26 26

在此案例中,客户需要传输的数据不仅有事件信息,还有关键 KPI 的性能数据,包括:

从监控软件(TMON 对 z/OS、CICS 和 DB2 的各监控组件)得到的性能和事件信息;

使用 SA MAT 通过 SA Netview 与 z/OS MPF 之间的通讯接口截获的系统控制台信

息;

用户开发的大量定制化的事件信息和性能数据信息;

用户创建的一些需要进行传送的数据文件。

这些信息的获得是通过开发、部署了 6 个数据采集模块实现的:

各数据采集模块实现对系统及各子系统源数据的搜集并进行初步的分析和整理;

数据采集模块与开放端进行通讯的主机端中间层数据处理模就是采用了前一节提

到的数据传输接口 Socket Sender;

各数据采集模块均采用 REXX 程序封装对该模块的调用,将需要发送的数据(信息

或文件名称)作为参数传递给该模块;该模块接收数据后会对输入参数进行分析判

断,并将发送的数据封装为约定好的标准化的 Socket 通讯数据信息流,包括信息头

和信息体,信息头包括发送信息的长度,开放端的 Socket Server 以此来判断接收的

数据是否完整;

发送数据之后,传输模块会接收 Socket Server 的约定确认信息,如果确认正确,则

关闭 Socket 连接,完成传送。

在实际使用的过程中,我们还为主机端中间层数据处理模增加了信息传输的 Log 记录

功能,用于事后在主机端检查发送的源信息;还考虑了大量信息并发传递的能力,经过压

力测试,在并发 2000 条模拟事件信息(STC)和 1000 条模拟 Console 信息(SA MAT)的

情况下,对系统 CPU、SA Address Space 的 CPU 消耗影响有限。另外,由于主机平台与开

放端的码制不同,主机信息传送到开放端,需要考虑 EBCDIC 到 ASCII 的转码,转码处理

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

27 27

可以放在主机端,也可以在开放端;如果需要,还可以在传送之前对信息进行加密处理,

当然,加密后的信息在发送到开放端后需要进行相应的解码。

五、 总结

本文通过对一个实际案例的简单介绍,描述了一种通过自开发为 TBSM 提供新的数据

搜集和传输方法,可以作为 TBSM 原有主机数据采集和传输(Tivoli Event Pump)的补充

或替代,希望能对计划或正在实施 TBSM 项目的人员有所帮助。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

28 28

Data Sharing环境下 Insert引起的 Page Latch 百硕资深工程师 周继强

由于 DB2 Data Sharing 环境下 Insert 引起的 Page Latch,使得交易在 DB2 中的处理时

间变长,从而导致响应时间会持续变慢。这个问题涉及到了很多抽象的概念,以下通过图

表的方式较简洁的回顾 Page Latch 产生的过程,希望能清楚的描述相关对象的变换顺序,

譬如 P-LOCK,L-lock 等。

某系统有两个 LPAR,耦合方式为 Parallel Sysplex。每个 LPAR 上安装有 DB2,采用

Data Sharing 方式工作。交易访问数据库的请求,一般来说会被均衡的分配到两个 DB2 Member 上。大量的交易,从两个 DB2 Member 同时向同一表中顺序插入数据,这是引起

Page Latch 的根本原因。在顺序插入的过程中,容易引起 SUSPEND、需要更新的 PAGE 主

要有三种,即 SPACE MAP PAGE,DATA PAGE 和 INDEX LEAF PAGE。

在 DB2 中,用户数据存放在 DATA PAGE 中,由 INDEX LEAF PAGE 指向。而 DATA PAGE 中是否有足够的空间容纳新插入的数据,判断所需的信息是存放在 SPACE MAP PAGE 中。

在 DATA SHARING 环境下,从 DB2 不同的 MEMBER 执行 INSERT 操作,与传统的

操作方式有很大不同。以下图为例,模拟应用程序的请求及该系统的执行过程。DB1P、DB2P 是 DATA SHARING GROUP 中的两个 MEMBER,交易都会从 DB1P 和 DB2P 上请

求顺序插入行 R1 到同一个表 T1,表 T1 所在的 TABLE SPACE 的属性为 LOCKSIZE ROW。 1. 程序请求 DB1P 往表 T1 中插入一条数据 R1,DB1P 所获得的 P-LOCK 类型是 IX; 2. DB1P 发现 LOCAL BUFFER POOL 中的 DATA PAGE 的状态已经被置成

INVALID; 3. DB1P 从 GBP 中复制一份新的 DATA PAGE 到 LOCAL BUFFER POOL;

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

29 29

4. R1 按照 CLUSTERING INDEX 的要求,顺序插入到 后一个 PAGE。假定被 R1插入的 DATA PAGE 为 P1,包含 P1 大小信息的 SPACE MAP PAGE 为 SMP1,包

含指向 P1 指针的 INDEX LEAF PAGE 为 ILP1。由于 DB1P 和 DB2P 所获得的

P-LOCK 类型都是 IX,所请求的 PAGE 是 GBP-DEPEND; 5. 于是 DB1P 所在的 MVS 的组件,IRLM 通过 XES 在 CF 中的 LOCK STRUCTURE

声明,P1,SMP1 和 ILP1 被 DB1P 通过 P-LOCK 锁定,类型为 X ;R1 被 DB1P通过 L-LOCK 锁定,类型也为 X;

6. CF 通知 DB1P,锁定成功; 7. DB1P 开始在 LOCAL BUFFER POOL 中更新 ILP1,SMP1,P1 等; 8. 程序发出 COMMIT 指令,ILP1,SMP1,P1 等会被更新到 GBP 中; 9. 如果是 TWO-PHASE COMMIT,交易正常结束。CF 中的 LOCK STRUCTURE 会

被更新,施加在 R1 上的 L-LOCK 会被解除; 10. DB2P 得到消息,P1 在其 LOCAL BUFFER POOL 已经是 INVALID。

如果在⑥ ~ ⑦过程中,另一个程序请求 DB2P 也向 T1 顺序插入 R2。如果 DB2P 也

请求对 ILP1 或 SMP1 和 P1 做 P-LOCK 锁定,则 DB2P 上的程序会被 SUSPEND,PAGE LATCH 计时开始。为解决 P-LOCK 冲突,P-LOCK Negotiation 开始执行。在 DB1P 上的程

序 COMMIT 前,ILP1 或 SMP1 和 P1 会被更新到 GBP 中,DB1P 所持有的 P-LOCK 会被

释放。然后 DB2P 从 GBP 中获得一份 新的 LP1、SMP1 和 P1,并获取 ILP1 或 SMP1 和

P1 的 P-LOCK,PAGE LATCH 计时结束。

解决顺序插入引起的 PAGE LATCH 问题,主要有两种方法。主流方法是使用带有

MEMBER CLUSTER 属性的 TABLE SPACE。插入时,DB2P 不再受 CLUSTERING INDEX的约束,选择一个不会引起 P-LOCK 冲突的 SPACE MAP PAGE,从而避免 SPACE MAP PAGE 和 DATA PAGE 的 P-LOCK 冲突。由于 DB2P 选择了分散的 DATA PAGE,所以

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

30 30

INDEX LEAF PAGE 的 P-LOCK 冲突的几率也会降低。需要注意的是,使用 CLUSTERING INDEX 的 SQL 性能会受到显著影响,需要 REORG。

另外一种方法是所有的顺序 INSERT 指令,都只从一个 MEMBER 执行,即只有 DB1P或 DB2P 执行顺序 INSERT 指令。这样做的好处很多,譬如降低 CF 的使用率,降低

CHANNEL 的使用率,不再是 GBP-DEPEND,PAGE LATCH 的时间大大缩短,使用

CLUSTERING INDEX 的 SQL 性能不会受到显著影响等等。但是这种方法的致命伤是可用

性,这也是 IBM 推销 PARALLEL SYSPLEX 时宣传的重点。

了解 PAGE LATCH 产生的过程后,可以看出缓解 PAGE LATCH 的有效方法是使

TABLE SPACE 不再是 GBP-DEPEND。除了使用带有 MEMBER CLUSTER 属性的 TABLE SPACE,也可以使用 PARTITIONED TABLE SPACE。

使用 PARTITIONED TABLE SPACE,如果是以地区号或包含地区号的帐号作为分

PARTITION 的键值,可以通过 CICSPLEX 控制不同地区上来的交易访问不同的 DB2 MEMBER,从而访问不同的 PARTITION;如果希望所有交易要动态分配到各个 AOR,需

要对应用改造。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

31 31

具体改造方法是,对行新增一个字段,存放 DB2 Member ID;然后依据新增的字段对

表分区,譬如为 Table.P1 和 Table.P2,Clustering Index 不变。如下图所示,CICSA 和 CICSB中的交易为新增字段赋值 DB1P,CICSC 和 CICSD 中的交易为新增字段赋值 DB2P。即不

同 LPAR 的交易访问不同的 PARTITION,相互独立,从而使得 Table.P1 和 Table.P2 不再

是 GBP-DEPEND,抑制 PAGE LATCH 的影响。由于各个 PARTITION 的 PAGE 仍然按照

CLUSTERING INDEX 排列,使用 CLUSTERING INDEX 的 SQL 性能也不会受到影响。

综上所述,解决 Data Sharing 下 Insert 引起的 Page Latch,除了主流的方法,即使用带

有 MEMBER CLUSTER 属性的 TABLE SPACE,也可以使用 PARTITIONED TABLE SPACE,通过程序或 CICSPLEX 控制交易访问不同的 DB2 MEMBER。通过 CICSPLEX 控

制交易访问不同的 DB2 MEMBER,会使得交易产生 AFFINITY;通过程序控制,需要改造

应用。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

32 32

DB2 中的 Plan 和 Package 百硕资深工程师 高春霞

对于 DB2 的新用户,经常会对 DB2 中的 PLAN 和 PACKAGE 产生疑问。在本期栏目

中将主要针对 DBRM、PLAN 和 PACKAGE 等概念的一些常见问题进行解答。

问题 1:什么是 DBRM?

对于 DB2 应用程序的运行,首先需要了解 DBRM 的概念。DBRM(Data Base Request Module)是由在 DB2 应用程序中提取的 SQL 语句组成,每一个应用程序会有一个 DBRM,

DBRM 与应用程序是同名的。

要执行一个 DB2 应用程序,首先需要对程序执行预编译,DBRM 是预编译过程中一个

重要输出内容,是通过预编译器从源程序中提取所有 SQL 语句组成的模块。它存储在

Partitioned Data Set 的 Member 中,并不存储在 DB2 Catalog 或 Directory。在系统 Catalog表 SYSIBM.SYSDBRM 中的信息并不是指真正的 DBRM 的内容,而是绑定(BIND)到应

用 PLAN 和 PACKAGE 的 DBRM 的信息,例如 DBRM 存放在哪个 PDS 中等。

问题 2:什么是 PLAN?

PLAN 是可执行的代码,它是由直接通过绑定 DBRM 或从 PACKAGE 中提取的。在

PLAN 的可执行代码中,包含了通过 DB2 优化器选择的存取路径,它可以由一个或多个

DBRM 和 PACKAGE 组成。对于要运行的所有 DB2 应用程序,都必须与一个 PLAN 相关

联。

问题 3:什么是 PACKAGE?

通过绑定 DBRM 中的 SQL 语句得到一个程序 优化的、不可执行的代码,这个代码

被称为 PACKAGE。对于 PACKAGE 来说,它必须要绑定到 PLAN 中才能执行。

Package 的全名是由 Location、Collection、Package 和 Version 组成的:

Location 是指 Package 绑定的地点,它只是在远程工作单元操作时需要

Collection 是对 Packages 的逻辑分组,它的建立只需在绑定 PACKAGE 时指定即可

Package 是 DBRM 的名字

Version 选项允许相同的程序和 Package 存在多个版本

Package 的唯一标识是:

LOCATION.COLLECTION.PACKAGE.VERSION

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

33 33

一个 Package 是通过绑定一个 DBRM 中的 SQL 语句得到的。但是一个 DBRM 可以被

绑定到不同 Collection 中的多个 Package。DBRM 和 PACKAGE 是属于一对多的关系。

问题 4:什么是 BIND 操作

程序在预编译时提取出 SQL 语句,并将它们存储在 DBRM 中。然后使用 DBRM、DB2 Catalog 和 BIND 参数作为输入,在绑定过程中执行对 SQL 语句的语法检查、有效性验证、

权限检查、确定存取策略和建立 Package 或 Plan 等。

有两种 BIND 命令:

BIND PACKAGE – 绑定 DBRM 生成一个 PACKAGE,Package 是 Plan 的一个组

成部分,它只有被绑定到一个 Plan 中才能执行。

BIND PLAN – 绑定一个或多个 DBRM 和/或 Package 到一个 Plan。

问题 5:PLAN 和 PACKAGE 有什么关系?

PLAN 是可执行代码,PACKAGE 是不可执行代码(除了作为 STORED PROCEDURE)。程序在执行的过程中,首先是通过 Plan 中的 Plan Header 找到 Package List,再定位 Package去执行。

问题 6:使用 PACKAGE 的好处是什么?

通常我们使用的方式是先通过 DBRM 执行 BIND PACKAGE,再使用 PACKAGE 进行

BIND PLAN,而不是直接使用 DBRM 进行 BIND PLAN。使用 PACKAGE 的好处如下:

提高有效性

当应用程序中的 SQL 语句被修改了,只需要重新绑定这个 PACKAGE 即可。当这个

PACKAGE 被重新绑定的时候,这个程序是不能被执行的。如果采用将很多的 DBRM 都直

接绑定到一个 PLAN 中的方法,当其中一个程序中的 SQL 语句被修改了,需要将整个 PLAN重新绑定,这样花费的时间相对较长。在这段时间里,PLAN 中包括的所有程序都不能执

行。

提高灵活性

一个 PLAN 可以通过 Package List 把多个 Package 包含在 PLAN 中,当增加新的程序,

只需将新增程序 BIND 到与其它程序相同的 COLLECTION 中即可,不需要再重新 BIND PLAN。通过使用 PACKAGE 的版本,可以为应用程序保留多个版本,便于应用程序的回

退。

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

34 34

百硕客户通讯 BAYSHORE ADVISOR 中国主机用户专享的资讯季刊

2009 年 6 月 1 日出版(总第 16 期)

主办:百硕同兴科技(北京)有限公司

出版:百硕客户通讯编委会 吕宁

郭庆雪 李琰

马彤雷 王晓兵 刘京平 吴笳笳 张凤华 陈银波 陈建 邹杰

罗文军 贺明

徐卫华 高春霞 高大川 高玉超 郑霞

康会影 Darryn Salt Martha Hall

地址:北京市朝阳区望京科技园利泽中二路 1 号中辰大厦 209 室 电话:010 64391733 传真:010 64391582 电子邮箱:[email protected]

如果您对百硕客户通讯有任何意见和建议,欢迎您随时与我们交流!

百硕客户通讯,总第 16 期(2009 年 6 月 1 日)

35 35

百硕客户通讯总第 16 期 (2009 年 6 月 1 日) 百硕同兴科技(北京)有限公司 Bayshore Consulting & Services Co., Ltd.