省總伺服器上線前夜,資料庫建好、程式包部署完畢,一切按部就班,唯獨應用程式死活連不上庫。錯誤碼 SQL30081N (通訊協議 TCP/IP, 錯誤 10054) 反覆出現,端口、防火牆、網路全查遍均正常。本文完整還原從連線失敗 → 重裝還原 → 目錄殘留阻礙 → 密碼不同步 三重關卡的破解全過程。
測試指令如下:
catalog tcpip node local remote localhost server 50000
catalog db sample as test at node local
connect to test user <用戶名> using <密碼>
錯誤訊息指向 `recv` 函數斷連 (10054),網路層面無異常。無奈重裝資料庫,轉戰備份還原流程。
執行 `restore database HD taken at
嘗試排查:
陷入死循環:目錄裡沒有,卻說有;實體不在,卻刪不掉。
參考社群建議,反向操作:
db2 catalog db HD
db2 drop db HD
原理:`catalog` 先在目錄建立條目(指向實體路徑),`drop` 再依條目刪除實體與條目。隨後 `restore` 順利成功。
還原成功,應用程式卻依舊連線失敗。靈光一現:還原的資料庫內部帳號密碼,與新建實例時的作業系統帳號密碼不一致。
直接修改 `db2admin` 等服務帳號的 OS 密碼,會導致 DB2 系統服務啟動失敗(報「管理伺服器未啟動」),因為 Windows 服務註冊時綁定的是安裝時的帳號密碼。
| 現象 | 可能原因 | 驗證/解決動作 |
|---|---|---|
| SQL30081N 10054 | 實例未啟動/埠號錯誤/防火牆/密碼不同步 | 檢查服務狀態、`db2 get dbm cfg | find "SVCENAME"`、同步服務登入密碼 |
| 還原報別名已存在 | 目錄殘留條目與實體不一致 | `catalog db <名稱>` → `drop db <名稱>` → 再還原 |
| 服務啟動失敗 | OS 密碼變更未同步至服務登入 | 服務管理員 → 登入頁籤 → 更新密碼 → 重啟 |
這一夜從傍晚搞到凌晨,換來的不只是上線成功,更是對 DB2 服務身份認證與目錄機制的深層肌肉記憶。