生產環境常需手動安裝 DB2 (非圖形化安裝器),以實現標準化、自動化、無人值守部署。本文詳細記錄 UNIX/Linux 環境下 DB2 手動安裝的完整 8 步驟:安裝程式、用戶/群組、實例、共享庫、環境變數、服務埠、建庫、客戶端配置。
/mnt/db2 或 /opt/ibm/db2/V11.5)
cd /mnt/db2
./db2_install
# 互動式選擇:
# 1. 接受授權條款
# 2. 選擇產品類型 (ESE/WESE/AE/Client)
# 3. 確認安裝路徑 (預設 /opt/ibm/db2/V11.5)
# 4. 選擇語言支援
# 5. 開始安裝...
無人值守模式: ./db2_install -n -p ESE -l zh_TW -b /opt/ibm/db2/V11.5
# 建立群組
groupadd -g 999 db2iadm1 # 實例擁有者主群組
groupadd -g 998 db2fadm1 # 受保護用戶群組 (Fenced UDF/SP)
groupadd -g 997 dasadm1 # DAS 管理用戶群組
# 建立用戶
useradd -g db2iadm1 -m -d /home/db2inst1 -s /bin/ksh -c "DB2 Instance Owner" db2inst1
useradd -g db2fadm1 -m -d /home/db2fenc1 -s /bin/ksh -c "DB2 Fenced User" db2fenc1
useradd -g dasadm1 -m -d /home/dasusr1 -s /bin/ksh -c "DAS Admin User" dasusr1
# 設定密碼 (生產環境必須設定強密碼)
passwd db2inst1
passwd db2fenc1
passwd dasusr1
用戶角色對照:
| 用戶 | 角色 | 用途 |
|---|---|---|
| db2inst1 | Instance Owner | 擁有實例所有資源、執行 db2start/stop、建立資料庫 |
| db2fenc1 | Fenced User | 執行 Fenced UDF/預存程序、隔離主引擎進程 |
| dasusr1 | DAS Admin | DB2 Administration Server 管理、圖形化工具遠端管理 |
# 3.1 建立 DAS (DB2 Administration Server)
/opt/ibm/db2/V11.5/instance/dascrt -u dasusr1
# 3.2 建立 DB2 實例
/opt/ibm/db2/V11.5/instance/db2icrt -u db2fenc1 db2inst1
# 可選參數:
# -a SERVER_ENCRYPT # 認證模式:SERVER_ENCRYPT/KERBEROS/GSSPLUGIN
# -p 50000 # 預設通訊埠 (稍後可修改)
# -s ese # 伺服器類型: ese/wse/client
/opt/ibm/db2/V11.5/cfg/db2ln
# 將 DB2 共享庫鏈接至系統庫路徑 (/usr/lib, /lib 等)
# 確保應用程式、驅動程式能動態載入 DB2 CLI/ODBC 庫
# 切換至實例擁有者
su - db2inst1
# 設定關鍵登錄變數
db2set DB2AUTOSTART=YES # 隨作業系統自動啟動
db2set DB2COMM=TCPIP # 啟用 TCP/IP 通訊協定
db2set DB2CODEPAGE=1208 # UTF-8 編碼 (視應用需求)
db2set DB2_COMPATIBILITY_VECTOR=ORA # Oracle 相容性向量 (遷移專案建議)
# 驗證
db2set -all
# 進入 DB2 命令列
db2
# 更新資料庫管理器配置
UPDATE DATABASE MANAGER CONFIGURATION USING SVCENAME db2c_db2inst1
# 或指定埠號
UPDATE DATABASE MANAGER CONFIGURATION USING SVCENAME 50000
# 驗證配置
GET DATABASE MANAGER CONFIGURATION
# 關鍵輸出:TCP/IP Service name = db2c_db2inst1 (或 50000)
/etc/services 對應項 (建議手動添加):
db2c_db2inst1 50000/tcp # DB2 Instance db2inst1
db2c_db2inst1_1 50001/tcp # 命令集中器 (可選)
db2c_db2inst1_2 50002/tcp # 僅限連線 (可選)
db2c_db2inst1_END 50003/tcp # 結束埠 (可選)
# 簡單建庫 (自動儲存管理)
db2 "CREATE DATABASE PRODDB AUTOMATIC STORAGE YES ON /db2data DBPATH ON /db2dbpath USING CODESET UTF-8 TERRITORY TW COLLATE USING SYSTEM"
# 進階建庫 (手動表空間、緩衝池、日誌配置)
# 參考 db2 "CREATE DATABASE ..." 完整語法
db2start
db2 "CONNECT TO PRODDB"
db2 "SELECT * FROM SYSCAT.TABLES FETCH FIRST 3 ROWS ONLY"
# 1. 登錄遠端節點
db2 "CATALOG TCPIP NODE REMOTE_NODE REMOTE server_hostname SERVER 50000"
# 2. 登錄資料庫別名
db2 "CATALOG DATABASE PRODDB AS PRODDB AT NODE REMOTE_NODE"
# 3. 測試連線
db2 "CONNECT TO PRODDB USER db2inst1 USING password"
db2 "SELECT CURRENT SERVER FROM SYSIBM.SYSDUMMY1"
[PRODDB]
Database=PRODDB
Protocol=TCPIP
Hostname=server_hostname
ServiceName=50000
UID=db2inst1
PWD=password
AutoCommit=1
db2level 顯示正確版本與修補包db2ilist 列出 db2inst1db2 get dbm cfg | grep SVCENAME 顯示正確埠netstat -an | grep 50000 顯示 LISTEN 狀態db2 connect to PRODDB 成功db2 connect to PRODDB 成功db2licm -l 顯示有效授權| 現象 | 原因 | 解決 |
|---|---|---|
| db2icrt 失敗:用戶不存在 | 群組/用戶建立失敗或 GID/UID 衝突 | 檢查 /etc/passwd、/etc/group,手動清理重建 |
| db2start 失敗:SQL10007N | 共享記憶體不足、核心參數未調優 | 調整 kernel.shmmax, kernel.shmall, semmsl 等 |
| 遠端連線失敗:SQL30081N | 防火牆、埠號錯誤、主機名解析、SVCENAME 不匹配 | telnet host 50000、檢查 /etc/hosts、/etc/services、dbm cfg |
| 中文亂碼 | CODEPAGE/LOCALE 不匹配 | 設定 DB2CODEPAGE=1208、LANG=zh_TW.UTF-8 |
手動安裝 DB2 的核心價值在於可重複、可版控、可自動化。將上述 8 步驟封裝為 Shell/Ansible/Terraform 腳本,納入基礎設施即代碼 (IaC) 體系,才能實現資料庫基礎設施的標準化交付與生命週期管理。