◆TIMEOUT VALUE
对应的 DSNZPARM 参数是 STORTIME。用来指定在存储过程地址空间里,DB2 容许等待存储过程分配 TCB 的时间,单位为秒。如果在这个时间段内没有被分配一个 TCB 来执行,存储过程调用失败。推荐不要设为 NOLIMIT,因为如果设为 NOLIMIT,当出现异常例如存储过程地址空间被关掉,存储过程调用请求会一直等待分配 TCB,直到条件满足或者 thread 被取消。
◆WLM ENVIRONMENT
对应的 DSNZPARM 参数为 WLMENV,用来指定在定义存储过程时,如果没有指定 WLM_ENVIRONMENT 的值时,系统会自动分配的 WLM 应用环境的名字。
◆MAX OPEN CURSORS
对应的 DSNZPARM 参数是 MAX_NUM_CUR,用来指定每一个 DB2 应用 thread 最大可以打开的 cursors 数量
◆MAX STORED PROCS
对应的 DSNZPARM 参数是 MAX_ST_PROC。用来设定 DB2 应用 thread 可以调用的最大存储过程数量。在每一次 COMMIT 后,重新开始记数。
主机 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