執行 DB2 BACKUP 命令時,報錯 SQL2048N:
「An error occurred while accessing the history file. The history file is either corrupted or cannot be accessed.」
原因:資料庫目錄下的備份歷史文件 db2rhist.asc 損壞(磁碟錯誤、誤刪、權限變更等),導致 DB2 無法記錄新備份條目。
/NODE000x/SQL0000x/db2rhist.asc 及其備份 db2rhist.bakdb2rhist.asc 移動至他處(如 /tmp/db2rhist.asc.corrupt),保留 db2rhist.bak 原地不动。mv /db2inst1/db2inst1/NODE0000/SQL00001/db2rhist.asc /tmp/db2 backup db MYDB to /backup.asc 缺失但 .bak 存在,會自動由 .bak 複製重建 .asc。db2 backup db MYDB to /backup原理: DB2 每次成功備份後會將 .asc 複製為 .bak。重建邏輯:IF !EXISTS(.asc) AND EXISTS(.bak) THEN COPY .bak -> .asc。
db2rhist.asc 與 db2rhist.bak 均移走。mv /db2inst1/.../db2rhist.asc /tmp/ && mv /db2inst1/.../db2rhist.bak /tmp/db2 list history 僅顯示新備份之後的記錄。不影響現有備份映像檔的還原能力(還原時可手動指定 taken at 時間戳)。
db2rhist.asc/.bak 納入檔案級備份(如 rsync 至備份伺服器),避免雙文件同時損壞。LIST HISTORY 性能。定期執行:db2 prune history 20231231 and deleteNODE000x/SQL0000x/ 目錄有完整讀寫權限,防止誤刪或權限變更導致無法寫入。taken at 即可。DB2 備份歷史文件損壞並非災難性故障。掌握 「移走 .asc → 執行備份觸發 .bak 重建 → 再次備份驗證」 三步曲,或極端情況下的 「移走雙文件 → 重建空歷史 → 繼續備份」,即可在幾分鐘內恢復備份記錄功能,保障備份作業連續性。