DB2 對共享記憶體、訊號、Semaphores 有嚴格最低需求,安裝前必須調整:
# /etc/sysctl.conf 追加
kernel.msgmni = 1024
kernel.sem = 250 256000 32 1024
# 參數含義:
# msgmni: 訊號佇列最大數量
# sem: SEMMSL(單組最大信號量) SEMMNS(系統最大信號量) SEMOPM(單次操作最大信號量) SEMMNI(最大組數)
# 使之生效
sysctl -p
kernel.shmmax、kernel.shmall。# 群組
groupadd -g 999 db2iadm1 # 實例管理群組
groupadd -g 998 db2fadm1 # 受防護用戶群組
groupadd -g 997 dasadm1 # DAS 管理群組
# 用戶
useradd -u 1004 -g db2iadm1 -m -d /home/db2inst1 -s /bin/ksh db2inst1
useradd -u 1003 -g db2fadm1 -m -d /home/db2fenc1 -s /bin/ksh db2fenc1
useradd -u 1002 -g dasadm1 -m -d /home/dasusr1 -s /bin/ksh dasusr1
# 設定密碼
passwd db2inst1; passwd db2fenc1; passwd dasusr1
關鍵:實例用戶 db2inst1 主群組為 db2iadm1,受防護用戶 db2fenc1 主群組為 db2fadm1。依照 DIA8402C 避坑指南,實例用戶必須同時屬於受防護用戶主群組:
usermod -a -G db2fadm1 db2inst1
./db2_install./setup 圖形介面,db2_install 無交互、適合腳本化、標準化部署)。/opt/ibm/db2/V8.1 (V8.2 實際版本目錄可能為 V8.1)。# root 進入實例建立工具目錄
cd /opt/ibm/db2/V8.1/instance
# 建立 DB2 實例
./db2icrt -u db2fenc1 db2inst1
# -u 指定受防護用戶
# 成功輸出:DBI1070I Program db2icrt completed successfully.
# 切換至實例用戶
su - db2inst1
# 建立資料庫 (中文環境建議 GBK/UTF-8)
db2 "CREATE DATABASE mydb ON /db2data USING CODESET GBK TERRITORY CN COLLATE USING SYSTEM"
# 或使用預設路徑
db2 "CREATE DATABASE mydb USING CODESET UTF-8 TERRITORY CN"
# 驗證
db2 LIST DATABASE DIRECTORY
db2 CONNECT TO mydb
db2 "SELECT * FROM SYSCAT.TABLES FETCH FIRST 5 ROWS ONLY"
db2level 確認版本為 DB2 v8.2.x.x。db2licm -l 確認授權類型 (試用/永久)。db2set -all 檢視登錄變數 (如 DB2COMM=TCPIP)。db2 GET DBM CFG 核對 SVCENAME、TP_MON_NAME 等。db2set DB2COMM=TCPIP → db2stop; db2start。/etc/services 加入 db2c_db2inst1 50000/tcp。sysctl.conf → 安裝中途失敗或實例建立後無法啟動。DIA8402C。/tmp 空間不足 (建議 > 2GB) → 安裝解壓失敗。CODESET → 建庫預設為 ISO8859-1,後續中文亂碼。