本系列第四篇聚焦三大高風險運維場景:LOAD 中斷後的表空間恢復、多欄位關聯的跨表更新、完整資料庫災難還原與前滾恢復。提供經實戰驗證的指令序列與排錯思路。
db2 "load from acmmst.txt of del modified by coldel|
replace into acmmst nonrecoverable"
SQL0668N Operation not allowed for reason code "3" on table "BTP.ACMMST".
SQLSTATE=57016
原因:資料不規範導致 LOAD 失敗,若強制中斷且未使用 NONRECOVERABLE,表空間會進入 LOAD PENDING / BACKUP PENDING 狀態。
db2 "load from /dev/null of del terminate into acmmst nonrecoverable"
db2 list tablespaces show detail
若狀態非 Normal,需離線備份該表空間後方可恢復正常。NONRECOVERABLE:不記錄重做日誌,速度最快,但需事後完整備份才能恢復該表空間COPY YES:產生副本映像,支援前滾恢復,適用生產環境表 A (ACTNO, CNLNO, BAL, PWD) 的 BAL 欄位,依表 B (ACTNO, CNLNO, TXNAMT) 的 TXNAMT 更新,匹配條件為 ACTNO + CNLNO 複合鍵。
db2 "UPDATE A
SET BAL = (SELECT TXNAMT FROM B
WHERE ACTNO = A.ACTNO AND CNLNO = A.CNLNO)
WHERE A.ACTNO || A.CNLNO IN (SELECT ACTNO || CNLNO FROM B)"
(ACTNO, CNLNO) 均有複合索引MERGE 語法 (DB2 9.7+):MERGE INTO A USING B
ON A.ACTNO = B.ACTNO AND A.CNLNO = B.CNLNO
WHEN MATCHED THEN UPDATE SET BAL = TXNAMT;DB1DB_NEW (不同路徑、不同容器配置)/tstdb2/db2log/tstdb2/db2tmp (系統臨時)、/dev/rtstcontlv00~03 (用戶資料)# 1. 啟動重導向還原
db2 "restore db db1 to /tstdb2/catalog into db_new
logtarget /tstdb2/db2log buffer 2048
replace existing redirect parallelism 16"
# 2. 重新定義表空間容器 (需在重導向模式下)
db2 "set tablespace containers for 1 using (path '/tstdb2/db2tmp')"
db2 "set tablespace containers for 2 using
(device '/dev/rtstcontlv00' 2621440,
device '/dev/rtstcontlv01' 2621440,
device '/dev/rtstcontlv02' 2621440,
device '/dev/rtstcontlv03' 2621440)"
# 3. 繼續還原
db2 "restore db db1 continue"
還原完成後資料庫處於 ROLLFORWARD PENDING 狀態,必須 執行前滾才能上線:
db2 "rollforward db db_new to end of logs and complete"
Rollforward Status
Input database alias = db_new
Number of nodes have returned status = 1
Node number = 0
Rollforward status = not pending
Next log file to be read =
Log files processed = -
Last committed transaction = 2024-01-15-10.59.23.000000
DB20000I The ROLLFORWARD command completed successfully.
關鍵指標: Rollforward status = not pending 代表恢復完成,資料庫可正常連接。
| 錯誤現象 | 原因 | 解決方案 |
|---|---|---|
| SQL1117N ROLL-FORWARD PENDING | 未執行 rollforward | 執行 rollforward db ... to end of logs and complete |
| 容器路徑不存在/權限不足 | 重導向容器定義錯誤 | 確認裝置路徑、權限、大小單位 (4K 頁數) |
| 日誌檔缺失 | 備份集不完整 | 確保備份包含所有活躍日誌,或使用 to end of backup |
TERMINATE 而非 RESTARTREDIRECT 模式重新規劃容器掌握 LOAD 恢復、複合鍵更新、異機災難還原三大核心技能,是 DB2 DBA 從「會用」進階到「敢管」的關鍵門檻。建議將指令序列封裝為參數化腳本,納入自動化運維平台。