在 Linux/UNIX 環境部署 DB2 時,建立實例擁有者帳號、建立實例、建立資料庫是核心三部曲。本文提供標準化操作流程,涵蓋帳號規劃、權限設定、常見錯誤排除與完整清除步驟。
| 角色 | 建議帳號 | 主要群組 | 用途 |
|---|---|---|---|
| 實例擁有者 | db2inst1 | db2iadm1 | 控制所有 DB2 進程、擁有資料庫檔案系統 |
| Fenced 用戶 | db2fenc1 | db2fadm1 | 執行不受信任的 UDF/存儲過程,隔離主引擎記憶體 |
| DAS 用戶 | dasusr1 | dasadm1 | 運行 DB2 Administration Server 進程 |
原則:實例擁有者帳號僅隸屬實例擁有者群組,不加入其他群組,減少權限外洩風險。
# 建立家目錄
mkdir -p /db2/db2inst1
# 使用系統管理工具建立帳號(Linux 可用 useradd)
# 關鍵參數:
# User NAME: db2inst1
# Primary GROUP: db2iadm1
# Group SET: staff
# HOME directory: /db2/db2inst1
# Initial PROGRAM: /bin/ksh 或 /bin/bash
# 切換至 root
cd /opt/ibm/db2/V11.5/instance # DB2 安裝路徑下的 instance 目錄
# -u 指定 fenced 用戶(生產環境必須分離)
./db2icrt -u db2fenc1 db2inst1
若測試環境不需 fenced 隔離,可省略 -u 參數,但生產環境強烈建議分離。
# 切換至實例擁有者
su - db2inst1
# 啟動資料庫管理器(必須步驟,否則報 SQL1032N)
db2start
# 建立資料庫(預設編碼 UTF-8,自動配置儲存路徑)
db2 "create database mydb automatic storage yes on '/db2/data' dbpath on '/db2/dbpath' using codeset utf-8 territory us collate using system"
db2 connect to mydb
db2 "select * from syscat.tables fetch first 5 rows only"
db2 terminate
# 1. 移除資料庫
su - db2inst1
db2 connect to mydb
db2 quiesce database immediate force connections
db2 unquiesce database
db2 drop database mydb
db2stop
# 2. 移除實例
exit # 回到 root
cd /opt/ibm/db2/V11.5/instance
./db2idrop -f db2inst1 # -f 強制移除,否則殘留檔案導致後續建立失敗
# 3. 移除 OS 帳號
# Linux:
userdel -r db2inst1
userdel -r db2fenc1
# AIX smitty: Remove a User → Remove AUTHENTICATION information: yes
# 4. 清除家目錄(若 userdel -r 未完全清除)
rm -rf /db2/db2inst1
| 錯誤代碼 | 原因 | 解決 |
|---|---|---|
| SQL1032N | 實例未啟動 | db2start 啟動實例 |
| DBI1281E | 實例擁有者家目錄權限錯誤 | 確保目錄擁有者為實例用戶,權限 750 |
| DBI1446I | Fenced 用戶與實例擁有者相同 | 生產環境務必指定不同的 fenced 用戶 |
生產環境部署建議將上述流程封裝為 Shell 腳本,包含參數檢查、冪等性設計、錯誤碼處理與日誌記錄,確保部署可重複、可審計。