簡介
IBM Data Studio Developer V1.2 包含一個 UnifIEd Debugger 客戶機,支持調試 SQL 存儲過程。如果您熟悉用 Eclipse 平台調試應用程序,會發現調試 DB2 SQL 過程的步驟是很相似的。在本文中,介紹如何使用 IBM Data Studio Developer V1.2 中的調試特性調試一個示例 DB2 for z/OS SQL 存儲過程。本文中的許多步驟也可以應用於在 DB2 for Linux®, UNIX®, and Windows® 和 DB2 for i 上創建的 SQL 存儲過程。本文中使用的示例存儲過程專門針對 DB2 for z/OS v9。
要想從本文獲得最大收益,您應該熟悉使用 IBM Data Studio Developer 創建數據庫連接以及操作表和存儲過程等數據庫對象。熟悉 IBM Data Studio Developer 的好方法是下載試用版並閱讀它的教程系列。
了解不同 DB2 版本中的調試器技術
DB2 for z/OS 有兩種 IBM 調試器技術:
老式技術稱為 SQL Debugger,支持 DB2 for z/OS V8(包含與 LUW V8 FP7 同時發布的 V8 PTF UK03933)。它只為外部 SQL 存儲過程提供調試器支持。
Unified Debugger 是最新的調試器技術,支持 DB2 for z/OS V8(包含與 DB2 for Linux, UNIX, and Windows V9 FP2 同時發布的 PTF UK25860)和 DB2 for z/OS V9。對於 DB2 for z/OS V8,可以使用 UnifIEd Debugger 調試外部 SQL 存儲過程。但是,對於 DB2 for z/OS V9,它支持調試 Java 存儲過程、原生 SQL 過程和外部 SQL 存儲過程。
這兩種技術之間的主要差異是,UnifIEd Debugger 同時支持調試 Java 和 SQL 過程,而且繼續支持調試嵌套的過程調用。本文討論 UnifIEd Debugger。
准備示例表
本文中創建的存儲過程是用原生 SQL 編寫的,以商品 ID 作為輸入,使用 PRODUCT 表中存儲的成本、送貨費用和客戶付款信息計算商品的利潤。存儲過程的輸出稱為 PROFIT,這一數據被存儲回 PRODUCT 表。
清單 1 給出創建和填充 PRODUCT 表所需的 DDL。如果希望檢驗過程中的 SQL 語句,需要先運行這個 DDL。
清單 1. 創建示例 product 表的 DDL
CREATE TABLE ADMF001.PRODUCT
(
ITEM VARCHAR(6) NOT NULL,
COST DECIMAL(8,2),
SHIPPING DECIMAL(8,2),
PAYMENT DECIMAL(8,2),
PROFIT DECIMAL(8,2)
);
INSERT INTO ADMF001.PRODUCT (ITEM, COST, SHIPPING, PAYMENT)
VALUES ('001', 100.00, 19.99, 150);
INSERT INTO ADMF001.PRODUCT (ITEM, COST, SHIPPING, PAYMENT)
VALUES ('002',80, 8.99, 99.99);
創建和部署存儲過程
在本節中,使用 Stored Procedure 向導生成示例存儲過程的簡單版本。需要修改生成的存儲過程,添加計算利潤的邏輯。然後,學習如何指定在啟用調試選項的情況下部署存儲過程。如果不這樣做,就無法調試存儲過程。
創建過程
調試現有的存儲過程
如果在服務器上有任何現有的 SQL 存儲過程,那麼可以把它從 Database Explorer 拖入數據開發項目中,然後進行調試。但是,需要確保存儲過程為調試做好了准備,這意味著存儲過程在部署時要啟用調試選項。
如果存儲過程在部署時沒有 啟用調試選項,就無法調試它;必須選擇 Enable debugging 並再次部署它。
按照以下步驟創建名為 PROFITUPDATE 的示例存儲過程:
首先,在 Data Studio Developer 中使用 DB2 for z/OS 數據庫連接創建一個新的數據開發項目。選擇 File > New > Data Development Project。向導要求指定一個數據庫連接。如果還沒有數據庫連接,那麼可以使用數據庫連接向導創建一個 DB2 for z/OS 數據庫連接。
圖 1. 選擇數據庫連接
接下來,使用 New Stored Procedure 向導創建一個 SQL 存儲過程。可以右鍵單擊剛才創建的項目,選擇 New > Stored Procedure(見圖 2),從而啟動 New Stored Procedure 向導。把存儲過程命名為 PROFITUPDATE 並指定原生 SQL 作為它的語言。
圖 2. 創建新的 SQL 存儲過程
在 SQL Statements 頁面上,在 Statement details 框中添加清單 2 所示的 SQL 語句。注意,變量名前面有一個冒號 (:),這把它定義為主機變量。
清單 2. PROFITUPDATE 存儲過程的 SQL 語句
SELECT COST, SHIPPING, PAYMENT FROM PRODUCT
WHERE ITEM = :itemID;
圖 3. SQL Statements 頁面
單擊 Validate 按鈕檢查 SQL 語法。如果語法有錯誤,它會在把語句寫入過程之前指出錯誤。另外,它還幫助格式化 SQL 語句。圖 3 給出檢查之後語句的樣子。單擊 Next。
在 Parameters 頁面上(圖 4),會注意到已經基於主機變量 :itemID 創建了輸入變量 itemID。在這個頁面上,可以修改現有的參數、添加新參數和刪除不再需要的參數。
圖 4. Parameters 頁面
現在,必須通過單擊 Add… 按鈕添加第二個參數(輸出參數)。這個參數名為 itemProfit,模式為 OUT。類型為 Decimal (8,2),見圖 5。單擊 OK。
圖 5. 添加參數
在向導的 Deploy Options 頁面上,可以通過選中 Enable debugging 復選框啟用調試,見圖 6。單擊 Finish。
圖 6. 確保選中 Enable debugging 復選框
現在,應該會在圖 6-1 所示的編輯器中打開創建的存儲過程。
圖 6-1. 生成的過程
查看原圖(大圖)
在查看源代碼時,會注意到它不包含計算利潤的邏輯。需要修改存儲過程的過程體,添加這種邏輯。為了節省時間,可以復制並粘貼清單 3 所示的示例過程體。
清單 3. 計算利潤的存儲過程
CREATE PROCEDURE PROFITUPDATE ( IN itemID VARCHAR(6),
OUT itemProfit DECIMAL(8, 2) )
VERSION VERSION1
ISOLATION LEVEL CS
LANGUAGE SQL
ALLOW DEBUG MODE
WLM ENVIRONMENT FOR DEBUG MODE WLMENV1
QUALIFIER ADMF001
COMMIT ON RETURN YES
------------------------------------------------------------------------
-- SQL Stored Procedure
-- itemID
-- itemProfit
------------------------------------------------------------------------
P1: BEGIN
-- Declare variables
DECLARE itemPayment DECIMAL(8,2) DEFAULT 0.0;
DECLARE total_cost DECIMAL(8,2) DEFAULT 0.0;
P2: BEGIN
DECLARE itemCost DECIMAL(8,2) DEFAULT 0.0;
DECLARE itemShippingFee DECIMAL(8,2) DEFAULT 0.0;
-- Declare cursor
DECLARE cursor1 CURSOR FOR
SELECT COST, SHIPPING, PAYMENT FROM PRODUCT
WHERE ITEM = itemID;
OPEN cursor1;
FETCH cursor1 INTO itemCost, itemShippingFee, itemPayment;
SET total_cost = itemCost + itemShippingFee;
END P2;
SET itemProfit = itemPayment - total_cost;
UPDATE PRODUCT SET PROFIT = itemProfit
WHERE ITEM = itemID;
END P1
單擊 Save 保存存儲過程。現在要部署存儲過程了。
部署存儲過程
為了部署存儲過程,在 Data Project Explorer 中右鍵單擊過程並選擇 Deploy。因為前面在創建這個過程時啟用了調試,它在部署時會啟用調試選項。如果還沒有啟用調試選項,仍然可以在部署向導的 Routine Options 部分中選中 Enable debugging 復選框(圖 7)。
圖 7. Deploy Routines 向導中的 Enable debugging 選項
設置調試器會話管理程序
在調試存儲過程之前,了解調試器框架會有幫助。UnifIEd Debugger 有三個組件:服務器、客戶機和會話管理程序,見圖 8。在這個框架中,客戶機與會話管理程序通信,會話管理程序與服務器通信,從而交換調試信息和請求。
圖 8. UnifIEd Debugger 框架
查看原圖(大圖)
可以看出會話管理程序非常重要,它是一個中間件,負責通過 TCP/IP 連接協調客戶機和服務器之間的通信。在使用調試器之前,需要在網絡上某個地方(客戶機、服務器或其他地方)啟動會話管理程序進程。如果還沒有正確地設置它,那麼由於會話管理程序不可用,在使用 IBM Data Studio Developer 時會遇到問題(圖 9),因此無法使用 UnifIEd Debugger。
圖 9. 會話管理程序不可用
如果在環境中的服務器上運行會話管理程序,就不需要在客戶端做任何設置。但是,服務器端設置很復雜(尤其是在 z/OS 環境中),所以本文只關注在客戶端上使用調試器,服務器端設置留到另一篇文章中討論。
如果會話管理程序不在本地運行,應該怎麼辦?
如果會話管理程序在網絡上的某個地方運行,那麼仍然可以使用本節描述的步驟,但是需要找到駐留它的服務器上的 db2dbgm.bat。
使用會話管理程序的最簡便方法是在客戶機上運行它,然後配置 debugger Preferences 頁面。在客戶機上運行會話管理程序的步驟如下:
找到 Data Studio Developer v1.2 附帶的會話管理程序。這個文件名為 db2dbgm.bat。它位於以下目錄中:
[DS install directory] \dsdev\bin
在命令提示窗口中執行 db2dbgm.bat。它會提供一個主機 IP 地址和端口號,您應該記住它們。它的設置還包括超時信息。圖 10 所示的 db2dbgm.bat 示例輸出表明,如果會話管理程序空閒了 50 分鐘,它就會超時。(指定零值表示沒有會話管理程序超時)。可以通過編輯 db2dbgm.bat 修改空閒時間和端口號。
圖 10. 啟動會話管理程序並獲得 IP 地址和端口號
查看原圖(大圖)
既然已經得到了正在運行的會話管理程序的 IP 地址和端口號,就需要在調試器首選項的會話管理程序部分中輸入這些信息:
選擇 Window>Preferences…。
在 Run/Debug > DB2 Stored Procedure Debugger 下面找到 debugger preferences 頁面。
單擊 debugger preferences 頁面上的 Use already running session manager 單選按鈕,輸入前面記下的 IP 地址和端口號。
圖 11. 在首選項中指定會話管理程序的 IP 地址和端口號
查看原圖(大圖)
注意:不要關閉會話管理程序窗口,因為這會結束會話管理程序會話。因此,應該繼續調試並讓會話管理程序窗口在後台運行。
設置其他調試器首選項
除了會話管理程序之外,還可以在開始調試之前配置其他調試器首選項。本節簡要介紹其中兩個選項,見圖 12。
圖 12. DB2 存儲過程調試器首選項
Inactivity setting:在讓調試器停在一個斷點上時,如果不執行任何進一步的調試操作,就認為調試是空閒的。為了避免無限期地持有服務器資源,調試器假設在經過指定的無活動時間段之後應該結束調試,讓過程自動地運行完。可以在 Debugger preference 頁面上指定調試器的無活動時間長度。默認值是 300 秒。
Error trace setting:為了幫助判斷問題,IBM 服務代表可能要求您在服務器上啟用診斷跟蹤。值 2 在 DB2 服務器上啟用完整的診斷跟蹤。除非 IBM 服務代表明確要求啟用服務器診斷跟蹤,否則應該保持這個設置為 0(零)。
可選:在進行調試之前設置運行設置
最後,作為開始調試之前的最後一個可選步驟,指定應用於本次運行的設置,包括:
指定在調試之前或之後運行的某些 SQL 語句(對這些語句不進行調試)
設置一個輸入參數值
指定是否把更改提交到數據庫
為 DB2 for z/OS 連接設置集合 ID
示例存儲過程在最後更新 PRODUCT 表。為了檢查更新,可以用一個運行後語句顯示對 PRODUCT 表執行 SELECT 語句的結果。本節介紹具體做法。
在 Data Project Explorer 中右鍵單擊存儲過程並選擇 Run Settings,打開 Run Settings 對話框,見圖 13。
圖 13. Run settings 菜單
Run settings 窗口有多個選項卡。選擇 After Run 選項卡並輸入 select * from PRODUCT 語句,見圖 14。
圖 14. Run settings 對話框窗口
在運行或調試存儲過程之後,會執行這個 SQL 語句。利潤更新的結果會顯示在輸出視圖中。
注意:在 Run Settings 對話框中,還可以在 Parameter Values 選項卡中指定參數值。但是,如果不在這裡指定,在調試過程中仍然有機會指定參數值。
開始調試
現在,已經完成了所有設置活動,可以開始調試存儲過程了。
開始調試的方法是在 Data Project Explorer 中右鍵單擊存儲過程名,然後選擇 Debug…,見圖 15。
圖 15. 在 Data Project Explorer 中從過程啟動調試器
調試器首先啟動標准的 Eclipse 調試配置頁面,見圖 16。所有配置項都預先設置了。單擊 Debug 繼續。
圖 16. 調試配置頁面
因為示例存儲過程有一個輸入變量,所以調試器會打開 Specify Parameter Values 對話框,可以在其中輸入參數值。如果前面在 Run Settings 對話框中輸入了參數值,這個值會再次顯示出來,可以檢查或修改它。
圖 17. Specify Parameter Values 對話框