MyException - 我的异常网
当前位置:我的异常网» 操作系统 » centos 七 静默部署oracle 11g

centos 七 静默部署oracle 11g

www.MyException.Cn  网友分享于:2013-11-16  浏览:0次
centos 7 静默部署oracle 11g

 本文地址:

http://peihexian.iteye.com/blog/2397975

 朋友请求帮忙在linux下面部署oracle 11.2,折腾了两天,整理下脚本以备后用。

1.准备工作

 centos 7 安装时建立一个root以外的账户,我本地虚拟机测试时只选择了最小安装,也没有图形界面,也没有其他账户,在安装完依赖包以后重启时会要求我建立一个root以外的管理员账号,要是linux已经安装完了也无所谓,看到提示时同意许可协议再按提示建账号也是可以的。

 

2.安装过程

centos 7用的是firewalld防火墙,不是iptables,先禁用firewalld防火墙,后期需要启用时注意放开1521端口。

#systemctl stop firewalld.service
systemctl stop firewalld
systemctl disable firewalld

 

3.因为我的脚本是在windows 里面编辑的,在通过ssh上传到linux时运行脚本用不了,需要通过dos2unix转一下格式,所以先安装一下dos2unix。

yum install dos2unix 

 另外后面解压缩oracle linux 安装zip需要用unzip解压缩工具,同样也安装一下

yum install unzip

 

4. 上传oracle for linux 两个压缩zip文件到linux里面的/tmp目录中,解压缩准备使用

cd /tmp

unzip linux.x64_11gR2_database_1of2.zip

unzip linux.x64_11gR2_database_2of2.zip

 解压缩以后会在/tmp里面生成database目录。

 

5.运行静默安装脚本1,用来创建oracle用户及dba,oinstall等组,修改oracle用户.bash_profile里面的环境变量等参数的脚本,vi /tmp/oracle_install.sh  ,脚本内容如下

 

