DB2 9存儲(chǔ)過程的規(guī)劃和實(shí)施技巧
隨著主機(jī) DB2 技術(shù)的發(fā)展,DB2 產(chǎn)品的功能越來越豐富,以及 DB2 產(chǎn)品增強(qiáng)了對(duì)其分布式訪問功能,所以正確配置 DB2 產(chǎn)品提供的存儲(chǔ)過程,就越來越重要。對(duì)現(xiàn)在的主機(jī)數(shù)據(jù)庫(kù)用戶來說,DB2 9 for z/OS 下的存儲(chǔ)過程已經(jīng)從一個(gè)可選項(xiàng)逐漸演變成了在數(shù)據(jù)庫(kù)應(yīng)用開發(fā)考慮的重要因素。在主機(jī)數(shù)據(jù)庫(kù)存儲(chǔ)過程的應(yīng)用方面,除了用戶可以根據(jù)需要開發(fā)存儲(chǔ)過程外。主機(jī)數(shù)據(jù)庫(kù)產(chǎn)品也提供了功能豐富的各類存儲(chǔ)過程供用戶使用。本篇就是為了幫助主機(jī)系統(tǒng)和開發(fā)人員更好的規(guī)劃和實(shí)施基于主機(jī)數(shù)據(jù)庫(kù)(DB2 for z/OS)的存儲(chǔ)過程。
DB2 版本 9 以后,主機(jī)上所有的存儲(chǔ)過程都統(tǒng)一由 z/OS 的一個(gè)子系統(tǒng) WLM 來統(tǒng)一管理,WLM 是通過應(yīng)用環(huán)境(Application Environment)來管理存儲(chǔ)過程的,當(dāng)存儲(chǔ)過程被調(diào)用時(shí),WLM 會(huì)自動(dòng)啟動(dòng)和應(yīng)用環(huán)境相應(yīng)的啟動(dòng)作業(yè)來管理和實(shí)現(xiàn)所需要的存儲(chǔ)過程功能。
我們可以把數(shù)據(jù)庫(kù)存儲(chǔ)過程分為 DB2 系統(tǒng)產(chǎn)品數(shù)據(jù)庫(kù)存儲(chǔ)過程和用戶開發(fā)的存儲(chǔ)過程。關(guān)于 DB2 數(shù)據(jù)庫(kù)系統(tǒng)產(chǎn)品的存儲(chǔ)過程,按照存儲(chǔ)過程的功能,開發(fā)語言,性能要求等,我們會(huì)設(shè)置不同的數(shù)據(jù)庫(kù)存儲(chǔ)過程運(yùn)行環(huán)境。下面的篇幅會(huì)面較詳細(xì)的介紹這方面的情況。對(duì)于用戶編寫的存儲(chǔ)過程,存儲(chǔ)過程配置基本原則是一樣,都需要根據(jù)實(shí)際應(yīng)用開發(fā)功能和性能的要求進(jìn)行規(guī)劃實(shí)施,都需要根據(jù)具體要求進(jìn)行具體分析,這里不再做主要描述。
存儲(chǔ)過程的客戶化規(guī)劃和實(shí)施
在實(shí)施主機(jī)提供的 DB2 存儲(chǔ)過程的時(shí)候,就象上文提到的,需要考慮到存儲(chǔ)過程調(diào)用時(shí)的執(zhí)行要求,這些要求包括存儲(chǔ)過程執(zhí)行的功能是怎么樣的,調(diào)用時(shí)限定條件以及存儲(chǔ)過程有無特殊性能要求等。正確配置 DB2 存儲(chǔ)過程,以下幾個(gè)方面是比較重要而應(yīng)該被重點(diǎn)關(guān)注的:
同存儲(chǔ)過程相關(guān)的 DB2 子系統(tǒng)配置
由于 DB2 9 產(chǎn)品發(fā)布后,包括針對(duì)存儲(chǔ)過程在內(nèi)一些新的功能增強(qiáng),DB2 系統(tǒng)都是通過實(shí)施 PTF 或 APAR 的方式來實(shí)現(xiàn)的,所以需要確認(rèn)相關(guān)的數(shù)據(jù)庫(kù)產(chǎn)品的 PTF 或 APAR 是否已經(jīng)正確實(shí)施。具體需要實(shí)施的 PTF 或 APAR 可以參考相關(guān)的資料。
在 DB2 9 的安裝流程里,安裝界面 Panel DSNTIPX 是來配置和存儲(chǔ)過程相關(guān)的參數(shù)的,是用來生成安裝所需要的 Sample 作業(yè)。
清單 1. DB2 9 安裝界面 DSNTIPX
DSNTIPX INSTALL DB2 - ROUTINE PARAMETERS ===>
* 1 WLM PROC NAME ===> DSN1WLM WLM-established stored procedure JCL PROC |
其中,對(duì)于 DSNTIPX 所涉及到的參數(shù),下面做一個(gè)簡(jiǎn)要的描述:
◆WLM PROC NAME
用來指定在安裝過程中生成 Sample 中作業(yè)的缺省存儲(chǔ)過程的名字。
◆NUMBER OF TCBS
用來指定在 WLM 啟動(dòng)的一個(gè)地址空間里,可以并發(fā)調(diào)用多少個(gè)存儲(chǔ)過程。這個(gè)值也受到 USS 下的 MAXPROCUSER(每一個(gè)用戶在主機(jī) USS 環(huán)境下***可以有多少個(gè) processes)參數(shù)的限制。
◆MAX ABEND COUNT
在 DSNZPARM 里對(duì)應(yīng)的參數(shù)是 STORMXAB,用來指定存儲(chǔ)過程可以有多少次調(diào)用失敗后,整個(gè)調(diào)用結(jié)束。缺省值為 0,意味著在存儲(chǔ)過程***次執(zhí)行不正常結(jié)束時(shí),存儲(chǔ)過程調(diào)用結(jié)束。
◆TIMEOUT VALUE
對(duì)應(yīng)的 DSNZPARM 參數(shù)是 STORTIME。用來指定在存儲(chǔ)過程地址空間里,DB2 容許等待存儲(chǔ)過程分配 TCB 的時(shí)間,單位為秒。如果在這個(gè)時(shí)間段內(nèi)沒有被分配一個(gè) TCB 來執(zhí)行,存儲(chǔ)過程調(diào)用失敗。推薦不要設(shè)為 NOLIMIT,因?yàn)槿绻O(shè)為 NOLIMIT,當(dāng)出現(xiàn)異常例如存儲(chǔ)過程地址空間被關(guān)掉,存儲(chǔ)過程調(diào)用請(qǐng)求會(huì)一直等待分配 TCB,直到條件滿足或者 thread 被取消。
◆WLM ENVIRONMENT
對(duì)應(yīng)的 DSNZPARM 參數(shù)為 WLMENV,用來指定在定義存儲(chǔ)過程時(shí),如果沒有指定 WLM_ENVIRONMENT 的值時(shí),系統(tǒng)會(huì)自動(dòng)分配的 WLM 應(yīng)用環(huán)境的名字。
◆MAX OPEN CURSORS
對(duì)應(yīng)的 DSNZPARM 參數(shù)是 MAX_NUM_CUR,用來指定每一個(gè) DB2 應(yīng)用 thread ***可以打開的 cursors 數(shù)量
◆MAX STORED PROCS
對(duì)應(yīng)的 DSNZPARM 參數(shù)是 MAX_ST_PROC。用來設(shè)定 DB2 應(yīng)用 thread 可以調(diào)用的***存儲(chǔ)過程數(shù)量。在每一次 COMMIT 后,重新開始記數(shù)。
#p#
主機(jī) WLM 應(yīng)用環(huán)境的規(guī)劃和實(shí)施
DB2 9 之后,所有的存儲(chǔ)過程都運(yùn)行在 WLM 應(yīng)用環(huán)境管理之下,由于主機(jī)數(shù)據(jù)庫(kù)下存儲(chǔ)過程數(shù)量較多,我們?cè)诙ㄖ频臅r(shí)候,需要把具有類似屬性的存儲(chǔ)過程定義在一個(gè)應(yīng)用環(huán)境下。目的是***限度的減少 WLM 應(yīng)用環(huán)境的定義數(shù)量。當(dāng)然如果你只是客戶化少量的存儲(chǔ)過程或者是對(duì)某些存儲(chǔ)過程有一些特定的要求,例如性能或存儲(chǔ)等,也可以定義粒度更小的 WLM 應(yīng)用環(huán)境。另外在一些存儲(chǔ)過程里所涉及的數(shù)據(jù)集里,有一些是需要具有 APF 屬性的,需要特別注意。以下為一個(gè) WLM 應(yīng)用環(huán)境的定義例子,例子中應(yīng)用環(huán)境所對(duì)應(yīng)的啟動(dòng)作業(yè)為 DB11WLM1。
清單 2. 主機(jī) WLM 應(yīng)用環(huán)境定義界面
Appl Environment Name . . DB11WLM1 |
創(chuàng)建 DB2 存儲(chǔ)過程
DB2 產(chǎn)品提供的存儲(chǔ)過程是通過客戶化 DSNTIJSG 作業(yè)來定義的。在提交作業(yè)完成創(chuàng)建存儲(chǔ)過程之前,需要對(duì)存儲(chǔ)過程進(jìn)行必要的規(guī)劃。根據(jù)存儲(chǔ)過程的功能不同,建議分為以下 4 類:
表 1. 存儲(chǔ)過程的分類
另外,需要注意以下幾點(diǎn):
1.存儲(chǔ)過程的分類可能會(huì)依據(jù) DB2 的 PTF 版本不同而有改變;
2.存儲(chǔ)過程的 NUMTCB 的設(shè)置除了根據(jù)存儲(chǔ)過程的功能要求外,還依賴于系統(tǒng)資源情況;
3.建議 WLM 應(yīng)用環(huán)境和啟動(dòng)過程名稱一致,便于管理;
4.存儲(chǔ)過程分類的粒度根據(jù)實(shí)際情況可能會(huì)有不同,基本原則為在滿足功能需求的情況下,盡可能的簡(jiǎn)化配置,便于管理。
以下我們重點(diǎn)介紹為四個(gè)不同的 WLM 應(yīng)用環(huán)境準(zhǔn)備的啟動(dòng)作業(yè)過程,通過啟動(dòng)作業(yè)可以為 WLM 環(huán)境準(zhǔn)備不同的存儲(chǔ)過程執(zhí)行環(huán)境。
為在線 Utility 執(zhí)行而準(zhǔn)備的存儲(chǔ)過程
此類存儲(chǔ)過程功能是需要調(diào)用數(shù)據(jù)庫(kù)的在線 UTILITY,例如數(shù)據(jù)庫(kù)所提供的 DSNUTILS 和 DSNUTILU,在配置此類存儲(chǔ)過程的時(shí)候,NUMTCB 要求定義為 1,也就是不容許并發(fā)調(diào)用。主要是由于在調(diào)用時(shí),會(huì)生成一些中間文件,如果容許同時(shí)調(diào)用存儲(chǔ)過程的話,這些文件會(huì)被互相覆蓋,導(dǎo)致不可預(yù)料的錯(cuò)誤發(fā)生。
以下為此類存儲(chǔ)過程所調(diào)用的啟動(dòng)作業(yè)。在作業(yè)中的 SYSIN 是分配一些臨時(shí)空間存儲(chǔ) Utility 的輸入語句。SYSPRINT 是分配臨時(shí)空間來存儲(chǔ) utility 的輸出信息。RNPRIN01 是為 DFSORT 信息所分配的空間,UTPRINT 也是為 DFSORT 信息所分配的空間,DSSPRINT 是當(dāng)執(zhí)行 concurrent copies 時(shí),為輸出信息分配空間。
清單 3. 在線 Utility 存儲(chǔ)過程對(duì)應(yīng)的 STC 作業(yè)
//DB11WLM1 PROC APPLENV=DB11WLM1,DB2SSN=DSN,RGN=0K,NUMTCB=1 |
為通用情況準(zhǔn)備的存儲(chǔ)過程
另外,我們?yōu)榇蠖鄶?shù)的存儲(chǔ)過程準(zhǔn)備了一套運(yùn)行環(huán)境,所準(zhǔn)備的啟動(dòng)作業(yè)如下所示,其中 NUMTCB 可以根據(jù)系統(tǒng)資源情況來定,一般推薦可以設(shè)置為 40 或 60。
清單 4. 通用情況下存儲(chǔ)過程對(duì)應(yīng)的 STC 作業(yè)
//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 語言編寫的存儲(chǔ)過程
對(duì)于由 REXX 語言寫的存儲(chǔ)過程來說,啟動(dòng)作業(yè)同其他類型的存儲(chǔ)過程是不同的。見下面的例子。需要特別提出的是,REXX 類型的存儲(chǔ)過程的 NUMTCB 應(yīng)該設(shè)為 1。
清單5. REXX 存儲(chǔ)過程對(duì)應(yīng)的STC作業(yè)
//DB11WLMR PROC APPLENV=DB11WLM_REXX,DB2SSN=DSN,RGN=0K,NUMTCB=1 |
#p#
Java 語言應(yīng)用準(zhǔn)備的存儲(chǔ)過程
對(duì)與 JAVA 語言編寫的存儲(chǔ)過程,由于主機(jī)上的 JAVA 是運(yùn)行在 USS 下,所以需要指定指定 JAVA 運(yùn)行環(huán)境,見啟動(dòng)過程中的 JAVAENV 所指定的數(shù)據(jù)集。
清單6. JAVA 存儲(chǔ)過程對(duì)應(yīng)的STC作業(yè)
//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',
// PATHOPTS=(ORDWR,OCREAT,OAPPEND),
// PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIWGRP,SIROTH,SIWOTH)
//JAVAERR DD PATH='/V1R7/USR/db2a10/JAVAERR.TXT',
// PATHOPTS=(ORDWR,OCREAT,OAPPEND),
// PATHMODE=(SIRUSR,SIWUSR,SIRGRP,SIWGRP,SIROTH,SIWOTH)
其中 JavaENV 指定 JAVA 運(yùn)行環(huán)境定義,JAVAENV 文件的內(nèi)容,舉一例子做參考:
清單7. JAVAENV 配置文件信息
ENVAR("_CEE_ENVFILE=/u/DB2tdbg/nolimit.txt", "JAVA_HOME=/u/java/J1.4"), |
其中 nolimit.txt 的配置信息如下:
清單8. JAVAENV 配置文件中 nolimit.內(nèi)容信息
LIBPATH=/griv2r2/lib:/usr/lpp/db2810/lib |
其中 /u/db2tdbg/db2sqljjdbc.properties 的配置信息為:
清單9.JAVAENV 配置文件 db2sqljjdbc.properties 配置信息
DB2SQLJSSID=PE11 DB2SQLJPLANNAME=DSNJDBC |
最后,用戶可以通過配置客戶端來連接 DB2 子系統(tǒng)使用存儲(chǔ)過程提供的功能,在連接前,需要保證在服務(wù)器端 DDF(Distributed Data Facility)已經(jīng)配置并正常啟動(dòng)。
在DB2命令窗口里輸入以下命令:
清單10. DB2 分布式連接配置命令
db2 catalog tcpip node remote server |
以上信息可以通過在 MVS console 輸入以下命令–DISPLAY DDF 命令來確定 DB2 子系統(tǒng)的 DB2 location,IP 地址和 TCP 端口號(hào)等連接信息。在正確配置好客戶端后,我們可以通過以下命令來連接 DB2 子系統(tǒng):
清單11. DB2分布式連接命令
db2 connect to user using |
【編輯推薦】