首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

DB2 程式設計技巧精選 (五) - 儲存程序、效能與管理指令

     編輯:DB2 教學

1. 進階儲存程序技巧

1.16 FENCED vs NOT FENCED 儲存程序

  • FENCED (預設):在獨立進程 db2fmp 中執行,記憶體空間隔離。若程式碼崩潰不會影響 DB2 引擎進程,安全性較高。
  • NOT FENCED:直接在 DB2 引擎進程 (db2sysc) 空間執行,效能較好 (無進程切換開銷),但程式碼錯誤可能導致資料庫管理程序異常終止。
  • 適用情境:需存取呼叫端進程 ID (PID) 等系統資源時,必須使用 NOT FENCED;一般商務邏輯建議用 FENCED。

1.17 儲存程序錯誤處理 - 避免誤記 SQLWARNING

呼叫回傳結果集/暫存表/輸出參數的巢狀 SP 時,DB2 會自動產生 SQLCODE=0, SQLSTATE='01000' 的警告。若統一記錄所有 Warning 會產生大量雜訊。

解決模式:使用旗標變數區分「真正錯誤」與「預期警告」。

DECLARE V_STATUS INTEGER DEFAULT 0;

CALL OTHER_SP(...);
SET V_STATUS = 1;  -- 標記預期呼叫完成

DECLARE CONTINUE HANDLER FOR SQLWARNING
BEGIN
  IF V_STATUS <> 1 THEN
    -- 真正的警告處理:寫入日誌
    INSERT INTO LOG_TABLE(...) VALUES (...);
    SET V_STATUS = 0;
  END IF;
END;

1.18 IMPORT 指令實用範例

db2 import from gh1.out of DEL messages err.txt insert into db2inst1.tb_dbf_match_ha
  • 注意:表名需包含 Schema (如 db2inst1.),否則預設使用目前使用者 Schema,易導致「找不到表」錯誤。
  • messages err.txt 將匯入訊息導向檔案,方便事後稽核。

1.19 VALUES 陳述式優化多重賦值

  • 多個 SET var = ... 可合併為單一 VALUES (expr1, expr2, ...) INTO var1, var2, ...,減少語句解析開銷。
  • 限制:VALUES (NULL) INTO var 會報錯,無法直接指派 NULL,需改用 SET var = NULL。

1.20 指定查詢隔離等級

SELECT * FROM TB_HEAD_STOCK_BALANCE WITH UR
  • UR (Uncommitted Read):髒讀,效能最好,適合唯讀報表。
  • 其他選項:CS (Cursor Stability, 預設)、RS (Read Stability)、RR (Repeatable Read)。

1.21 ATOMIC vs NOT ATOMIC 複合陳述式

  • ATOMIC:區塊內任一語句失敗,整個區塊回滾 (類似隱含交易)。
  • NOT ATOMIC:語句獨立執行,失敗不影響前後語句。

2. 程式設計效能關鍵

2.1 大量資料移動:EXPORT + LOAD 優於 SELECT INTO

  • LOAD 不寫入交易日誌 (可設 NONRECOVERABLE),速度遠快於 SELECT INTO 或 INSERT。
  • 流程:EXPORT 導出資料 → LOAD 載入目標表。

3. 系統管理常用指令

本節收錄資料庫啟動/停用、連線管理、配置參數調整等實務指令,詳細內容請見後續章節 (六) 至 (十)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved