主机 WLM 应用环境的规划和实施
DB2 9 之后,所有的存储过程都运行在 WLM 应用环境管理之下,由于主机数据库下存储过程数量较多,我们在定制的时候,需要把具有类似属性的存储过程定义在一个应用环境下。目的是最大限度的减少 WLM 应用环境的定义数量。当然如果你只是客户化少量的存储过程或者是对某些存储过程有一些特定的要求,例如性能或存储等,也可以定义粒度更小的 WLM 应用环境。另外在一些存储过程里所涉及的数据集里,有一些是需要具有 APF 属性的,需要特别注意。以下为一个 WLM 应用环境的定义例子,例子中应用环境所对应的启动作业为 DB11WLM1。
广州网站建设,网站建设,广州网页设计,广州网站设计
清单 2. 主机 WLM 应用环境定义界面
Appl Environment Name . . DB11WLM1 Description . . . . . . . DB2 DB11WLM1 Subsystem type . . . . . DB2 Procedure name . . . . . DB11WLM1 Start parameters . . . . DB2SSN=&IWMSSNM,NUMTCB=1,APPLENV=DB11WLM1 |
创建 DB2 存储过程
DB2 产品提供的存储过程是通过客户化 DSNTIJSG 作业来定义的。在提交作业完成创建存储过程之前,需要对存储过程进行必要的规划。根据存储过程的功能不同,建议分为以下 4 类:
表 1. 存储过程的分类
另外,需要注意以下几点:
1.存储过程的分类可能会依据 DB2 的 PTF 版本不同而有改变;
2.存储过程的 NUMTCB 的设置除了根据存储过程的功能要求外,还依赖于系统资源情况;
3.建议 WLM 应用环境和启动过程名称一致,便于管理;
4.存储过程分类的粒度根据实际情况可能会有不同,基本原则为在满足功能需求的情况下,尽可能的简化配置,便于管理。
以下我们重点介绍为四个不同的 WLM 应用环境准备的启动作业过程,通过启动作业可以为 WLM 环境准备不同的存储过程执行环境。
为在线 Utility 执行而准备的存储过程
此类存储过程功能是需要调用数据库的在线 UTILITY,例如数据库所提供的 DSNUTILS 和 DSNUTILU,在配置此类存储过程的时候,NUMTCB 要求定义为 1,也就是不容许并发调用。主要是由于在调用时,会生成一些中间文件,如果容许同时调用存储过程的话,这些文件会被互相覆盖,导致不可预料的错误发生。
以下为此类存储过程所调用的启动作业。在作业中的 SYSIN 是分配一些临时空间存储 Utility 的输入语句。SYSPRINT 是分配临时空间来存储 utility 的输出信息。RNPRIN01 是为 DFSORT 信息所分配的空间,UTPRINT 也是为 DFSORT 信息所分配的空间,DSSPRINT 是当执行 concurrent copies 时,为输出信息分配空间。
清单 3. 在线 Utility 存储过程对应的 STC 作业
//DB11WLM1 PROC APPLENV=DB11WLM1,DB2SSN=DSN,RGN=0K,NUMTCB=1 //IEFPROC EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT, // PARM='&DB2SSN,&NUMTCB,&APPLENV' //STEPLIB DD DISP=SHR,DSN=prefix.SCEERUN // DD DISP=SHR,DSN=prefix.SDSNEXIT // DD DISP=SHR,DSN=prefix.SDSNLOAD //UTPRINT DD SYSOUT=* //RNPRIN01 DD SYSOUT=* //DSSPRINT DD SYSOUT=* //SYSIN DD UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND) //SYSPRINT DD UNIT=SYSDA,SPACE=(4000,(20,20),,,ROUND) |
为通用情况准备的存储过程
另外,我们为大多数的存储过程准备了一套运行环境,所准备的启动作业如下所示,其中 NUMTCB 可以根据系统资源情况来定,一般推荐可以设置为 40 或 60。
广州网站建设,网站建设,广州网页设计,广州网站设计
清单 4. 通用情况下存储过程对应的 STC 作业
//DB11WLM2 PROC APPLENV=DB11WLM2,DB2SSN=DSN,RGN=0K,NUMTCB=40 //IEFPROC EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT, // PARM='&DB2SSN,&NUMTCB,&APPLENV' //STEPLIB DD DISP=SHR,DSN=prefix.SCEERUN //* DD DISP=SHR,DSN=prefix.SDFHEXCI For CICS // DD DISP=SHR,DSN=prefix.SDSNEXIT // DD DISP=SHR,DSN=prefix.SDSNLOAD //* DD DISP=SHR,DSN=prefix.SCSQLOAD For MQ //* DD DISP=SHR,DSN=prefix.SCSQAUTH For MQ //* DD DISP=SHR,DSN=prefix.SCSQANLE For MQ //*SYSIN DD SYSOUT=* For Debugger and XML //*SYSPRINT DD SYSOUT=* //*WSERROR DD PATH='/tmp/wsc.err', For Web_SERVICES //* PATHOPTS=(ORDWR,OCREAT,OAPPEND), //* PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIWGRP,SIROTH,SIWOTH) |
REXX 语言编写的存储过程
对于由 REXX 语言写的存储过程来说,启动作业同其他类型的存储过程是不同的。见下面的例子。需要特别提出的是,REXX 类型的存储过程的 NUMTCB 应该设为 1。
清单5. REXX 存储过程对应的STC作业
//DB11WLMR PROC APPLENV=DB11WLM_REXX,DB2SSN=DSN,RGN=0K,NUMTCB=1 //IEFPROC EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT, // DYNAMNBR=5, <== Allow for Dyn Allocs // PARM='&DB2SSN,1,&APPLENV' <== Use 1, not NUMTCB //* //NUMTCB@1 SET NUMTCB= <== Null NUMTCB symbol //* //* Include SDSNEXIT to use Secondary Authids (DSN3@ATH DSN3@SGN exits) //STEPLIB DD DISP=SHR,DSN=prefix.RUNLIB.LOAD // DD DISP=SHR,DSN=CBC!!.SCCNCMP <== C Compiler // DD DISP=SHR,DSN=prefix.SCEERUN <== LE runtime // DD DISP=SHR,DSN=prefix.SDSNEXIT // DD DISP=SHR,DSN=prefix.SDSNLOAD //SYSEXEC DD DISP=SHR,DSN=DSN!!0.SDSNCLST <== Location of DSNTPSMP //SYSTSPRT DD SYSOUT=* //CEEDUMP DD SYSOUT=* //SYSPRINT DD SYSOUT=* //SYSABEND DD DUMMY //DSNTRACE DD SYSOUT=* //* //**** Data sets required by the SQL Procedures Processor //SQLDBRM DD DISP=SHR, <== DBRM Library // DSN=DSN!!0.DBRMLIB.DATA //SQLCSRC DD DISP=SHR, <== Generated C Source // DSN=DSN!!0.SRCLIB.DATA //SQLLMOD DD DISP=SHR, <== Application Loadlib // DSN=DSN!!0.RUNLIB.LOAD //SQLLIBC DD DISP=SHR, <== C header files // DSN=CEE!!.SCEEH.H // DD DISP=SHR, // DSN=CEE!!.SCEEH.SYS.H // DD DISP=SHR, <== Debug header file // DSN=DSN!!0.SDSNC.H //SQLLIBL DD DISP=SHR, <== Linkedit includes // DSN=CEE!!.SCEELKED // DD DISP=SHR, // DSN=DSN!!0.SDSNLOAD //SYSMSGS DD DISP=SHR, <== Prelinker msg file // DSN=CEE!!.SCEEMSGP(EDCPMSGE) //* //**** DSNTPSMP Configuration File - CFGTPSMP (optional) //* A site provided sequential dataset or member, used to //* define customized operation of DSNTPSMP in this APPLENV. //*CFGTPSMP DD DISP=SHR,DSN= //* //**** Workfiles required by the SQL Procedures Processor //SQLSRC DD UNIT=SYSALLDA,SPACE=(23440,(20,20)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=23440) //SQLPRINT DD UNIT=SYSALLDA,SPACE=(23476,(20,20)), // DCB=(RECFM=VB,LRECL=137,BLKSIZE=23476) //SQLTERM DD UNIT=SYSALLDA,SPACE=(23476,(20,20)), // DCB=(RECFM=VB,LRECL=137,BLKSIZE=23476) //SQLOUT DD UNIT=SYSALLDA,SPACE=(23476,(20,20)), // DCB=(RECFM=VB,LRECL=137,BLKSIZE=23476) //SQLCPRT DD UNIT=SYSALLDA,SPACE=(23476,(20,20)), // DCB=(RECFM=VB,LRECL=137,BLKSIZE=23476) //SQLUT1 DD UNIT=SYSALLDA,SPACE=(23440,(20,20)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=23440) //SQLUT2 DD UNIT=SYSALLDA,SPACE=(23440,(20,20)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=23440) //SQLCIN DD UNIT=SYSALLDA,SPACE=(32000,(20,20)) //SQLLIN DD UNIT=SYSALLDA,SPACE=(3200,(30,30)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=3200) //SQLDUMMY DD DUMMY //SYSMOD DD UNIT=SYSALLDA,SPACE=(23440,(20,20)), // DCB=(RECFM=FB,LRECL=80,BLKSIZE=23440) |