隨著 IBM DB2 for z/OS 功能的持續增強,尤其是分布式訪問能力的提升,存儲過程已從可選項演變為數據庫應用開發的核心考量因素。本文系統梳理了主機 DB2 9 存儲過程的架構特點、分類策略、WLM 環境配置要點,並提供四類典型啟動作業(JCL)範例,助力系統程序員與開發人員高效落地。
DB2 9 起,所有存儲過程均由 z/OS Workload Manager(WLM)通過「應用環境」統一管控。當存儲過程被調用時,WLM 依據應用環境自動啟動對應的啟動作業,分配 TCB(Task Control Block)執行邏輯。這一定程度上簡化了運維,但也要求在定義應用環境時,務必綜合考慮功能屬性、開發語言、性能指標與資源隔離需求。
建議將 DB2 產品自帶存儲過程劃分為四大類,各類對應獨立的 WLM 應用環境與啟動作業:
| 參數 | 對應 DSNZPARM | 說明與建議 |
|---|---|---|
| WLM PROC NAME | — | 生成 Sample 作業時的默認存儲過程名稱 |
| NUMBER OF TCBS | — | 單地址空間並發 TCB 數,受 USS MAXPROCUSER 限制 |
| MAX ABEND COUNT | STORMXAB | 允許失敗次數,默認 0 即首次異常即終止 |
| TIMEOUT VALUE | STORTIME | 等待 TCB 分配秒數,建議勿設 NOLIMIT,防止無限等待 |
| WLM ENVIRONMENT | WLMENV | 未顯式指定時的默認應用環境名 |
| MAX OPEN CURSORS | MAX_NUM_CUR | 每線程最大打開游標數 |
| MAX STORED PROCS | MAX_ST_PROC | 每線程每 COMMIT 週期最大調用存儲過程數 |
//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)
//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.SDSNEXIT
// DD DISP=SHR,DSN=prefix.SDSNLOAD
//* 可選:CICS、MQ 相關庫按需取消註釋
//DB11WLMR PROC APPLENV=DB11WLM_REXX,DB2SSN=DSN,RGN=0K,NUMTCB=1
//IEFPROC EXEC PGM=DSNX9WLM,REGION=&RGN,TIME=NOLIMIT,
// DYNAMNBR=5,
// PARM='&DB2SSN,1,&APPLENV'
//STEPLIB DD DISP=SHR,DSN=prefix.RUNLIB.LOAD
// DD DISP=SHR,DSN=CBC!!.SCCNCMP
// DD DISP=SHR,DSN=prefix.SCEERUN
// DD DISP=SHR,DSN=prefix.SDSNEXIT
// DD DISP=SHR,DSN=prefix.SDSNLOAD
//SYSEXEC DD DISP=SHR,DSN=DSN!!0.SDSNCLST
//SYSTSPRT DD SYSOUT=*
//CEEDUMP DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SYSABEND DD DUMMY
//DSNTRACE DD SYSOUT=*
//SQLDBRM DD DISP=SHR,DSN=DSN!!0.DBRMLIB.DATA
//SQLCSRC DD DISP=SHR,DSN=DSN!!0.SRCLIB.DATA
//SQLLMOD DD DISP=SHR,DSN=DSN!!0.RUNLIB.LOAD
// ...(其餘 SQL Processor 所需工作文件 DD 略)
//DB11WLMJ PROC APPLENV=DB11WLM_Java,DB2SSN=DSN,RGN=0K,NUMTCB=5
//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
//JAVAENV DD DISP=SHR,DSN=prefix.DB11WLMJ.JavaENV
//JSPDEBUG DD SYSOUT=*
//JAVAOUT DD PATH='/V1R7/USR/db2a10/JavaOUT.TXT',...
//JAVAERR DD PATH='/V1R7/USR/db2a10/JavaERR.TXT',...
JavaENV 配置要點:需指定 _CEE_ENVFILE 指向 nolimit.txt(含 LIBPATH、CLASSPATH、DB2_HOME、WORK_DIR 等),並設定 DB2SQLJPROPERTIES 指向 db2sqljjdbc.properties(含 SSID、PLAN、TRACE、連接池參數等)。
服務端確保 DDF 已啟動,客戶端執行:
db2 catalog tcpip node <NODE> remote <IP> server <PORT>
db2 catalog dcs database <DBNAME> as <LOCATION>
db2 catalog database <DBNAME> as <ALIAS> at node <NODE> authentication DCS
db2 connect to <ALIAS> user <USER> using <PWD>
可通過 MVS 命令 -DISPLAY DDF 核對 Location、IP、Port 信息。