企業環境中因網域遷移、主機重命名或災難恢復演練,常需變更 DB2 伺服器的主機名稱。本文彙整官方建議流程,涵蓋 AIX、Solaris、HP-UX、Linux、Windows 等平台,適用 DB2 UDB V8、V9.1、V9.5 版本,並針對跨平台差異、權限陷阱、DAS 同步、Control Center 清理等細節給出具體指令與避坑指南。
db2nodes.cfg、DAS 目錄、啟動服務。db2set -g DB2SYSTEM=<new_hostname> 必須以 su root(不加 -,保留實例環境變數)執行,否則會遇到 DBI1309E 或 rc = -2029059830 錯誤。db2ilist 僅列出當前安裝路徑下的實例。db2admin stop :: 停止 DAS
set DB2INSTANCE=INST1
db2stop :: 停止各實例(逐一執行)
# 停止 DAS
db2set -all | grep DB2ADMINSERVER :: 取得 DAS 實例名(如 das91)
su - das91
db2admin stop
# 停止所有實例
db2ilist :: 列出所有實例
su - <inst_name>
. sqllib/db2profile
db2 force application all
db2stop
db2 terminate
請參考各平台官方文件(AIX chdev/hostname、Linux hostnamectl//etc/hostname、Windows 系統屬性 → 電腦名稱),修改完成後必須重啟作業系統使生效。
su root :: 不加 '-', 保留實例環境變數
db2set -g DB2SYSTEM=<new_hostname>
db2 terminate
# 驗證
su - <inst_user>
db2set -all | grep DB2SYSTEM
# 應顯示 [g] DB2SYSTEM=<new_hostname>
多實例環境:上述指令僅需執行一次,全域登錄對所有實例生效。
db2nodes.cfg檔案位置:
<instance_home>/sqllib/db2nodes.cfg<install_path>\SQLLIB\DB2\db2nodes.cfg修改範例(將舊主機名 red01 改為 privates):
# 原內容
0 red01 0
# 修改後
0 privates 0
多實例環境下,每個實例目錄下的 db2nodes.cfg 皆需同步修改。
db2 list admin node directory show detail
db2 uncatalog node <old_hostname>
db2 catalog admin tcpip node <new_hostname> remote <new_hostname> system <new_hostname>
db2 update admin cfg using DB2SYSTEM <new_hostname>
db2 update admin cfg using SMTP_SERVER <new_hostname>
db2admin start
set DB2INSTANCE=INST1
db2start
# DAS
su - das91
db2admin start
# 各實例
su - <inst_name>
. sqllib/db2profile
db2start
DB2ADMNS、DB2USERS 名稱會隨之改變,需執行:
db2extsec -a <new_computername>\DB2ADMNS -u <new_computername>\DB2USERS
| 錯誤現象 | 原因 | 解決方式 |
|---|---|---|
DBI1309E System error (V9.5)rc = -2029059830 (V8/V9.1) |
實例用戶無權修改全域登錄檔(需 root) | 使用 su root(不加 -)執行 db2set -g |
SQL1043C 後續操作失敗 |
db2nodes.cfg 未同步或 DAS 目錄殘留舊主機名 |
完整執行階段 4、5 並重啟服務 |
| 遠端連線失敗 | 用戶端 db2 catalog node 仍指向舊主機名 |
用戶端同步執行 db2 uncatalog/catalog node |
總結:主機名稱變更屬高風險操作,建議先在測試環境演練全流程,確認應用程式連線字串、排程腳本、監控工具均同步更新後,再排入生產變更窗口執行。