在 Linux 上安裝 Oracle 10g 向來被視為「權限、套件、核心參數、環境變數」四大地獄的綜合考驗。本文以 Red Hat Enterprise Linux 3 (x86) 為例,完整記錄從硬體檢查、OS 套件驗證、建立使用者/群組、目錄權限、核心參數調校、Shell 限制、掛載光碟、Oracle 使用者環境配置,到啟動 runInstaller 的全流程,並標註常見踩坑點與驗證指令,供後續部署參考。
| 項目 | 檢查指令 | 建議值 | 實測判斷 |
|---|---|---|---|
| 實體記憶體 | grep MemTotal /proc/meminfo | ≥ 512 MB(建議 1 GB) | 輸出值 ≥ 建議值即通過 |
| Swap 空間 | grep SwapTotal /proc/meminfo | ≥ 1 GB | 同上 |
| /tmp 可用空間 | df -k /tmp | ≥ 400 MB | 同上 |
| 磁碟可用空間 | df -k | ≥ 4 GB | 含軟體、資料、備份預留 |
CPU:主頻 ≥ 2.0 GHz;磁碟:建議 7200 RPM 以上,生產環境推薦 SCSI/RAID。
cat /etc/issue # 預期輸出 Red Hat Enterprise Linux ES release 3
官方支援:RHEL 2.1/3 (x86)、UnitedLinux 1.0 (x86);RHEL 9 亦可安裝但需額外相容套件。
# 核心開發工具
gcc-3.2.3-2 或更新
make-3.79
binutils-2.11
# 相容性套件(關鍵!)
openmotif-2.2.2-16
setarch-1.3-1
compat-db-4.0.14.5
compat-gcc-7.3-2.96.122
compat-gcc-c++-7.3-2.96.122
compat-libstdc++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122
驗證方式:rpm -q <package_name> 逐一確認;缺漏請從安裝光碟或 RHN 安裝。
# 1. 檢查是否已存在
grep oinstall /etc/group
grep dba /etc/group
# 2. 建立群組與使用者
groupadd oinstall # Oracle Inventory 群組
groupadd dba # OSDBA 群組
useradd -g oinstall -G dba oracle
id oracle # 驗證 uid/gid/群組
passwd oracle # 設定密碼
注意:群組名拼寫必須為 oinstall(非 osintall),否則後續安裝會報錯。
mkdir -p /u01/app/oracle # ORACLE_BASE
mkdir -p /u02/oradata # 選擇性資料檔目錄
chown -R oracle:oinstall /u01/app/oracle /u02/oradata
chmod -R 755 /u01/app/oracle /u02/oradata
編輯 /etc/sysctl.conf 新增/修改:
kernel.shmall = 2097152
kernel.shmmax = 2147483648 # 物理記憶體一半,單位 bytes
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
套用:/sbin/sysctl -p;驗證:/sbin/sysctl -a | grep <param>。
編輯 /etc/security/limits.conf:
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536
編輯 /etc/pam.d/login 確認含:
session required /lib/security/pam_limits.so
依預設 Shell 修改啟動檔:
/etc/profile 加入 ulimit -u 16384 -n 65536(針對 oracle 使用者)。/etc/csh.login 加入 limit maxproc 16384; limit descriptors 65536。以 oracle 登入,編輯 ~/.bash_profile:
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_SID=orcl
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib
export NLS_LANG=AMERICAN_AL32UTF8 # 依實際字元集調整
執行 source ~/.bash_profile,再用 env | grep ORA 驗證。
# root 執行
mount /dev/cdrom /mnt/cdrom
# 切換 oracle 使用者
su - oracle
cd /mnt/cdrom
./runInstaller
圖形介面依提示完成:Inventory 目錄、權限、資料庫類型(一般/資料倉儲/交易處理)、字元集、密碼、儲存路徑等。
| 現象 | 可能原因 | 對策 |
|---|---|---|
| runInstaller 無法啟動圖形介面 | X11 轉發未開啟 / DISPLAY 未設定 | xhost +;export DISPLAY=:0.0 或 SSH -X |
| 缺少 libaio / libstdc++ | 相容套件未裝 | 補裝 compat-libstdc++*、libaio |
| 核心參數不足 | sysctl.conf 未生效 | sysctl -p 並重新檢查 |
| 權限錯誤 | 目錄擁有者非 oracle:oinstall | chown -R oracle:oinstall ... |
安裝完成後,執行 $ORACLE_HOME/root.sh(需 root),並驗證 sqlplus / as sysdba 可正常連線。建議立即建立資料庫備份策略與監控腳本,將安裝成果轉化為可維運的生產環境。