背景
最近频繁在Centos7.3上安装oracle,设置基础安装环境工序太多,所以写了一个脚本起到一键初始化基础安装环境(更改主机名、关闭防火墙、禁用Selinx、配置用户和组、创建目录、更改核心参数,配置Oracle环境变量等),其实原理很简单,就是直接修改各个配置文件和核心参数,只不过比较繁琐。
不想看过程的直接跳到最倒数第二步【完整脚本】复制脚本内容到服务器创建执行脚本,
土豪或懒癌晚期的请直接点最后一步【脚本下载】下载脚本到服务器授权后直接执行
目录
修改系统参数/etc/security/limits.conf
修改ORACLE环境变量/home/oracle/.bash_profile
脚本注释
脚本注释分段注释,完整脚本见最下方
变量设置并赋值
如下所示,设置后续初始化所需变量并赋值,整个脚本仅且只能改动这一部分内容的值,其他部分内容请勿修改
hostname='database01' #主机名
oraclePasswd='111111' #安装数据库所需的oracle用户密码
oracle_dir='/u01' #安装oracle的最顶层目录,最好是挂载到根目录下的空目录,请确认空间足够
ORACLE_BASE='/u01/app' #数据库根目录 配置环境变量使用,注意变量名是大写
data_dir='/u01/app/oradate' #数据存放目录
oracle_home='/u01/app/oracle/product' #oracle的产品目录
ORACLE_SID='orcl' #数据库实例名 配置环境变量使用,注意是大写
修改主机名
根据给定变量的值修改主机名
hostnamectl set-hostname ${hostname}
关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
禁用selinux
临时将selinux设置为宽松模式,并禁用selinux,禁用需要重启服务器生效
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
创建所需用户、组目录
创建oracle用户和组,并根据第一步设置的变量${oraclePasswd}设置oracle用户的密码
根据${oracle_home}、${data_dir}、${oracle_dir}等变量创建所需目录
groupadd dba
groupadd oinstall
useradd -g oinstall -m oracle
gpasswd -a oracle dba
passwd oracle << XXG
${oraclePasswd}
${oraclePasswd}
XXG
echo "注意,这里可能会有错误提示:新的密码无效,无效的密码,密码是一个回文等,该错误可忽略"
sleep 5
echo "创建oracle相关目录"
mkdir -p ${oracle_home}
mkdir -p ${data_dir}
chown -R oracle:oinstall ${oracle_dir}
修改系统参数/etc/security/limits.conf
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/security/limits.conf /etc/security/limits_bake.conf << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/security/limits_bake.conf /etc/security/limits.conf << XXG
Y
XXG
echo "oracle soft nproc 2047" >>/etc/security/limits.conf
echo "oracle hard nproc 16384" >>/etc/security/limits.conf
echo "oracle soft nofile 1024" >>/etc/security/limits.conf
echo "oracle hard nofile 65536" >>/etc/security/limits.conf
修改系统参数/etc/pam.d/login
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/pam.d/login /etc/pam.d/login_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/pam.d/login_bak /etc/pam.d/login << XXG
Y
XXG
echo "session required /lib64/security/pam_limits.so" >>/etc/pam.d/login
echo "session required pam_limits.so" >>/etc/pam.d/login
echo "备份并修改/etc/sysctl.conf文件"
修改系统参数/etc/sysctl.conf
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/sysctl.conf /etc/sysctl_bak.conf << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/sysctl_bak.conf /etc/sysctl.conf << XXG
Y
XXG
echo "fs.file-max = 6815744" >>/etc/sysctl.conf
echo "fs.aio-max-nr = 1048576" >>/etc/sysctl.conf
echo "kernel.shmall = 2097152" >>/etc/sysctl.conf
echo "kernel.shmmax = 2147483648" >>/etc/sysctl.conf
echo "kernel.shmmni = 4096" >>/etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >>/etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65500" >>/etc/sysctl.conf
echo "net.core.rmem_default = 4194304" >>/etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >>/etc/sysctl.conf
echo "net.core.wmem_default = 262144" >>/etc/sysctl.conf
echo "net.core.wmem_max = 1048576" >>/etc/sysctl.conf
echo "使sysctl.conf立即生效"
sysctl -p
修改系统环境变量etc/profile
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/profile /etc/profile_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/profile_bak /etc/profile << XXG
Y
XXG
echo "if [ \$USER = \"oracle\" ]; then" >>/etc/profile
echo "if [ \$SHELL = \"/bin/ksh\" ]; then" >>/etc/profile
echo "ulimit -p 16384" >>/etc/profile
echo "ulimit -n 65536" >>/etc/profile
echo "else " >>/etc/profile
echo "ulimit -u 16384 -n 65536" >>/etc/profile
echo "fi" >>/etc/profile
echo "fi" >>/etc/profile
修改ORACLE环境变量/home/oracle/.bash_profile
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /home/oracle/.bash_profile /home/oracle/.bash_profile_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /home/oracle/.bash_profile_bak /home/oracle/.bash_profile << XXG
Y
XXG
echo "修改oracle环境变量"
echo "umask 022" >>/home/oracle/.bash_profile
echo "export ORACLE_BASE="${ORACLE_BASE} >>/home/oracle/.bash_profile
echo "export ORACLE_HOME=\$ORACLE_BASE/oracle/product/11.2.0/dbhome_1" >>/home/oracle/.bash_profile
echo "export ORACLE_SID="${ORACLE_SID} >>/home/oracle/.bash_profile
echo "export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin" >>/home/oracle/.bash_profile
echo "export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/usr/lib" >>/home/oracle/.bash_profile
验证结果
echo "修改后的主机名:"`hostname`
echo "selinux状态:"`getenforce`
echo "防火墙状态:"`systemctl status firewalld|grep "Active"|awk '{print $3}'`
echo '====================新增的/etc/security/limits.conf参数==================='
cat /etc/security/limits.conf |grep oracle
echo '====================新增的/etc/pam.d/login会话参数========================'
cat /etc/pam.d/login |grep "session required"
echo '====================修改后的内核参数====================================='
sysctl -p
echo '====================新增的系统变量======================================='
tail -8 /etc/profile
echo '====================oracle环境变量数====================================='
tail /home/oracle/.bash_profile|grep export
完整脚本
#! /bin/bash
#请按需求修改以下7个变量
hostname='database01' #主机名
oraclePasswd='111111' #安装数据库所需的oracle用户密码
oracle_dir='/u01' #安装oracle的最顶层目录,最好是挂载到根目录下的空目录,请确认空间足够
ORACLE_BASE='/u01/app' #数据库根目录 配置环境变量使用,注意变量名是大写
data_dir='/u01/app/oradate' #数据存放目录
oracle_home='/u01/app/oracle/product' #oracle的产品目录
ORACLE_SID='orcl' #数据库实例名 配置环境变量使用,注意是大写
echo "====================开始配置,以下内容请勿修改============================="##
echo "修改并验证主机名"
hostnamectl set-hostname ${hostname}
sleep 1
echo "查看并关闭防火墙"
systemctl stop firewalld
systemctl disable firewalld
sleep 1
echo "临时调整selinux为宽松模式,并禁用Selinux,禁用需重启后生效,可不重启"
setenforce 0
sed -i "s/SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
echo "======================创建安装oracle所需的用户、组以及目录==========================="
groupadd dba
groupadd oinstall
useradd -g oinstall -m oracle
gpasswd -a oracle dba
passwd oracle << XXG
${oraclePasswd}
${oraclePasswd}
XXG
echo "注意,这里可能会有错误提示:新的密码无效,无效的密码,密码是一个回文等,该错误可忽略"
sleep 5
echo "创建oracle相关目录"
mkdir -p ${oracle_home}
mkdir -p ${data_dir}
chown -R oracle:oinstall ${oracle_dir}
echo "================修改内核参数================================="
echo "备份并修改/etc/security/limits.conf"
sleep 1
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/security/limits.conf /etc/security/limits_bake.conf << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/security/limits_bake.conf /etc/security/limits.conf << XXG
Y
XXG
echo "oracle soft nproc 2047" >>/etc/security/limits.conf
echo "oracle hard nproc 16384" >>/etc/security/limits.conf
echo "oracle soft nofile 1024" >>/etc/security/limits.conf
echo "oracle hard nofile 65536" >>/etc/security/limits.conf
echo "备份并修改/etc/pam.d/login文件"
sleep 1
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/pam.d/login /etc/pam.d/login_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/pam.d/login_bak /etc/pam.d/login << XXG
Y
XXG
echo "session required /lib64/security/pam_limits.so" >>/etc/pam.d/login
echo "session required pam_limits.so" >>/etc/pam.d/login
echo "备份并修改/etc/sysctl.conf文件"
sleep 1
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/sysctl.conf /etc/sysctl_bak.conf << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/sysctl_bak.conf /etc/sysctl.conf << XXG
Y
XXG
echo "fs.file-max = 6815744" >>/etc/sysctl.conf
echo "fs.aio-max-nr = 1048576" >>/etc/sysctl.conf
echo "kernel.shmall = 2097152" >>/etc/sysctl.conf
echo "kernel.shmmax = 2147483648" >>/etc/sysctl.conf
echo "kernel.shmmni = 4096" >>/etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >>/etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 9000 65500" >>/etc/sysctl.conf
echo "net.core.rmem_default = 4194304" >>/etc/sysctl.conf
echo "net.core.rmem_max = 4194304" >>/etc/sysctl.conf
echo "net.core.wmem_default = 262144" >>/etc/sysctl.conf
echo "net.core.wmem_max = 1048576" >>/etc/sysctl.conf
echo "使sysctl.conf立即生效"
sysctl -p
sleep 1
echo "备份并修改/etc/profile文件"
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /etc/profile /etc/profile_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /etc/profile_bak /etc/profile << XXG
Y
XXG
echo "if [ \$USER = \"oracle\" ]; then" >>/etc/profile
echo "if [ \$SHELL = \"/bin/ksh\" ]; then" >>/etc/profile
echo "ulimit -p 16384" >>/etc/profile
echo "ulimit -n 65536" >>/etc/profile
echo "else " >>/etc/profile
echo "ulimit -u 16384 -n 65536" >>/etc/profile
echo "fi" >>/etc/profile
echo "fi" >>/etc/profile
echo "====================设置oracle用户环境变量============================="
##备份源文件,防止错误修改不能还原,如果存在则不覆盖
cp -i /home/oracle/.bash_profile /home/oracle/.bash_profile_bak << XXG
N
XXG
## 将当前文件还原为源文件,以防错误参数导致脚本二次执行时配置项重复
cp -i /home/oracle/.bash_profile_bak /home/oracle/.bash_profile << XXG
Y
XXG
echo "修改oracle环境变量"
echo "umask 022" >>/home/oracle/.bash_profile
echo "export ORACLE_BASE="${ORACLE_BASE} >>/home/oracle/.bash_profile
echo "export ORACLE_HOME=\$ORACLE_BASE/oracle/product/11.2.0/dbhome_1" >>/home/oracle/.bash_profile
echo "export ORACLE_SID="${ORACLE_SID} >>/home/oracle/.bash_profile
echo "export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin" >>/home/oracle/.bash_profile
echo "export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/usr/lib" >>/home/oracle/.bash_profile
echo ""
echo ""
echo ""
echo "===================开始验证=============================="
sleep 2
echo "修改后的主机名:"`hostname`
echo "selinux状态:"`getenforce`
echo "防火墙状态:"`systemctl status firewalld|grep "Active"|awk '{print $3}'`
echo '====================新增的/etc/security/limits.conf参数==================='
cat /etc/security/limits.conf |grep oracle
echo '====================新增的/etc/pam.d/login会话参数========================'
cat /etc/pam.d/login |grep "session required"
echo '====================修改后的内核参数====================================='
sysctl -p
echo '====================新增的系统变量======================================='
tail -8 /etc/profile
echo '====================oracle环境变量数====================================='
tail /home/oracle/.bash_profile|grep export