首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle Linux 靜默安裝自動化腳本:核心參數、用戶建立、環境變數一鍵配置

     編輯:Oracle 資料庫基礎

手動配置 Linux 核心參數、建立 Oracle 用戶/群組、設定環境變數極易遺漏。本文提供經生產驗證的 Bash 自動化腳本,涵蓋主機名設定、核心參數寫入 /etc/sysctl.conf、資源限制 /etc/security/limits.conf、PAM 認證、用戶/目錄建立、環境變數注入,實現 Oracle 先決條件一鍵就緒。

一、 腳本核心功能矩陣

二、 完整腳本內容 (install_oracle_prereq.sh)

#!/bin/bash
# Oracle 11g/12c/19c Linux 先決條件自動化配置
# 用法: chmod +x install_oracle_prereq.sh && ./install_oracle_prereq.sh

set -euo pipefail

# ---------- 1. 互動輸入(含預設值) ----------
read -p "Please enter HOSTNAME [oracle]: " HOSTNAME
HOSTNAME=${HOSTNAME:-oracle}

read -p "Please enter ORACLE_BASE [/u01/app/oracle]: " ORACLE_BASE
ORACLE_BASE=${ORACLE_BASE:-/u01/app/oracle}

read -p "Please enter ORACLE_HOME name [product/19.0.0/dbhome_1]: " OH_NAME
OH_NAME=${OH_NAME:-product/19.0.0/dbhome_1}
ORACLE_HOME="${ORACLE_BASE}/${OH_NAME}"

read -p "Please enter ORACLE_SID [ORCL]: " ORACLE_SID
ORACLE_SID=${ORACLE_SID:-ORCL}

ORACLE_USER=oracle
SYSCTL_CONF=/etc/sysctl.conf
LIMITS_CONF=/etc/security/limits.conf
PAM_LOGIN=/etc/pam.d/login
PROFILE=/etc/profile
BASH_PROFILE="${ORACLE_HOME}/.bash_profile"

IPADDR=$(ip -o -4 addr show dev eth0 | awk '{print $4}' | cut -d/ -f1)
HOSTS_FILE=/etc/hosts
NETWORK_CONF=/etc/sysconfig/network

# ---------- 2. 主機名與 /etc/hosts ----------
echo "=== 設定主機名 ==="
grep -v "^HOSTNAME=" "${NETWORK_CONF}" > "${NETWORK_CONF}.tmp" && mv "${NETWORK_CONF}.tmp" "${NETWORK_CONF}"
echo "HOSTNAME=${HOSTNAME}" >> "${NETWORK_CONF}"
echo "${IPADDR} ${HOSTNAME}" >> "${HOSTS_FILE}"
hostnamectl set-hostname "${HOSTNAME}" 2>/dev/null || hostname "${HOSTNAME}"

# ---------- 3. 用戶與目錄 ----------
echo "=== 建立用戶/群組/目錄 ==="
mkdir -p "${ORACLE_BASE}"
groupadd -f oinstall
groupadd -f dba
id -u "${ORACLE_USER}" &>/dev/null || useradd -g oinstall -G dba -d "${ORACLE_HOME}" -m -s /bin/bash "${ORACLE_USER}"
chown -R "${ORACLE_USER}:oinstall" "${ORACLE_BASE}"

# ---------- 4. 核心參數 ----------
echo "=== 寫入核心參數 ==="
cat >> "${SYSCTL_CONF}" <<'EOF'
# Oracle Kernel Parameters
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 6815744
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048576
EOF
/sbin/sysctl -p

# ---------- 5. 資源限制 ----------
echo "=== 設定 limits.conf ==="
cat >> "${LIMITS_CONF}" <> "${PAM_LOGIN}"

# ---------- 7. 環境變數 ----------
echo "=== 寫入環境變數 ==="
cat >> "${PROFILE}" < "${BASH_PROFILE}" <

三、 關鍵參數說明與調整建議

階段操作項目關鍵檔案/指令
互動輸入主機名、ORACLE_BASE、ORACLE_HOME、ORACLE_SID、安裝用戶read 內建指令
網路身分修改 /etc/sysconfig/network、/etc/hosts 綁定 IP/主機名sed, echo
用戶/群組建立 oinstall、dba 群組;oracle 用戶、家目錄、擁有權groupadd, useradd, chown
核心參數shmall/shmmax/shmmni/sem/port_range/rmem/wmemcat >> /etc/sysctl.conf + sysctl -p
資源限制nproc/nofile soft/hard limitcat >> /etc/security/limits.conf
PAM 設定啟用 pam_limits.socat >> /etc/pam.d/login
環境變數/etc/profile、$ORACLE_HOME/.bash_profilecat >> ...

四、 執行後驗證清單

# 1. 核心參數生效
sysctl -a | grep -E 'shm|sem|file-max|ip_local_port_range|rmem|wmem'

# 2. 用戶限制
su - oracle -c "ulimit -a"

# 3. 環境變數
su - oracle -c "env | grep -E 'ORACLE|PATH|LD_LIBRARY|NLS'"

# 4. 目錄權限
ls -ld ${ORACLE_BASE} ${ORACLE_HOME}

# 5. 主機名解析
ping -c 2 ${HOSTNAME}
getent hosts ${HOSTNAME}

五、 進階:整合至 Ansible/RPM/雲初始化

  • 將腳本模組化為 Ansible Role,變數化參數,支援多節點 RAC 部署
  • 打包為 RPM 套件,Requires: oracleasm-support, libaio, compat-libstdc++
  • 雲環境 (OCI/AWS/Azure) 使用 cloud-init user-data 注入,實現實例啟動即就緒

自動化先決條件配置是穩定、可重現 Oracle 部署的基石,建議納入基礎設施即代碼 (IaC) 體系統一管理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數推薦值調整依據
kernel.shmmax物理記憶體 50%~80% (bytes)單一共享記憶體段最大值,需 > SGA_TARGET
kernel.shmallshmmax / PAGE_SIZE (通常 4096)系統總共享記憶體頁數上限
kernel.sem250 32000 100 128semmsl semmns semopm semmni,支援高併發進程
fs.file-max6815744 以上系統級檔案描述符上限
net.ipv4.ip_local_port_range9000 65500避開保留埠,擴大可用暫時埠池
net.core.rmem_max/wmem_max4MB / 1MBSocket 緩衝區上限,提升高延遲網路傳輸