#!/bin/bash
# oracle 11g R2 for linux 安装辅助脚本
# Redkey
# version 1.2
# date 2017.10.28
#定义常量
SYSCTL=/etc/sysctl.conf
LIMITS=/etc/security/limits.conf
PAM=/etc/pam.d/login
PROFILE=/etc/profile
BASH_PROFILE=/home/oracle/.bash_profile
#循环变量
i=1
#定义显示颜色
#颜色定义 信息(33黄色) 警示(31红色) 过程(36浅蓝)
#判断执行用户是否root
isroot()
{
    if [ $USER != "root" ];then
        echo -e "\n\e[1;31m the user must be root,and now you user is $USER,please su to root. \e[0m"
        exit4
    else
        echo -e "\n\e[1;36m check root ... OK! \e[0m"
    fi
}
#挂在光盘到/mnt/cdrom目录下
mount_cdrom()
{
echo -e "\n\e[1;31m please insert RHEL to CDROM,press any key ...\e[0m"
read -n 1
if [ -d /mnt/cdrom ];then
     mount -t auto -o ro /dev/cdrom /mnt/cdrom
else
    mkdir -p /mnt/cdrom
    mount -t auto -o ro /dev/cdrom /mnt/cdrom
fi
if [ $? -eq 0 ];then
    echo -e "\n\e[1;36m CDROM mount on /mnt/cdrom ... OK! \e[0m"
fi
}
#设置yum本地光盘源
yum_repo()
{
    rm -rf /etc/yum.repos.d/* && cat <<EOF >> /etc/yum.repos.d/Server.repo
[Server]
name=MyRPM
baseurl=file:///mnt/cdrom/Server
enabled=1
gpgkey=file:///mnt/cdrom/RPM-GPG-KEY-redhat-release
EOF
if [ $? -eq 0 ];then
echo -e "\n\e[1;36m  /etc/yum.repos.d/Server.repo  ... OK! \e[0m"
fi
}
#添加oracle用户,添加oracle用户所属组oinstall及附加组dba
ouseradd()
{
    if [[ `grep "oracle" /etc/passwd` != "" ]];then
    userdel -r oracle
    fi
    if [[ `grep "oinstall" /etc/group` = "" ]];then
        groupadd oinstall
    fi
    if [[ `grep "dba" /etc/group` = "" ]];then
        groupadd dba
    fi
    useradd oracle -g oinstall -G dba && echo $1 |passwd oracle --stdin
    if [ $? -eq 0 ];then
        echo -e "\n\e[1;36m oracle's password updated successfully  --- OK! \e[0m"
    else
        echo -e "\n\e[1;31m oracle's password set faild.   --- NO!\e[0m"
    fi
}
#检查oracle所需软件包并安装
packagecheck()
{
for package in binutils compat-libcap1 compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libgcc libstdc++ libstdc++-devel libaio libaio-devel make sysstat unzip elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static kernel-headers unixODBC unixODBC-devel 
    rpm -q $package 2> /dev/null
    if [ $? != 0 ];then
        yum -y install $package
        echo  -e "\n\e[1;36m $package is already installed ... OK! \e[0m"
    fi
done
}
#安装桌面套件 X Window System / Desktop
xdesk()
{
    LANG=C yum -y groupinstall "X Window System" "Desktop"
    if [ $? -eq 0 ];then
        echo  -e "\n\e[1;36m $package is already installed ... OK! \e[0m"
    fi
}
# 设置内核参数
kernelset()
{
    cp $SYSCTL{,.bak} && cat <<EOF >>$SYSCTL
fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmall = 2097152
kernel.shmmax = 4294967295
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
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 = 1048575
EOF
    if [ $? -eq 0 ];then
        echo -e "\n\e[1;36m kernel parameters updated successfully --- OK! \e[0m"
    fi
sysctl -p
}
#设置oracle资源限制
oralimit()
{
    cp $LIMITS{,.bak} && cat <<EOF >> $LIMITS
oracle      soft    nproc   2047
oracle      hard    nproc   16384
oracle      soft    nofile  1024
oracle      hard    nofile  65536
oracle      soft    stack   10240
EOF
    if [ $? -eq 0 ];then
        echo  -e "\n\e[1;36m $LIMITS updated successfully ... OK! \e[0m"
    fi
}
#设置login文件
setlogin()
{
    cp $PAM{,.bak} && cat <<EOF >>$PAM
session     required    pam_limits.so
EOF
    if [ $? -eq 0 ];then
        echo -e "\n\e[1;36m  $PAM updated successfully ... OK! \e[0m"
    fi
}
#设置profile文件
setprofile()
{
    cp $PROFILE{,.bak} && cat <<EOF >>$PROFILE
if [ $USER = "oracle" ];then
    if [ $SHELL = "/bin/ksh" ];then
        ulimit -p 16384
        ulimit -n 65536
    else
        ulimit -u 16384 -n 65536
    fi
fi
EOF
    if [ $? -eq 0 ];then
        echo -e "\n\e[1;36m  $PROFILE updated successfully ... OK! \e[0m"
    fi
}
#设置oracle的profile文件
setbash_profile()
{
    cp $BASH_PROFILE{,.bak} && cat <<EOF >> $BASH_PROFILE
umask 022
ORACLE_BASE=$1
ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
ORACLE_SID=$2
PATH=$ORACLE_HOME/bin/:$PATH
LANG=en_US.UTF-8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
EOF
    if [ $? -eq 0 ];then
        echo -e "\n\e[1;36m $BASH_PROFILE updated successfully ... OK! \e[0m"
    fi
. $BASH_PROFILE
}
#系统环境检查
oscheck()
{
#查看内存大小是否大于1G
echo -e "\n check MEM Size ..."
if [ `cat /proc/meminfo | grep MemTotal | awk '{print $2}'` -lt 1048576 ];then
    echo  -e "\n\e[1;33m Memory Small \e[0m"
    exit 1
else
    echo -e "\n\e[1;36m Memory checked PASS \e[0m"
fi
#查看tmp空间大小
echo -e "\n check tmpfs Size ..."
cp /etc/fstab{,.bak}
while true;do
if [ `df | awk '/tmpfs/ {print $2}'` -lt 1048576 ];then
    echo -e "\n\e[1;33m tmpfs Smaill \e[0m"
    sed -i '/tmpfs/s/defaults/defaults,size=1G/' /etc/fstab && mount -o remount /dev/shm
    if [ $? != 0 ];then
    i=i+1
        if [ $i -eq 3 ];then
            echo -e "\n\e[1;31m set tmpfs faild. \e[0m"
            exit 3
        fi
    else
        echo -e "\n\e[1;36 tmpfs updated successfully. \e[0m"
        break
    fi
else
    echo -e "\n\e[1;36m tmpfs checked PASS \e[0m"
    break
fi
done
}
#停止防火墙IPTABLES
service iptables stop
chkconfig iptables off
#关闭SELINUX
cp /etc/selinux/config{,.bak} && sed -i '/SELINUX/s/enforcing/disabled/;/SELINUX/s/permissive/disabled/'   /etc/selinux/config
setenforce 0
#执行以上函数
isroot
oscheck
#yum_repo
#mount_cdrom
packagecheck
xdesk
kernelset
oralimit
setlogin
setprofile
echo -e "\n\e[1;33m please input oracle's user passwd: \e[0m"
read oraclepw
ouseradd $oraclepw
setbash_profile
echo -e "\n\e[1;33m please input oracle install PATH(default /oracle/db) \e[0m"
read oraclepath
if [ -z $oraclepath ];then
    oraclepath=/oracle/db
fi
echo -e "\n\e[1;33m  please input oracle_sid (default police) \e[0m"
read orasid
if [ -z orasid ];then
    orasid=police
fi
setbash_profile $oraclepath $orasid
mkdir -p $oraclepath && chown -R oracle:oinstall $oraclepath && chmod -R 755 $oraclepath
unset i
echo -e "\n\e[1;35m Oracle install pre-setting finish! && please run oracle installer as user oracle \e[0m"

 

  要是在windows平台编辑的oracle_install.sh脚本文件或者下载附件传到/tmp目录使用的话,需要运行dos2unix oracle_install.sh 修改字符编码格式,否则执行脚本会报错。

 

上面脚本中默认将oracle软件安装到/oracle/db目录,oracle sid默认是police,这两个参数根据自己的项目需要进行修改,注意后边要反复使用这两个参数的值,一定要记好自己将oracle文件安装到哪个路径去了,SID也要记好。

 

6.给脚本权限,运行

chmod 777 /tmp/oracle_install.sh

/tmp/oracle_install.sh

 7.脚本运行后,再次修改一些环境变量参数

su - oracle

vi .bash_profile

   上面的oracle_install.sh脚本自动创建的oracle .bash_profile文件内容有问题,一个是重复,另外参数值也需要修改,修改ORACLE_BASE为oracle安装路径,如脚本默认的/oracle/db,修改ORACLE_HOME值,如/oracle/db/product/11.2.0/db_1 ,修改SID值,如police,删除掉重复的配置参数值后保存。

source .bash_profile

   执行以上命令让修改的配置立即生效。

 

8.切回root用户,给oracle用户读取安装源的权限

su - root
chmod -R 777 /tmp/database
chown -R oracle:oinstall /tmp/database

 

9.切换到oracle 用户,修改静默安装参数文件内容

su - oracle
vi /tmp/database/response/db_install.rsp

 

  需要修改的关键参数有:

oracle.install.option=INSTALL_DB_SWONLY   #这个用于说明只安装软件,先不创建数据库呢
ORACLE_HOSTNAME=oracle  # 当前oracle主机hostname
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/oracle/db/oraInventory #这个注意在前面修改了ORACLE_BASE值的话这里也要改一下,用ORACLE_BASE下面的子路径会在安装时有个警告,要是确实要放到ORACLE_BASE以外的路径的话,注意需要自己手动创建及给oracle用户及dba,oinstall组写入权限,没有特殊需求就放到ORACLE_BASE路径下就行了。

SELECTED_LANGUAGES=en,zh_CN,zh_TW
ORACLE_HOME=/oracle/db/product/11.2.0/db_1  #这个要设置的和oracle用户的.bash_profile里面的配置参数一致。
ORACLE_BASE=/oracle/db #这个也是,和oracle用户的.bash_profile里面的配置值一样
oracle.install.db.InstallEdition=EE  #安装企业版
oracle.install.db.DBA_GROUP=dba
oracle.install.db.OPER_GROUP=oinstall
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE  #别动脑筋整什么自定义,这个是直接拷贝复制文件,没有执行建库脚本过程,巨快。
oracle.install.db.config.starterdb.globalDBName=police   #数据库名称,我们是给公安用的,你们自己改成自己的。

oracle.install.db.config.starterdb.SID=police  #还是,改成和oracle用户.bash_profile里面的值一样。
oracle.install.db.config.starterdb.characterSet=ZHS16GBK 
oracle.install.db.config.starterdb.memoryOption=true 
oracle.install.db.config.starterdb.password.ALL=123456   #这个密码是sys和system用户的密码,改成自己想要的值.
改到这应该就差不多了,要是安装不了用我提供的附件文件吧。

 

10.好了,万事具备,开始把oracle软件安装到linux系统中吧

su - oracle
cd /tmp/database
./runInstaller -silent -ignorePrereq -responseFile /tmp/database/response/db_install.rsp

 

   会有个警告,不用搭理,耐心的等着吧,等啥时候屏幕提示你另外需要用root用户执行脚本的时候,另外开个ssh窗口或者终端窗口,按照屏幕提示的内容去执行两个sh脚本即可(需要用root用户去执行)

#脚本名称叫啥记不住了,你就看那边屏幕提示的是啥就去执行啥就行了,好像第二个是root.sh什么什么的
/oracle/db/xxxx/xxx.sh
/oracle/db/xxxx/root.sh

 

    这边两个脚本执行完成以后,回到那边按回车就算完事,oracle软件安装这就结束了。

 

11.创建监听器

 

su - oracle
/oracle/db/product/11.2.0/db_1/bin/netca /silent /responseFile /tmp/database/response/netca.rsp

    

    我这边估计是哪些步骤配置有问题,缺实例名称,创建出来的监听器配置参数listener.ora还需要进一步修改,后面再说。 

 

12.dbca建库

   修改dbca静默建库参数文件

su - oracle
vi /tmp/database/response/dbca.rsp

 

需要修改的参数名称及内容如下:

GDBNAME = "police"
SID = "police"
SYSPASSWORD = "123456"    #SYS用户密码,注意和前面的一样
SYSTEMPASSWORD = "123456" #SYSTEM用户密码
CHARACTERSET = "ZHS16GBK"

 

开始建库,注意用oracle用户执行以下命令

su - oracle
/oracle/db/product/11.2.0/db_1/bin/dbca -silent -responseFile /tmp/database/response/dbca.rsp

 

13.建完以后,修改以下listener.ora 文件内容,把实例加进去

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc) 
      (Oracle_HOME = /oracle/db/product/11.2.0/db_1)
      (PROGRAM = extproc) 
     )
  (SID_DESC =
      (GLOBAL_DBNAME = police)
      (ORACLE_HOME = /oracle/db/product/11.2.0/db_1)
      (SID_NAME = police)
    )
)

 

14 启动监听器,启动数据库

 

su - oracle #注意以下命令用oracle用户执行
/oracle/db/product/11.2.0/db_1/bin/lsnrctl stop LISTENER
/oracle/db/product/11.2.0/db_1/bin/lsnrctl start LISTENER

sqlplus / as sysdba
startup;

 

   到这客户机就可以访问oracle服务器了。

 

15.配置oracle为开机启动的linux服务

 

su - root
vi /etc/init.d/oracle

 

  脚本内容为:

#!/bin/bash
#chkconfig: 2345 80 90
#description:auto_run
### END INIT INFO
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export ORACLE_USER=oracle
export ORACLE_BASE=/oracle/db
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_SID=police


# see how we are called:
case $1 in
    start)
    su - "$ORACLE_USER"<<EOO
    lsnrctl start
    sqlplus /nolog<<EOS
    connect / as sysdba
    startup
EOS
    emctl start dbconsole
EOO
touch /var/lock/subsys/$scriptname
    ;;
    stop)
su - "$ORACLE_USER"<<EOO
    lsnrctl stop
    sqlplus /nolog<<EOS
    connect / as sysdba
    shutdown immediate
EOS
    emctl stop dbconsole
EOO
rm -f /var/lock/subsys/scriptname
    ;;
    *)
    echo "Usage: $0 {start|stop}"
    ;;
esac

 

    保存以上脚本后,设置权限等

    

chown root.root /etc/init.d/oracle
chmod 755 /etc/init.d/oracle
service oracle start  #启动服务
chkconfig oracle on   #设置为开机自动启动

 

16.后边还有一些oracle参数可以进一步优化,如关闭审计,归档,修改最大连接用户数等,为了便于编辑,可以考虑安装一个支持sqlplus命令上下滚动的程序,具体见这里

http://blog.itpub.net/16381228/viewspace-758767/

 

 

文章评论

程序员应该关注的一些事儿
程序员应该关注的一些事儿
漫画:程序员的工作
漫画:程序员的工作
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
10个调试和排错的小建议
10个调试和排错的小建议
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
我是如何打败拖延症的
我是如何打败拖延症的
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
旅行,写作,编程
旅行,写作,编程
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员的鄙视链
程序员的鄙视链
我的丈夫是个程序员
我的丈夫是个程序员
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
编程语言是女人
编程语言是女人
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
程序员都该阅读的书
程序员都该阅读的书
程序员必看的十大电影
程序员必看的十大电影
如何成为一名黑客
如何成为一名黑客
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
为什么程序员都是夜猫子
为什么程序员都是夜猫子
 程序员的样子
程序员的样子
老程序员的下场
老程序员的下场
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
鲜为人知的编程真相
鲜为人知的编程真相
一个程序员的时间管理
一个程序员的时间管理
代码女神横空出世
代码女神横空出世
Java程序员必看电影
Java程序员必看电影
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
那些争议最大的编程观点
那些争议最大的编程观点
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
每天工作4小时的程序员
每天工作4小时的程序员
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有