本系列第二篇涵蓋三大核心運維技能:處理鎖定導致的 BIND 失敗與實例強制停止、線上調整緩衝池大小、循環/歸檔日誌模式切換與備份懸掛處理。這些是 DBA 從「被動救火」轉向「主動管控」的必修課。
SQL0082C An error has occurred which has terminated processing.
SQL0092N No package was created because of previous errors.
SQL0091N Binding was ended with "3" errors and "0" warnings.
根因:目標表/套件被長時間交易鎖定,BIND 需取得排他鎖而等待逾時。
db2stop
SQL1025N The database manager was not stopped because databases are still active.
db2stop force
SQL1064N DB2STOP processing was successful.
FORCE 會強制中斷所有連線、回滾未提交交易、釋放所有鎖定,實例隨即停止。
db2start 重新啟動實例db2 connect to <db> (或 db2s 連接預設庫)BIND 指令db2 "force application all" 精準切斷連線,避免全實例強制停止的副作用LOCKLIST、MAXLOCKS 參數,預防鎖升級導致並發崩潰# 將 IBMDEFAULTBP 從預設 250 頁調整為 10,240 頁 (4K 頁面)
db2 "alter bufferpool ibmdefaultbp size 10240"
db2 "select * from syscat.bufferpools" 查看 NPAGES 欄位| 負載類型 | 建議緩衝池策略 |
|---|---|
| OLTP (高並發、小交易) | 多小型緩衝池,按表空間/物件隔離 (BP_OLTP_IDX, BP_OLTP_DATA) |
| DW/BI (大掃描、排序) | 大型緩衝池 + 區塊式 I/O (BLOCKNONLOGGED),支援預讀 |
| 混合負載 | 依物件存取熱度分離:熱表/索引獨立池,冷資料共用池 |
# 檢查實例共享記憶體上限
db2 get dbm cfg | grep -i "INSTANCE_MEMORY\|DATABASE_MEMORY"
# 確保所有緩衝池總和 + 其他堆疊 < 實例記憶體上限
| 模式 | 參數值 | 支援備份類型 | 恢復能力 |
|---|---|---|---|
| 循環日誌 (預設) | LOGRETAIN=OFF | 僅離線備份 | 僅至最近離線備份點 |
| 歸檔日誌 | LOGRETAIN=RECOVERY | 離線 + 線上備份 | 時間點恢復 (PITR) |
db2 update db cfg for <dbname> using LOGRETAIN ON
# 查看時顯示為 LOGRETAIN=RECOVERY
關鍵後果: 參數生效後,資料庫進入 BACKUP PENDING (備份懸掛) 狀態,必須執行一次離線完整備份 才能解除:
db2 backup db <dbname>
# 完成後狀態恢復 Normal,可接受連線
db2 update db cfg for <dbname> using LOGRETAIN OFF
無備份懸掛限制,但喪失 PITR 能力。
LOAD REPLACE 預設會讓目標表空間進入 BACKUP PENDINGNONRECOVERABLE (不記錄日誌、無懸掛、不可前滾) 或 COPY YES (產生副本映像、支援前滾)db2 get db cfg for <db> | grep "Path to log files"db2 get db cfg for <db> | grep "First active log file"db2 prune logfile prior to <first_active_log>掌握 FORCE 停止、動態緩衝池、日誌模式切換三把鑰匙,即可掌控 DB2 實例的「生殺大權」。記住:任何模式切換、LOAD 大量操作,後續必有備份動作配合,才是專業 DBA 的鐵律。