db2 ? SQLxxxx 查詢說明並對症下藥;無錯誤碼 (Hang/高 CPU) → 依賴經驗與工具診斷。cd /usr/opt/db2_08_01/instance/
./db2iupdt <instance> # root 身份重新更新實例db2iupdt、檔案權限被改 777、實例檔案損壞、主機名與 db2nodes.cfg 不符。su -
db2_kill
ipclean
su - root
kill -9 所有該實例 db2 進程
db2start
通常因前次未正常關閉導致共享記憶體/信號量殘留。
db2diag.log、db2dump 目錄下 trap 檔。db2set DB2CODEPAGE=... DB2COUNTRY=... 與資料庫一致。DB2COMM=TCPIP、SVCENAME (端口/服務名)、services 檔、netstat -an | grep PORT 確認 LISTEN。db2dart /DDEL 導出殘存資料 (需離線)。EXPORT,不可連線時只能 db2dart。db2dart 搶救。PRUNE LOGFILE PRIOR TO <file>。| 現象 | 可能原因 |
|---|---|
| CPU 高、I/O 低 | 大量排序 |
| I/O 忙、CPU 多 WAIT | 過多 I/O (全表掃描、索引碎片) |
| CPU/I/O 皆閒 | 鎖等待 |
| CPU/I/O 皆高 | 高成本 SQL 執行中 |
# 開啟監控
db2 UPDATE MONITOR SWITCHES USING BUFFERPOOL ON LOCK ON SORT ON STATEMENT ON TABLE ON UOW ON
# 繁忙時刻抓應用快照
db2 GET SNAPSHOT FOR ALL APPLICATIONS > app.out
# 檢視 Executing 狀態應用的 SQL
# 或抓動態 SQL 快照
db2 GET SNAPSHOT FOR DYNAMIC SQL ON <db> > sql.out
# 依 Total execution time / CPU time 找出最耗時語句
# 1. 看存取計劃與成本
db2expln -d <db> -f sql.in -z ";" -g -o sql.exp
# 2. 索引建議
db2advis -d <db> -i sql.in
# 3. 業務層面重寫 (若索引無法解決)
LOCKTIMEOUT 禁用 -1 (無限等待)。db2 GET SNAPSHOT FOR DB ON <db> 看 Deadlocks detected / Lock Timeouts。mkdir /tmp/dlmon
db2 CONNECT TO <db>
db2 CREATE EVENT MONITOR dlmon FOR DEADLOCKS WITH DETAIL WRITE TO FILE '/tmp/dlmon' REPLACE
db2 SET EVENT MONITOR dlmon STATE 1
# 等待死鎖發生
db2 SET EVENT MONITOR dlmon STATE 0
db2evmon -d /tmp/dlmon > /tmp/dlmon.outlong → sqlint32 或編譯加 LONGERROR NO;CALL 宿主變數改動態 SQL;SQL0433 同理改動態呼叫。故障處理核心:分類 → 定位 → 對症 → 預防。命令細節請查閱官方文檔,建立團隊運行手冊並定期演練。