首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

SQL1036C 錯誤排查實戰:從 Load 失敗到資料庫重建

     編輯:DB2 教學

案例背景

需將多份歷史資料匯入測試環境,匯出檔案分割為數部分。第一份檔(50 萬筆)使用 LOAD ... REPLACE INTO ... NONRECOVERABLE 匯入,測試環境空間有限,關閉日誌。

錯誤演進與處理過程

階段一:表空間滿

  • 錯誤:SQL0289N Unable to allocate new pages in table space "USERSPACE1"、Tablespace 2(USERSPACE1) is full
  • 處理:刪除無用大表 → LOAD ... TERMINATE 清除 Load Pending → 重新 Load 成功。

階段二:資料截斷與 Load Pending 纏身

  • 錯誤:SQL3125W character data truncated → 強制中斷 → 表進入 Load Pending → LOAD TERMINATE 失敗(SQL3508N Reason code 1) → 狀態變 Quiesced: EXCLUSIVE load pending → 再次 Terminate 卡住 → ^C 強斷 → SQL3501W、DB21017E
  • 嘗試:FORCE APPLICATION ALL → 狀態 Quiesced: EXCLUSIVE → LOAD TERMINATE 報 SQL3508N TEMP_FILE path /db2catalog/.../lo → db2stop 失敗 → DROP DATABASE 失敗(SQL1137W) → UNCATALOG → 導向恢復報 SQL1036C I/O error。

階段三:根因定位與解決

  • 檢視 db2diag.log 發現 0xFFFF8138(Invalid state transition)。
  • 檢查表結構發現:目標表比匯入檔多一欄位 → 重建表結構匹配 → Load 成功。
  • 關鍵發現:SQL3508N 提示的路徑 /db2catalog/db2inst/NODE0000/SQL00001/lo 下殘留 load.msg 等臨時檔案。清空 db2catalog 目錄後,導向恢復成功。

核心教訓

  1. 仔細研讀錯誤訊息:SQL3125W 早已暗示結構不符;SQL3508N 指向殘留檔案清理方向;SQL1137W 提示需清理容器路徑。db2diag.log 含完整線索。
  2. 建庫前清理 SMS 目錄:SQL1036C 本質多為權限或殘留檔案問題,確保編目、臨時表空間目錄乾淨、權限正確。
  3. 表結構驗證先行:匯入前務必核對來源檔案與目標表欄位一致性。

環境資訊

  • OS:AIX 4.3.3
  • DB2:7.2
  • 實例:db2inst、資料庫:test
  • 表空間:SYSCATSPACE(SMS)、TEMPSPACE1(SMS)、USERSPACE1(DMS)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved