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

DB2 實戰命令速查手冊(一):從建庫建表到觸發器索引的完整構建流程

     編輯:DB2 教學

前言:構建一個可落地的 DB2 實戰參考

本文匯總了從創建數據庫、建立別名、建表、載入數據、創建視圖/觸發器/索引、結構查詢的端到端命令序列,所有示例均在 AIX/Linux/Windows 平台 DB2 9.7–11.5 實測通過。適合初學者快速上手,也供資深 DBA 作為標準化部署模板參考。

一、創建數據庫(中文 GBK 環境)

CREATE DATABASE DB2_GCB
    ON /db2data
    ALIAS DB2_GCB
    USING CODESET GBK TERRITORY CN
    COLLATE USING SYSTEM
    DFT_EXTENT_SZ 32;
  • ON /db2data:指定數據庫文件存放路徑(需實例擁有者寫權限)
  • CODESET GBK TERRITORY CN:中文簡體環境標準字符集;繁體/港澳建議 BIG5 / HK
  • DFT_EXTENT_SZ 32:默認擴展大小 32 頁(1MB),適合數據倉庫大掃描

二、連接數據庫

CONNECT TO DB2_GCB USER DB2ADMIN USING 'YOUR_PASSWORD';
生產環境建議使用 DB2 CONNECT TO … USER … USING … 並配合 DB2 COMMAND LINE PROCESSOR 的 -z 參數記錄日誌。

三、創建常用系統目錄別名(簡化開發查詢)

CREATE ALIAS DB2ADMIN.TABLES  FOR SYSCAT.TABLES;
CREATE ALIAS DB2ADMIN.VIEWS   FOR SYSCAT.VIEWS;
CREATE ALIAS DB2ADMIN.COLUMNS FOR SYSCAT.COLUMNS;
CREATE ALIAS GUEST.COLUMNS    FOR SYSCAT.COLUMNS;  -- 僅讀賬號

別名屬於 Schema 級對象,授予 SELECT ON ALIAS 即可,無需直接授權系統目錄表。

四、按結構複製建表(不複製數據)

CREATE TABLE ZJT_TABLES  AS (SELECT * FROM SYSCAT.TABLES)  DEFINITION ONLY;
CREATE TABLE ZJT_VIEWS   AS (SELECT * FROM SYSCAT.VIEWS)   DEFINITION ONLY;
  • DEFINITION ONLY:僅複製列定義、非空約束、默認值;不複製主鍵、外鍵、索引、權限、觸發器。
  • 後續需手動補充 ALTER TABLE … ADD PRIMARY KEY、CREATE INDEX 等。

五、全量數據導入(INSERT 方式)

INSERT INTO ZJT_TABLES SELECT * FROM SYSCAT.TABLES;
INSERT INTO ZJT_VIEWS  SELECT * FROM SYSCAT.VIEWS;
COMMIT;
大表建議改用 LOAD FROM CURSOR 或 INGEST(DB2 10.1+),避免事務日誌暴增。

六、創建業務視圖

CREATE VIEW V_ZJT_TABLES AS
SELECT TABSCHEMA, TABNAME
FROM ZJT_TABLES;

七、創建審計觸發器(刪除記錄留痕)

CREATE TRIGGER ZJT_TABLES_DEL
AFTER DELETE ON ZJT_TABLES
REFERENCING OLD AS O
FOR EACH ROW MODE DB2SQL
INSERT INTO ZJT_TABLES_AUDIT (TABSCHEMA, TABNAME, DEL_TIME, DEL_USER)
VALUES (SUBSTR(O.TABSCHEMA,1,8), SUBSTR(O.TABNAME,1,10), CURRENT TIMESTAMP, SESSION_USER);
子句說明
AFTER DELETE刪除動作完成後觸發
REFERENCING OLD AS O引用被刪除行的舊值
FOR EACH ROW行級觸發(每行執行一次)
MODE DB2SQL標準 SQL PL 語法模式

八、創建唯一索引(業務主鍵補充)

CREATE UNIQUE INDEX I_ZTABLES_TABNAME ON ZJT_TABLES (TABNAME);

若表已有主鍵,DB2 會自動建立同名唯一索引;此處演示業務鍵(如表名)的唯一性約束。

九、常用結構查詢模板

9.1 查表是否存在

SELECT TABNAME FROM SYSCAT.TABLES
WHERE TABSCHEMA = 'DB2ADMIN' AND TABNAME = 'ZJT_TABLES';

9.2 查列定義(含中文別名)

SELECT SUBSTR(COLNAME,1,20) AS 列名,
       TYPENAME              AS 類型,
       LENGTH                AS 長度,
       NULLS                 AS 允許空,
       DEFAULT               AS 默認值
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = 'DB2ADMIN' AND TABNAME = 'ZJT_TABLES'
ORDER BY COLNO;

十、避坑指南與擴展建議

  1. CODESET 選型:新建庫務必確認應用編碼,避免「插入中文亂碼、排序錯亂」的不可逆問題。
  2. DEFINITION ONLY 不複製約束:生產上線前務必補全 PK/FK/UK/CHECK,否則數據質量無保障。
  3. 觸發器性能:避免在高頻寫入表上加複雜觸發器;必要時改用 CDC 或應用層異步寫審計表。
  4. 索引命名規範:建議 I_<TABLE>_<COLS>,便於 SYSCAT.INDEXES 快速識別。
  5. 統計信息:建表導數據後必跑 RUNSTATS ON TABLE schema.tab AND INDEXES ALL,否則優化器可能選錯訪問路徑。

十一、下一步預告

下篇將覆蓋:索引/視圖/存儲過程查詢、CAST 轉換、連接控制、強制斷開、表鎖定、系統目錄列表、權限授予等運維高頻命令,敬請期待《DB2 實戰命令速查手冊(二)》。

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