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

DB2 常見問題精選 1000 題(三):摘要表、暫存表、視圖、別名、資料移轉、鎖定與隔離級別

     編輯:DB2 教學

摘要表 (Summary Table / MQT)

  1. 建立可重新整理的摘要表:
    CREATE SUMMARY TABLE tbl_name AS (SELECT * FROM tbl1 WHERE col1='AAA')
    DATA INITIALLY DEFERRED REFRESH DEFERRED

    DATA INITIALLY DEFERRED:建立時不載入資料;REFRESH DEFERRED:以 REFRESH TABLE 手動重新整理。
  2. 重新整理:REFRESH TABLE sum_table
  3. 修改:ALTER TABLE sum_table ...

全域暫存表 (DGTT)

  1. 語法:
    DECLARE GLOBAL TEMPORARY TABLE tbl_name
    AS (FULLSELECT) DEFINITION ONLY
    EXCLUDING IDENTITY COLUMN ATTRIBUTES
    ON COMMIT DELETE ROWS
    NOT LOGGED

    範例:DECLARE GLOBAL TEMPORARY TABLE DEC_BSEMPMS AS (SELECT * FROM BSEMPMS) DEFINITION ONLY EXCLUDING IDENTITY COLUMN ATTRIBUTES ON COMMIT DELETE ROWS NOT LOGGED

視圖與別名

  1. 建立視圖:CREATE VIEW view_name AS SELECT * FROM table_name WHERE ...
  2. 刪除視圖:DROP VIEW view_name
  3. 查視圖定義:SELECT TEXT FROM SYSCAT.VIEWS
  4. 建立別名:CREATE ALIAS alias_name FOR obj_name(obj 可為 TABLE、VIEW、ALIAS、NICKNAME)

Sequence 完整範例

  1. 建立:
    CREATE SEQUENCE seq_name
    START WITH start_num
    INCREMENT BY 1
    NO MAXVALUE
    NO CYCLE
    CACHE max_values
  2. 修改:ALTER SEQUENCE seq_name ...(可改 START、INCREMENT、MAXVALUE、CYCLE、CACHE)
  3. 刪除:DROP SEQUENCE seq_name

資料移轉工具支援格式對照

  1. IMPORT:DEL、ASC、IXF、WSF
  2. EXPORT:DEL、IXF、WSF(不支援 ASC)
  3. LOAD:DEL、ASC、IXF(不支援 WSF)
  4. DB2MOVE:IXF(不支援 ASC、DEL、WSF)

資料庫監控架構

  1. 兩大組成:快照監控、事件監控
  2. 資料元素類型:計數器、測量、水線、資訊、時間戳記、時間
  3. 監控堆大小估算公式:
    (NUM_MON_APPS+1)*(NUM_DBS*(800+(NUM_TABLES_ACCESSED*20)) + (NUM_APPS_CONNECTED+1)*(200+(NUM_TABLESPACES*100))) / 4096
    受 MON_HEAP_SZ 控制。

事件監控器操作

  1. 建立:CREATE EVENT MONITOR tablemon FOR TABLES WRITE TO FILE 'D:\TEMP'
  2. 啟用:SET EVENT MONITOR tablemon STATE 1
  3. 停用:SET EVENT MONITOR tablemon STATE 0
  4. 查狀態:SELECT EVMONNAME, EVENT_MON_STATE(EVMONNAME) FROM SYSCAT.EVENTMONITORS
  5. 刪除:DROP EVENT MONITOR tablemon

命名管道事件監控器 (PIPE) 建立差異

步驟UNIXWindows
1. 定義監控器CREATE EVENT MONITOR stmb2 FOR STATEMENTS WRITE TO PIPE '/tmp/evpipe1'CREATE EVENT MONITOR stmb2 FOR STATEMENTS WRITE TO PIPE '\\.\pipe\evpipe1'
2. 建立管道mkfifo 指令或函式CreateNamedPipe() 函式
3. 開啟管道open()ConnectNamedPipe() 或 db2evmon -db sample -evm stmb2
4. 啟用監控器SET EVENT MONITOR stmb2 STATE 1
5. 讀取資料read()ReadFile()
6. 停用SET EVENT MONITOR stmb2 STATE 0
7. 關閉close()DisconnectNamedPipe()
8. 刪除unlink()CloseHandle()

SQL 陳述式分類與權限

  1. DCL:資料控制語言 (GRANT/REVOKE/CONTROL)
  2. DDL:資料定義語言 (CREATE/DECLARE/ALTER/DROP)
  3. DML:資料操縱語言 (INSERT/SELECT/UPDATE/DELETE)

常用函數與技巧對照表

需求OracleDB2
ROWNUMROWNUM()ROW_NUMBER() OVER()
錯誤代碼說明—db2 ? SQLCODE
VARCHAR→INTEGERTO_NUMBERCAST()
INTEGER→VARCHARTO_CHARCHAR()
VARCHAR→DATETO_DATEDATE()
DATE→VARCHARTO_CHARCHAR()
NVLNVL(a,b)COALESCE(a,b) 或 VALUE(a,b) (需同型別)
DUAL 表DUALSYSIBM.SYSDUMMY1
快照/實體化視圖Materialized ViewSUMMARY TABLE

外部連接語法對照

DB2 採標準 SQL:LEFT/RIGHT/FULL OUTER JOIN ... ON,無 Oracle (+) 符號。

-- 內連接
SELECT * FROM db2admin.bsempms INNER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 右外連接
SELECT * FROM db2admin.bsempms RIGHT OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 左外連接
SELECT * FROM db2admin.bsempms LEFT OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;
-- 全外連接
SELECT * FROM db2admin.bsempms FULL OUTER JOIN db2admin.bsdptms ON bsempms.dpt_no=bsdptms.dpt_no;

LIKE 謂詞限制與鎖定行為實測

DB2 LIKE 後僅支援常數、特殊暫存器、主機變數、純量函數、串接運算式,不支援直接欄位參考。

實測環境:PK、Unique Index、Normal Index、No Index 四種情境,隔離級別 RR/RS。

PKUnique IdxNormal IdxNo Index
WITH RR鎖列鎖列不鎖列/不鎖表1鎖列/鎖表
WITH RS鎖列鎖列鎖列鎖列/鎖表2

1 普通索引在 RR 下不鎖列不鎖表,原因待深入研究。
2 RS 掃描全表時會鎖表,類似 RR 行為。

隔離級別詳細說明

  • RR (Repeatable Read): 掃描到的所有記錄加鎖(讀取=共享鎖、更新=獨佔鎖),鎖數量大,索引影響顯著。
  • RS (Read Stability): 僅鎖定符合條件的記錄;無條件則鎖全表。
  • CS (Cursor Stability - 預設): 僅鎖定目前處理的記錄。
  • UR (Uncommitted Read): 唯讀不加行鎖;非唯讀同 CS。

DB2 分頁查詢

SELECT * FROM (
  SELECT col1, col2, col3, ROW_NUMBER() OVER(ORDER BY sort_col ASC) AS rn
  FROM table_name
) AS a1 WHERE a1.rn BETWEEN 10 AND 20;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved