現象與錯誤碼解讀
變更Windows/Linux/AIX主機名稱(Hostname)後,嘗試啟動DB2實例(`db2start`)失敗,報錯:
SQL6031N DB2 instance startup failed. Reason code "10".
Reason Code 10 官方定義: 「確認 `db2nodes.cfg` 第 <行號> 行定義的主機名稱在系統上已定義且可運作。」
核心原因:DB2實例節點配置檔 `db2nodes.cfg` 仍記錄舊主機名稱,與作業系統當前主機名稱不一致,導致啟動時節點驗證失敗。
技術背景:db2nodes.cfg 關鍵角色
自DB2 Version 8起,無論分區(DPF)或非分區(EEE/非EEE)環境,實例目錄下均存在 `db2nodes.cfg`(Windows路徑:`%DB2PATH%\<實例名>\db2nodes.cfg`,Linux/Unix:`~<實例擁有者>/sqllib/db2nodes.cfg`)。
檔案格式(每行一節點):
節點號 主機名稱 邏輯埠 網路名稱 [資源標記]
範例(單分區 Windows):
0 TSSTEST1 TSSTEST1 0
欄位說明:
- 節點號:0~999,協調節點通常為0
- 主機名稱:作業系統 `hostname` 回傳值,必須與OS完全一致(含大小寫)
- 邏輯埠:FCM通訊埠,通常同主機名稱
- 網路名稱:保留欄位,通常為0
完整修復步驟(Windows範例,Linux/Unix同理)
步驟 1:確認當前主機名稱
C:\> hostname
TSCTEST1
步驟 2:備份並編輯 db2nodes.cfg
- 以實例擁有者身分(或Administrators群組)開啟檔案
- 備份:`copy db2nodes.cfg db2nodes.cfg.20240115.bak`
- 將舊主機名稱(TSSTEST1)全數替換為新名稱(TSCTEST1):
0 TSCTEST1 TSCTEST1 0
- 儲存檔案(確保無BOM、換行符為CRLF)
步驟 3:檢查 Windows 服務與註冊表(關鍵補充)
若實例設為「自動啟動」或習慣透過 `services.msc` 啟動,還需同步更新:
- 服務登入身分: 服務屬性 → 「登入」頁籤,確認「此帳號」密碼正確(主機名稱變更不影響域帳號,但本地帳號 `.\db2admin` 需確認)
- 註冊表映像路徑: `HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DB2-<實例名>` → `ImagePath` 參數中的主機名稱參數(罕見,但部分腳本會寫死)
步驟 4:驗證網路解析
C:\> ping TSCTEST1
C:\> nslookup TSCTEST1
確保新主機名稱可解析至本機IP(`127.0.0.1` 或實體IP),`hosts` 檔(`C:\Windows\System32\drivers\etc\hosts`)同步更新。
步驟 5:啟動實例驗證
C:\> db2start
SQL1063N DB2START processing was successful.
若仍失敗,檢查 `db2diag.log` 關鍵字 `SQL6031N`、`FCM`、`db2nodes.cfg`,確認是否有殘留舊名稱參考。
Linux/Unix 環境補充注意事項
- /etc/hosts 必須同步: 新主機名稱對應回環或實體IP
- /etc/hostname 或 hostnamectl: 永久生效配置
- DB2實例擁有者 .profile/.bash_profile: 若有硬編碼 `export DB2NODE=0` 或 `export HOSTNAME=...` 需同步修改
- DPF 環境: 所有節點的 `db2nodes.cfg` 均需修改,並確認 `/etc/services` 中 `db2c_<實例名>` 埠定義一致
- TSA/RSCT 集群環境: 需同步更新 `lsrsrc IBM.Application Name`、`mkrsrc` 定義,建議聯繫IBM支援協助
預防最佳實務
- 變更前評估: 納入DB2實例停機視窗,通知應用團隊
- 標準化腳本: 建立 `change_hostname_db2.sh` 自動化:停實例 → 改OS主機名 → 改 `db2nodes.cfg` → 改 `/etc/hosts` → 啟實例 → 驗證連線
- 使用 FQDN 或 CNAME: `db2nodes.cfg` 主機名欄位可填寫 FQDN(如 `db2srv01.corp.example.com`),搭配 DNS 解析,未來遷移只需改 DNS,DB2 配置無需動刀
- 監控告警: 部署腳本定期比對 `hostname` 輸出與 `db2nodes.cfg` 第2欄,不一致即發警
附圖:錯誤重現與修復流程

總結
主機名稱變更導致 DB2 實例啟動失敗(SQL6031N RC=10)是經典配置不一致問題。核心修復只需同步更新 `db2nodes.cfg` 主機名欄位,輔以網路解析、服務帳號、註冊表檢查。建議將此納入基礎設施變更標準作業程序(SOP),採用 FQDN 解耦未來變更風險。