執行 db2 restore database XXX from "D:DB2" taken at 20110515133036 ... 命令顯示 DB20000I RESTORE DATABASE命令成功完成,但隨後 db2 connect to XXX 拋出:
SQL1117N 由於 ROLL-FORWARD PENDING,不能連接或激活數據庫 "XXX"。
SQLSTATE=57019
在前滾已經過大於或等於 "2011-05-23-07.06.38.000000 UTC" 的時間點之前,數據庫 "XXX" 不能脫離前滾暫掛狀態……
還原操作將數據庫置於 Rollforward Pending(前滾掛起) 狀態。DB2 要求在完成前滾恢復並顯式執行 ROLLFORWARD ... STOP 後,數據庫才能正常連接。這是還原後的強制流程,而非錯誤。
db2 rollforward db XXX to end of logs and complete
前滾狀態 = 未暫掛上次落實的事務 = 2011-05-23-07.25.15.000000 UTC(已超過報錯要求的時間點)DB20000I ROLLFORWARD命令成功完成db2 rollforward db XXX stop
db2 connect to XXX
提示 SQL1031N 數據庫連接成功,故障解除。
| 常見誤區 | 正確做法 |
|---|---|
| 以為 RESTORE 成功即可直接 CONNECT | 必須完成 ROLLFORWARD ... STOP 全流程 |
| 使用 INCREMENTAL 還原時跳過日誌應用 | 增量還原同樣需要後續前滾 |
| 忽略 LOGTARGET 參數導致日誌找不到 | 還原時指定 LOGTARGET 或事後複製日誌到活動日誌路徑 |
#!/bin/ksh
DB=XXX
TS=20110515133036
BPATH="/home/db2inst1/backup"
db2 restore db $DB from $BPATH taken at $TS replace existing
if [ $? -ne 0 ]; then exit 1; fi
db2 rollforward db $DB to end of logs and complete
if [ $? -ne 0 ]; then exit 1; fi
db2 rollforward db $DB stop
db2 connect to $DB
echo "Restore & Rollforward completed successfully."
掌握 RESTORE → ROLLFORWARD TO END OF LOGS AND COMPLETE → ROLLFORWARD STOP 三部曲,是 DB2 DBA 從容應對災難恢復的核心技能。