此脚本将帮助您在安装 Oracle11g 到 CentOS 6.3(i386/x86_64) 系统之前,预设系统内核参数、安装Oracle11g系统所需要Linux系统包。 安装好CentOS 6.3(如服务器只做ORACLE数据库使用,建议以Mini desktop方式安装)后,以root用户登录系统,执行以下命令: #s
此脚本将帮助您在安装 Oracle11g 到 CentOS 6.3(i386/x86_64) 系统之前,预设系统内核参数、安装Oracle11g系统所需要Linux系统包。
安装好CentOS 6.3(如服务器只做ORACLE数据库使用,建议以Mini desktop方式安装)后,以root用户登录系统,执行以下命令:
#sh Oracle11gPreInstaller.sh
按照脚本提示一步步完成安装前的预设工作,执行完后重新启动系统,以非root用户(脚本会提示你创建安装ORACLE11g所需的用户名)登录系统,转至ORACLE11g安装文件所在的目录,执行一下命令:
$./runInstaller -jreLoc /usr/lib/jvm/java-1.6.0-openjdk-1.6.0.0/jre
之所以加上 jreLoc 参数,是因为ORACLE默认安装时用自带的jre会出现中文乱码,所以这里用系统的jre,保证安装界面为中文显示。32位系统经测试安装ORACLE11g时,会提示缺少 pdksh-5.2.14 这个包,直接忽略(系统已经安装了ksh-xxx 包)就可以正常安装,64位系统也会提示缺少大概7、8个包的样子,也直接忽略(这个是因为ORACLE11g 检查包的时候带上了版本号,而我们提前安装的包的版本号比它检查的要新)就可以。
安装完成后,默认防火墙只允许22端口(ssh),所以还需用 gedit 打开 /etc/sysconfig/iptables ,找到
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT 这行,在其后添加:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1158 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 1521 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 5560 -j ACCEPT
这样外界就可以访问 ORACLE11g 相关服务了,如果需要开机自动登录、自动运行ORACLE相关服务,请以root用户运行一次以下脚本(再次启动服务器时ORACLE将自动运行):
#sh Oracle11gAutoStart.sh
#!/bin/bash
# Script Name: Oracle11gPreinstaller.sh
# Description: prepare works before install oracle 11g on CentOS 6.3(i386/x86_64)
# Author: xie tanghua - www.thxie.cn
# Create Date: 2012-09/05
MemTotal=$(($(grep MemTotal /proc/meminfo | sed 's/\w*:\s*\([0-9]*\).*/\1/')/1024))
SwapTotal=$(($(grep SwapTotal /proc/meminfo | sed 's/\w*:\s*\([0-9]*\).*/\1/')/1024))
ReqSwap=$((16*1024)) #16G
vshmmax=$(($MemTotal*1024*1024/2))
TmpSpace=$(df -k /tmp | grep -v 可用 | awk '{print int($4)}')
DiscSpace=$(df -k / | grep -v 可用 | awk '{print int($4)}')
euname=$(awk -F: '{print $1}' /etc/passwd)
uexists=n
f=4 #默认内核参数放大4倍
function pinfo(){
if [ $1 -ge $2 ]; then
echo -e "\e[1;32m[ OKay ]\e[0m"
else
echo -e "\e[1;31m[failed]\e[0m"
echo "----------------------------------------"
printf "%-20s %-20s\n" "$3" "$4"
printf "%-20s %-20s\n" $1 $5
echo "----------------------------------------"
fi
}
function yumInstall(){
if [ "$1" = "localInstall" ]; then
yum --disablerepo=\* --enablerepo=c6-media -y install binutils-* compat-libstdc++-33-* elfutils-libelf-* elfutils-libelf-devel-* elfutils-libelf-devel-static-* gcc-* gcc-c++-* glibc-* glibc-common-* glibc-devel-* glibc-headers-* kernel-headers-* ksh-* libaio-* libaio-devel-* libgcc-* libgomp-* libstdc++-* libstdc++-devel-* make-* numactl-devel-* sysstat-* unixODBC-*
else
yum -y install binutils-* compat-libstdc++-33-* elfutils-libelf-* elfutils-libelf-devel-* elfutils-libelf-devel-static-* gcc-* gcc-c++-* glibc-* glibc-common-* glibc-devel-* glibc-headers-* kernel-headers-* ksh-* libaio-* libaio-devel-* libgcc-* libgomp-* libstdc++-* libstdc++-devel-* make-* numactl-devel-* sysstat-* unixODBC-*
fi
}
echo -n "Checking Memeory Requirements:"
pinfo $MemTotal 1024 "Real Memory(MB)" "Required Memory(MB)" 1024+
# Checking Swap Space Requirements
if [ $MemTotal -lt $ReqSwap ]; then
let ReqSwap=$MemTotal*2
fi
echo -n "Checking Swap Space Requirements:"
pinfo $SwapTotal $ReqSwap "Real Swap Space(MB)" "Required Swap Space(MB)" $ReqSwap
echo -n "Checking /tmp Space Requirements:"
pinfo $TmpSpace 1048576 "Real /tmp Space(MB)" "Required /tmp Space(MB)" 1024+
echo -n "Checking disc available Space Requirements:"
pinfo $DiscSpace 6291456 "Real Disc Space(MB)" "Required Disc Space(MB)" 6144+
echo "Checking Packages Requirements:"
echo "----------------------------------------"
rpm -q binutils-* compat-libstdc++-33-* elfutils-libelf-* elfutils-libelf-devel-* elfutils-libelf-devel-static-* gcc-* gcc-c++-* glibc-* glibc-common-* glibc-devel-* glibc-headers-* kernel-headers-* ksh-* libaio-* libaio-devel-* libgcc-* libgomp-* libstdc++-* libstdc++-devel-* make-* numactl-devel-* sysstat-* unixODBC-* unixODBC-devel-* | sed 's/\(package .* is not installed\)/[\1]/'
echo "----------------------------------------"
echo -e "\e[1;31m"
echo "Please select install mode:"
echo "1:Install from cd/dvd;"
echo "2:Install from the path which include centos media(xxx.iso);"
echo "3:Install from network;"
read im
echo -e "\e[0m"
yum clean all
case $im in
1) typeset -u sf # convert lower to upper
read -p "Please insert CentOS DVD and input 'ok'(case-insensitive).If you want install Packages directly from network repository then press enter:" sf
if [ $sf = OK ]; then
echo -e "\e[1;32mStarting install/update required Packages from local DVDs:\e[0m"
sed -i "s/^\s*\(file:\/\/\/\w*\/\w*\/\)//g" /etc/yum.repos.d/CentOS-Media.repo
[[ -d $(grep /dev/sr0 /proc/mounts | sed "s/\/dev\/sr0 \(\/media\/\w*\).*/\1/") ]] && umount /media/*
[[ ! -d /media/CentOS ]] && mkdir /media/CentOS
mount -o ro /dev/cdrom /media/CentOS
yumInstall "localInstall"
else
echo -e "\e[1;32mStarting install/update required Packages from network repository:\e[0m"
yumInstall
fi
;;
2) sed -i "s/^\s*\(file:\/\/\/\w*\/\w*\/\)//g" /etc/yum.repos.d/CentOS-Media.repo
[[ -d $(grep /dev/sr0 /proc/mounts | sed "s/\/dev\/sr0 \(\/media\/\w*\).*/\1/") ]] && umount /media/*
[[ ! -d /media/CentOS ]] && mkdir /media/CentOS
read -p "Please input CentOS media(xxx.iso) path:" mp
mount -o loop $mp /media/CentOS
yumInstall "localInstall"
;;
3) echo -e "\e[1;32mStarting install/update required Packages from network repository:\e[0m"
yumInstall
;;
esac
echo "Creating Required Operating System Groups and Users:"
/usr/sbin/groupadd oinstall
/usr/sbin/groupadd dba
echo "The Oracle Inventory group and OSDBA group created successful!"
read -p "Please input the oracle username that you want to create/use:" oname
for i in $euname
do
if [ $oname = $i ]; then
uexists=y
break
fi
done
if [ $uexists = y ]; then
/usr/sbin/usermod -g oinstall -G dba $oname
else
/usr/sbin/useradd -g oinstall -G dba $oname
fi
read -p "Please input y to modify the preuser password,input n is implied password is not changed." a
if [ $a = y ]; then
passwd $oname
fi
cat >>/etc/sysctl.conf<
kernel.shmmni = $(($f*4096))
kernel.sem = $(($f*250)) $(($f*32000)) $(($f*100)) $(($f*128))
fs.aio-max-nr = 1048576
fs.file-max = $(($f*6815744))
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = $(($f*262144))
net.core.rmem_max = $(($f*4194304))
net.core.wmem_default = $(($f*262144))
net.core.wmem_max = $(($f*1048576))
EOF
[ $vshmmax -ge 4294967295 ] && let vshmmax=4294967295
sed -i "s/\(kernel\.shmmax = \)\([0-9]*\)/\1$vshmmax/" /etc/sysctl.conf
/sbin/sysctl -p >/dev/null
cat >>/etc/security/limits.conf<
$oname soft nproc 2048
$oname hard nproc 16384
$oname soft nofile 1024
$oname hard nofile 65536
$oname soft stack 10240
EOF
read -p "Please input the Oracle installation path:" opath
[ -d $opath ] || mkdir -p $opath
chown -R $oname:oinstall $opath
chmod -R 775 $opath
read -p "Please input oracle sid:" sid
# su - $oname
# . ./.bash_profile
cat >>/home/$oname/.bash_profile<
ORACLE_BASE=$opath
ORACLE_SID=$sid
TMP=/tmp
TMPDIR=/tmp
NLS_DATE_FORMAT='YYYY-MM-DD HH24:MI:SS'
export ORACLE_BASE ORACLE_SID TMP TMPDIR NLS_DATE_FORMAT
umask 022
EOF
cat >>/etc/profile<
ORACLE_OWNER=$oname
export ORACLE_OWNER
EOF
echo "Please restart server, login as $oname and start install Oracle."
#!/bin/bash
# Script Name: Oracle11gAutoStart.sh
# Description: AutoStart oracle 11g on CentOS 6.3(i386/x86_64)
# Author: xie tanghua - www.thxie.cn
# Create Date: 2012-09/05
ORACLE_HOME=$(grep dbhome /etc/oratab | awk -F: '{print $2}')
echo -n "Change /etc/oratab settings:"
sed -i "s/\(.*\):\(N\)/\1:Y/" /etc/oratab
if [ $? -eq 0 ] ; then
echo -e "\e[1;32m[ OKay ]\e[0m"
else
echo -e "\e[1;31m[failed]\e[0m"
fi
cat >>/etc/profile<
ORACLE_HOME=$ORACLE_HOME
export ORACLE_HOME
EOF
# auto login
cat >/etc/gdm/custom.conf<
# GDM configuration storage
[daemon]
AutomaticLoginEnable=true
AutomaticLogin=$ORACLE_OWNER
TimedLoginEnable=true
TimedLogin=$ORACLE_OWNER
TimedLoginDelay=10
[security]
AllowRoot=false
[xdmcp]
[greeter]
[chooser]
[debug]
EOF
# auto start oracle 11g
cat >>/home/$ORACLE_OWNER/.bash_profile<
$ORACLE_HOME/bin/dbstart $ORACLE_HOME
$ORACLE_HOME/bin/emctl start dbconsole
EOF
echo "All jobs have done,please restart server."