主腳本 install.sh 依序調用五大模組,採冪等設計 (重複執行不報錯、不破壞現狀)。
#!/bin/bash
ADDGROUPS="oinstall dba"
ADDUSERS="oracle"
for group in $ADDGROUPS; do
if ! grep -q "^$group:" /etc/group; then
groupadd $group
echo "Add new group $group"
else
echo "Group $group already existed"
fi
done
for user in $ADDUSERS; do
if ! id $user &>/dev/null; then
useradd $user
echo "Add new user $user"
else
echo "User $user already existed"
fi
done
usermod -g oinstall -G dba oracle && echo "Modify oracle account success" || echo "Modify oracle account failure"
#!/bin/bash
ORACLE_FILE_BASE="/u01/app/oracle"
ORACLE_FILE_VAR="/var/opt/oracle"
ORACLE_FILE_HOME="$ORACLE_FILE_BASE/product/10.2.0/db_1"
for dir in $ORACLE_FILE_BASE $ORACLE_FILE_VAR $ORACLE_FILE_HOME; do
if [ -d "$dir" ]; then
echo "Directory $dir already existed"
else
mkdir -p "$dir"
chown -R oracle:dba "$dir"
echo "Create and chown $dir success"
fi
done
#!/bin/bash
PROFILES="/home/oracle/.bashrc"
for PROFILE in $PROFILES; do
if [ -f "$PROFILE" ] && ! grep -q "ORACLE_BASE" "$PROFILE"; then
cat >> "$PROFILE" << 'END'
# Oracle configure profile parameters
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export PATH=$ORACLE_HOME/bin:$PATH
export ORACLE_OWNER=oracle
export ORACLE_SID=orcl
export ORACLE_TERM=vt100
export THREADS_FLAG=native
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LANG=en_US
END
echo "Add Oracle profile to $PROFILE success"
else
echo "Oracle profile already existed in $PROFILE"
fi
done
#!/bin/bash
LIMITS_FILE="/etc/security/limits.conf"
if [ -f "$LIMITS_FILE" ] && ! grep -q "oracle soft nofile" "$LIMITS_FILE"; then
cat >> "$LIMITS_FILE" << 'END'
# Oracle configure shell parameters
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384
END
echo "Add limits.conf success"
else
echo "limits.conf already configured"
fi
#!/bin/bash
SYSCTL_FILE="/etc/sysctl.conf"
RCLOCAL_FILE="/etc/rc.local"
if [ -f "$SYSCTL_FILE" ] && ! grep -q "kernel.shmmax" "$SYSCTL_FILE"; then
cat >> "$SYSCTL_FILE" << 'END'
# Oracle configure kernel parameters
kernel.shmmax = 4294967296
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144
END
/sbin/sysctl -p
echo "sysctl.conf updated"
elif [ -f "$RCLOCAL_FILE" ] && ! grep -q "kernel.shmmax" "$RCLOCAL_FILE"; then
# 兼容無 sysctl.conf 系統
cat >> "$RCLOCAL_FILE" << 'END'
echo 536870912 > /proc/sys/kernel/shmmax
echo 4096 > /proc/sys/kernel/shmmni
echo 2097152 > /proc/sys/kernel/shmall
echo "250 32000 100 128" > /proc/sys/kernel/sem
echo 65536 > /proc/sys/fs/file-max
echo "1024 65000" > /proc/sys/net/ipv4/ip_local_port_range
END
. $RCLOCAL_FILE
echo "rc.local updated"
else
echo "Kernel parameters already configured"
fi
.sh 放同一目錄,賦權 chmod +x *.sh。./install.sh。source ~/.bashrc 驗證環境變數。備註:核心參數數值針對 1GB 記憶體機器,生產環境請依實際記憶體 (建議 SGA 佔 60-70%) 計算調整 shmmax、shmall。