整理 DB2 日常運維與開發高頻 SQL/命令,涵蓋 DML、載入卸載、編碼處理、CASE 語法差異,適合貼在工位牆上隨時查閱。
-- 插入 (從備份表同步)
INSERT INTO DOCSUMMITINFO (APPID, DOCRESULT, EXITVALUE, LOGDESC, DOCFLAG)
SELECT APPID, DOCRESULT, EXITVALUE, LOGDESC, DOCFLAG FROM DOCSUMMITINFOBAK;
-- 刪除前 N 筆 (需子查詢)
DELETE FROM (SELECT * FROM AUTEK.TEMPMAINBAK FETCH FIRST 20 ROWS ONLY);
-- 更新
UPDATE T SET COL1='NEW' WHERE COL2=100;
| 工具 | 適用場景 | 典型命令 |
|---|---|---|
| LOAD | 大量初始裝載、替換模式、不記錄日誌 (最快) | db2 LOAD FROM data.del OF DEL MODIFIED BY COLDEL0x7C REPLACE INTO SCHEMA.TABLE |
| IMPORT | 中小量、需觸發器/約束、記錄日誌 | db2 IMPORT FROM data.ixf OF IXF INSERT INTO SCHEMA.TABLE |
| EXPORT | 導出查詢結果 | db2 EXPORT TO data.del OF DEL SELECT * FROM TABLE |
COLDEL0x7C:分隔符 '|' (ASCII 0x7C)COLDEL0x23:分隔符 '#' (ASCII 0x23)CODEPAGE=1386:指定來源檔編碼 (GBK),避免中文亂碼ANYORDER:LOAD 時允許並行、不保證順序,提升效能-- 實例級 (需重啟實例生效)
db2set DB2CODEPAGE=1208 -- UTF-8
db2set DB2CODEPAGE=819 -- ISO-8859-1
-- 查看資料庫級代碼頁
db2 GET DB CFG FOR DB_NAME | grep -i codeset
| SQL Server | DB2 (標準 SQL) |
|---|---|
CASE col WHEN NULL THEN 'N' ELSE 'Y' END | CASE WHEN col IS NULL THEN 'N' ELSE 'Y' END |
CASE WHEN col IS NULL ... 也支援 | 統一用 CASE WHEN 條件 THEN ... 形式 |
-- 離線備份
db2 BACKUP DB MYDB TO /backup COMPRESS
-- 聯機備份 (需歸檔日誌)
db2 BACKUP DB MYDB ONLINE TO /backup INCLUDE LOGS
-- 還原 (指定時間點)
db2 RESTORE DB MYDB FROM /backup TAKEN AT 20240115103000
-- 滾動恢復
db2 ROLLFORWARD DB MYDB TO END OF LOGS AND COMPLETE
-- 檢查備份完整性
db2ckbkp -a /backup/MYDB.0.DB2.NODE0000.20240115103000.001
-- 表大小統計
SELECT TABSCHEMA, TABNAME, NPAGES*32/1024 AS SIZE_MB
FROM SYSCAT.TABLES WHERE TABSCHEMA NOT LIKE 'SYS%' ORDER BY 3 DESC;
-- 索引使用情況
SELECT INDSCHEMA, INDNAME, NLEAF, NLEVELS, CLUSTERRATIO
FROM SYSCAT.INDEXES WHERE TABSCHEMA='MYSchema';
-- 活動鎖等待
db2 GET SNAPSHOT FOR LOCKS ON MYDB
持續更新此速查表,將零散命令內化為肌肉記憶,應對線上事故更從容。