| 查詢目的 | SQL |
| 使用者擁有多少表 | SELECT * FROM SYSIBM.SYSTABLES WHERE CREATOR='USER' |
| 使用者函數 | SELECT * FROM SYSIBM.SYSFUNCTIONS |
| 使用者 View 數 | SELECT * FROM SYSIBM.SYSVIEWS WHERE CREATOR='USER' |
| DB2 版本資訊 | SELECT * FROM SYSIBM.SYSVERSIONS |
| 使用者 Trigger | SELECT * FROM SYSIBM.SYSTRIGGERS WHERE SCHEMA='USER' |
| 表空間狀態 | SELECT * FROM SYSIBM.SYSTABLESPACES |
| Sequence 狀態 | SELECT * FROM SYSIBM.SYSSEQUENCES |
| Schema 狀態 | SELECT * FROM SYSIBM.SYSSCHEMATA |
| 索引狀態 | SELECT * FROM SYSIBM.SYSINDEXES |
| 表欄位定義 | SELECT * FROM SYSIBM.SYSCOLUMNS WHERE TBNAME='AAAA' |
| 資料類型定義 | SELECT * FROM SYSIBM.SYSDATATYPES |
| 緩衝池狀態 | SELECT * FROM SYSIBM.SYSBUFFERPOOLS |
欄位修改限制
- 僅能修改 VARCHAR 類型,且只能增加長度,不能減少。
檢視表結構
DESCRIBE TABLE TABLE_NAME
-- 或
DESCRIBE SELECT * FROM SCHEMA.TABLE_NAME
索引進階特性
- UNIQUE:強制插入值唯一。
- ALLOW REVERSE SCANS:索引加入反向指標,支援雙向掃描。
- INCLUDE 欄位:
CREATE UNIQUE INDEX ON EMP (EMPNO) INCLUDE (LASTNAME, FIRSTNAME),額外欄位不參與排序/唯一性,但可滿足覆蓋索引查詢。
- CLUSTER:
CREATE INDEX IX_DEPT ON EMP (WORKDEPT) CLUSTER,嘗試維持資料物理順序與索引順序一致。
CHECK PENDING 狀態解除
-- 全部立即檢查 (若有違規會報錯)
SET INTEGRITY FOR TABLE_NAME ALL IMMEDIATE CHECKED
-- 全部立即檢查但不驗證現有資料 (快速解除狀態)
SET INTEGRITY FOR TABLE_NAME ALL IMMEDIATE UNCHECKED
鎖定與日誌控制
- 取得表排他鎖:
LOCK TABLE TABLE_NAME IN EXCLUSIVE MODE,COMMIT 釋放。
- 關閉表日誌:
ALTER TABLE TABLE_NAME ACTIVATE NOT LOGGED INITIALLY (僅對建立後首個單位工作有效) 或建表時指定 NOT LOGGED INITIALLY。
- 刪除表:
DROP TABLE SCHEMA.TABLE_NAME。
- 重命名表:
RENAME TABLE OLD TO NEW。
- 取得目前時間戳:
SELECT CURRENT TIMESTAMP FROM SYSIBM.SYSDUMMY1。
概要表 (MQT) - 類似 Oracle Materialized View
-- 可重新整理的概要表
CREATE SUMMARY TABLE SUM_TBL AS (SELECT * FROM SRC WHERE COL1='AAA')
DATA INITIALLY DEFERRED REFRESH DEFERRED;
-- 重新整理
REFRESH TABLE SUM_TBL;
DATA INITIALLY DEFERRED:建表時不載入資料。
REFRESH DEFERRED:手動執行 REFRESH TABLE 更新。
全域暫存表 (DGTT)
DECLARE GLOBAL TEMPORARY TABLE SESSION.TMP_EMP
AS (SELECT * FROM EMPLOYEE) DEFINITION ONLY
EXCLUDING IDENTITY COLUMN ATTRIBUTES
ON COMMIT DELETE ROWS
NOT LOGGED;
- 僅存在於當前 Session,Commit 時自動清空資料 (
ON COMMIT DELETE ROWS)。
NOT LOGGED:不寫日誌,效能佳。
- 定義儲存於
SESSION Schema,實際資料在使用者暫存表空間。
視圖與別名管理
CREATE VIEW V_NAME AS SELECT * FROM TBL WHERE ...;
DROP VIEW V_NAME;
-- 查看視圖定義
SELECT TEXT FROM SYSCAT.VIEWS WHERE VIEWNAME='V_NAME';
CREATE ALIAS ALIAS_NAME FOR PRO_NAME; -- PRO_NAME 可為 TABLE/VIEW/ALIAS/NICKNAME
Sequence 管理
CREATE SEQUENCE SEQ_NAME START WITH 1 INCREMENT BY 1 NO MAXVALUE NO CYCLE CACHE 24;
ALTER SEQUENCE SEQ_NAME ...; -- 可修改 START/INCREMENT/MAXVALUE/CYCLE/CACHE
DROP SEQUENCE SEQ_NAME;
資料移動工具支援格式
| 工具 | 支援格式 | 不支援 |
| IMPORT | DEL, ASC, IXF, WSF | -- |
| EXPORT | DEL, IXF, WSF | ASC |
| LOAD | DEL, ASC, IXF | WSF |
| DB2MOVE | IXF | ASC, DEL, WSF |
監控架構
- 快照監控:特定時間點資料庫活動快照 (
GET SNAPSHOT)。
- 事件監控:記錄事件發生歷程 (
CREATE EVENT MONITOR)。
監控資料元素類型
| 類型 | 說明 |
| Counter (計數器) | 活動發生次數 |
| Gauge (測量) | 項目目前值 |
| Watermark (水位) | 最大/最小達到值 |
| Information (資訊) | 活動參考細節 |
| Timestamp (時間點) | 發生日期時間 |
| Time (耗時) | 活動花費時間 |
監控堆大小估算
(NUM_MON_APPS+1) * (NUM_DBS*(800+(NUM_TABLES_ACCESSED*20)) +
((NUM_APPS_CONNECTED+1)*(200+(NUM_TABLESPACES*100)))) / 4096
-- 受 MON_HEAP_SZ 參數控制
事件監控器操作
-- 建立寫入檔案的表事件監控器
CREATE EVENT MONITOR TBL_MON FOR TABLES WRITE TO FILE 'D:\TEMP';
-- 啟用/停用
SET EVENT MONITOR TBL_MON STATE 1;
SET EVENT MONITOR TBL_MON STATE 0;
-- 查詢狀態
SELECT EVMONNAME, EVENT_MON_STATE(EVMONNAME) FROM SYSCAT.EVENTMONITORS;
-- 刪除
DROP EVENT MONITOR TBL_MON;
- 上一篇文章: DB2 UDB V8.1 管理學習筆記 (二) - 物件管理、編目與備份恢復
- 下一篇文章: DB2 效能調校簡易指南 - 監控、緩衝池與 SQL 優化
Copyright ©
程式碼之家 All Rights Reserved