Oracle 11gR2 (11.2.0.1) 在 RHEL 5/6 (x86/x86_64) 上的靜默安裝,透過 Response File 實現零圖形介面、可腳本化、可版控的標準化部署。本文涵蓋 OS 前置條件、Kernel 參數、使用者/群組、目錄佈局、環境變數、軟體解壓、Response File 定製、靜默安裝/建庫/監聽配置、服務註冊與後續優化,適合納入 Ansible/Kickstart/自動化流水線。
# 即時生效
setenforce 0
service iptables stop
# 永久生效
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config
chkconfig iptables off
for svc in rhnsd isdn avahi-daemon avahi-dnsconfd bluetooth cpuspeed hidd ip6tables mcstrans pcscd gpm xinetd portmap yum-updatesd restorecond setroubleshoot libvirtd xendomains xend sendmail cups; do
chkconfig --level 2345 $svc off
done
# /etc/fstab 修改
tmpfs /dev/shm tmpfs defaults,size=16G 0 0 # 視實體 RAM 調整
mount -o remount /dev/shm
df -h /dev/shm # 驗證
# 必要套件清單 (RHEL 5/6 通用)
yum install -y binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel \
expat gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers \
libaio libaio-devel libgcc libstdc++ libstdc++-devel make sysstat \
unixODBC unixODBC-devel
# 64位系統需同時安裝 32位相容套件
yum install -y glibc.i686 libaio.i686 libgcc.i686 libstdc++.i686
# 群組 (GID 建議固定,利於多節點一致)
groupadd -g 1001 oinstall
groupadd -g 1002 dba
groupadd -g 1003 asmadmin
groupadd -g 1004 asmdba
# 使用者 (UID 固定,家目錄自建)
useradd -u 1001 -g oinstall -G dba,asmdba -d /home/oracle oracle
echo "oracle:OraclePasswd123" | chpasswd
# 目錄佈局
mkdir -p /opt/oracle/11.2.0 /home/oracle/inventory
chown -R oracle:oinstall /opt/oracle /home/oracle
chmod -R 775 /opt/oracle /home/oracle
# 經驗值,視實體 RAM/CPU 調整
kernel.shmall = 2097152
kernel.shmmax = 536870912 # 建議 >= 實體 RAM 一半
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.aio-max-nr = 1048576
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
# 套用
/sbin/sysctl -p
RHEL 6 注意:
sysctl -p可能報net.bridge.bridge-nf-call-*未知鍵值錯誤,屬內核模組未載入,不影響 Oracle 安裝,可忽略。
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
/etc/pam.d/login 末行加入:session required pam_limits.so
umask 022
export ORACLE_HOSTNAME=localhost.localdomain
export ORACLE_BASE=/opt/oracle
export ORACLE_HOME=$ORACLE_BASE/11.2.0
export ORACLE_SID=ge01
export PATH=.:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$ORACLE_HOME/jdk/bin:$PATH
export LC_ALL="en_US"
export LANG="en_US"
export NLS_LANG="AMERICAN_AMERICA.ZHS16GBK"
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
# 以 oracle 用戶
cd /home/oracle
unzip -q linux.x64_11gR2_database_1of2.zip
unzip -q linux.x64_11gR2_database_2of2.zip
chown -R oracle:oinstall /home/oracle/database
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
DECLINE_SECURITY_UPDATES=true
ORACLE_HOSTNAME=localhost.localdomain
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/home/oracle/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/opt/oracle/11.2.0
ORACLE_BASE=/opt/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=dba
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE
oracle.install.db.config.starterdb.globalDBName=ge01
oracle.install.db.config.starterdb.SID=ge01
oracle.install.db.config.starterdb.memoryLimit=40
oracle.install.db.config.starterdb.password.ALL=OraclePasswd123
[GENERAL]
RESPONSEFILE_VERSION="11.2"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE="typical"
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START="LISTENER"
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_PROTOCOLS={"TCP;1521"}
[GENERAL]
RESPONSEFILE_VERSION="11.2.0"
OPERATION_TYPE="createDatabase"
[CREATEDATABASE]
GDBNAME="ge01"
SID="ge01"
TEMPLATENAME="General_Purpose.dbc"
SYSPASSWORD="OraclePasswd123"
SYSTEMPASSWORD="OraclePasswd123"
EMCONFIGURATION="LOCAL"
DBSNMPPASSWORD="OraclePasswd123"
CHARACTERSET="ZHS16GBK"
MEMORYPERCENTAGE="40"
# 1. 軟體安裝 (2-5 分鐘)
cd /home/oracle/database
./runInstaller -silent -force -noconfig -responseFile /home/oracle/db_install.rsp
# 監控日誌
tail -100f $ORACLE_BASE/oraInventory/logs/installActions*.log
# 2. 執行 root 腳本 (需 root)
/opt/oracle/oraInventory/orainstRoot.sh
/opt/oracle/11.2.0/root.sh
# 3. 靜默配置監聽
netca /silent /responsefile /home/oracle/netca.rsp
lsnrctl status
# 4. 靜默建庫
dbca -silent -responseFile /home/oracle/dbca.rsp
# 將第三欄 N 改為 Y
ge01:/opt/oracle/11.2.0:Y
sed -i 's/ORACLE_HOME_LITENER/ORACLE_HOME_LISTENER/g' $ORACLE_HOME/bin/dbstart
sed -i 's/ORACLE_HOME_LITENER/ORACLE_HOME_LISTENER/g' $ORACLE_HOME/bin/dbshut
#!/bin/bash
# chkconfig: 345 51 49
# description: Oracle 11g Database
ORACLE_HOME=/opt/oracle/11.2.0
ORACLE_OWNER=oracle
ORACLE_LOCK=/var/lock/subsys/oracle
case "$1" in
start)
echo -n "Starting Oracle: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"
touch $ORACLE_LOCK
echo
;;
stop)
echo -n "Shutting down Oracle: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut"
rm -f $ORACLE_LOCK
echo
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
esac
exit 0
chmod 744 /etc/init.d/oracle11g
chkconfig --add oracle11g
chkconfig --level 35 oracle11g on
sqlplus / as sysdba <
lsnrctl status 監聽正常,服務 ge01 狀態 READY。sqlplus system/OraclePasswd123@ge01 連線成功。SELECT INSTANCE_NAME, STATUS FROM V$INSTANCE; 顯示 OPEN。ps -ef | grep pmon 進程存在。reboot → 確認資料庫自動 OPEN。