此文章介紹的是主機 OracleDB2 上的想關存儲過程的規劃與實施經驗,在很大程度上幫助用戶更好的了解主機 DB2 上的相關存儲過程的基本特性以及其如何進行分類實施。隨著主機 DB2 技術的發展,DB2 產品的功能越來越豐富。
以及 DB2 產品增強了對其分布式訪問功能,所以正確配置 DB2 產品提供的存儲過程,就越來越重要。對現在的主機數據庫用戶來說,DB2 9 for z/OS 下的存儲過程已經從一個可選項逐漸演變成了在數據庫應用開發考慮的重要因素。
在主機數據庫存儲過程的應用方面,除了用戶可以根據需要開發存儲過程外。主機數據庫產品也提供了功能豐富的各類存儲過程供用戶使用。本篇就是為了幫助主機系統和開發人員更好的規劃和實施基於主機Oracle數據庫(DB2 for z/OS)的存儲過程。
DB2 版本 9 以後,主機上所有的存儲過程都統一由 z/OS 的一個子系統 WLM 來統一管理,WLM 是通過應用環境(Application Environment)來管理存儲過程的,當存儲過程被調用時,WLM 會自動啟動和應用環境相應的啟動作業來管理和實現所需要的存儲過程功能。
我們可以把數據庫存儲過程分為 DB2 系統產品數據庫存儲過程和用戶開發的存儲過程。關於 OracleDB2 數據庫系統產品的存儲過程,按照存儲過程的功能,開發語言,性能要求等,我們會設置不同的數據庫存儲過程運行環境。下面的篇幅會面較詳細的介紹這方面的情況。
對於用戶編寫的存儲過程,存儲過程配置基本原則是一樣,都需要根據實際應用開發功能和性能的要求進行規劃實施,都需要根據具體要求進行具體分析,這裡不再做主要描述。
存儲過程的客戶化規劃和實施
在實施主機提供的 DB2 存儲過程的時候,就象上文提到的,需要考慮到存儲過程調用時的執行要求,這些要求包括存儲過程執行的功能是怎麼樣的,調用時限定條件以及存儲過程有無特殊性能要求等。正確配置 DB2 存儲過程,以下幾個方面是比較重要而應該被重點關注的:
同存儲過程相關的 OracleDB2 子系統配置
由於 DB2 9 產品發布後,包括針對存儲過程在內一些新的功能增強,DB2 系統都是通過實施 PTF 或 APAR 的方式來實現的,所以需要確認相關的數據庫產品的 PTF 或 APAR 是否已經正確實施。具體需要實施的 PTF 或 APAR 可以參考相關的資料。
在 DB2 9 的安裝流程裡,安裝界面 Panel DSNTIPX 是來配置和存儲過程相關的參數的,是用來生成安裝所需要的 Sample 作業。
清單 1. DB2 9 安裝界面 DSNTIPX
- DSNTIPX INSTALL DB2 - ROUTINE PARAMETERS
- ===>
- Scrolling backward may change fIElds marked with asterisks
- Enter data below:
- WLM PROC NAME ===> DSN1WLM WLM-established stored procedure JCL PROC
- NUMBER OF TCBS ===> 8 Number of concurrent TCBs (1-100)
- MAX ABEND COUNT ===> 0 Allowable ABENDs for a procedure (0-255)
- TIMEOUT VALUE ===> 180 Seconds to wait before SQL CALL or
- function invocation fails (5-1800,NOLIMIT)
- WLM ENVIRONMENT ===> Default WLM env name
- MAX OPEN CURSORS ===> 500 Maximum open cursors per thread
- MAX STORED PROCS ===> 2000 Maximum active stored procs per thread
其中,對於 DSNTIPX 所涉及到的參數,下面做一個簡要的描述:
WLM PROC NAME
用來指定在安裝過程中生成 Sample 中作業的缺省存儲過程的名字。
NUMBER OF TCBS
用來指定在 WLM 啟動的一個地址空間裡,可以並發調用多少個存儲過程。這個值也受到 USS 下的 MAXPROCUSER(每一個用戶在主機 USS 環境下最大可以有多少個 processes)參數的限制。
MAX ABEND COUNT
在 DSNZPARM 裡對應的參數是 STORMXAB,用來指定存儲過程可以有多少次調用失敗後,整個調用結束。缺省值為 0,意味著在存儲過程第一次執行不正常結束時,存儲過程調用結束。
TIMEOUT VALUE
對應的 DSNZPARM 參數是 STORTIME。用來指定在存儲過程地址空間裡,OracleDB2 容許等待存儲過程分配 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 應用環境的規劃和實施
OracleDB2 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