Linux下静默安装Oracle服务端&脚本自动化安装


前言

Linux下安装Oracle服务有两种方式:a.静默安装 b.图形化安装;大部分使用Linux的情况下我们是不安装图形化界面的,所以这里只介绍静默安装的方法及脚本示例。


安装流程

以下操作均使用root账户操作

1. 校验 本地硬件环境

# 物理内存不小于1G
[root@sole ~]# grep MemTotal /proc/meminfo

# 可用硬盘不小于8G
[root@sole ~]# df -h

# Swap分区空间不小于2G
[root@sole ~]# grep SwapTotal /proc/meminfo

2. 关闭firewalld防火墙

#查看firewalld防火墙状态
[root@sole ~]# systemctl status firewalld
#关闭firewalld防火墙
[root@sole ~]# systemctl stop firewalld
#禁止开机启动firewalld防火墙
[root@sole ~]# systemctl disable firewalld

3. 修改CentOS系统标识

修由于Oracle默认不支持CentOS,需要将CentOS系统标识改为redhat-7

#将文件内内容替换
[root@sole ~]# vi /etc/redhat-release

redhat-7

4. 修改内核参数

#编辑文件,添加如下内容
[root@sole ~]# vi /etc/sysctl.conf

fs.aio-max-nr = 1048576
fs.file-max = 6815744
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
kernel.shmall = 2097152
kernel.shmmax = 2147483648
net.ipv4.ip_local_port_range = 9000 65500
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.rp_filter = 1
net.core.rmem_default = 262144
net.core.rmem_max= 4194304
net.core.wmem_default= 262144
net.core.wmem_max= 1048576

修改完之后,启动新配置

[root@sole ~]# sysctl -p

5.安装软件包

[root@sole ~]# yum -y install binutils* compat-libcap1* compat-libstdc++* gcc* gcc-c++* glibc* glibc-devel* ksh* libaio* libaio-devel* libgcc* libstdc++* libstdc++-devel* libXi* libXtst* make* sysstat* elfutils* unixODBC* unzip lrzsz

6. 创建用户&用户组

#创建安装oracle程序用户组 
[root@sole ~]# groupadd oinstall
#创建DBA用户组 
[root@sole ~]# groupadd dba
#创建用户oracle 并加入到dba组
[root@sole ~]# useradd -g dba -m oracle
#将用户oracle加入到oinstall组
[root@sole ~]# usermod -a -G oinstall oracle
#修改用户oracle的密码
[root@sole ~]# passwd oracle

7. 创建安装目录

#创建oracle主目录
# mkdir -p /data/oracle
#创建oralce配置目录
# mkdir -p /data/inventory
#创建oracle压缩包解压目录
# mkdir -p /data/src
#修改目录权限
# chown -R oracle:oinstall /data/oracle
# chown -R oracle:oinstall /data/inventory                           
# chown -R oracle:oinstall /data/src

8. 修改oracle用户的安全性能设置

#在最后一行上方插入如下内容
[root@sole ~]# vi /etc/security/limits.conf

oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

# End of file

9. 修改用户环境变量

#增加如下内容
[root@sole ~]# vi /home/oracle/.bashrc

export PATH
export ORACLE_BASE=/data/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=orcl
export ORACLE_UNQNAME=orcl
export PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LANG=C
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

更新环境变量

[root@sole ~]# source /home/oracle/.bashrc

10. 解压安装包

[root@sole download]# unzip linux.x64_11gR2_database_1of2.zip -d /data/src/
[root@sole download]# unzip linux.x64_11gR2_database_2of2.zip -d /data/src/
#授权用户及用户组
[root@sole download]# chown -R oracle:oinstall /data/src/

11. 关闭selinux

#将文件对应内容修改如下
[root@sole ~]# vi /etc/selinux/config

SELINUX=disabled

重启虚拟机

[root@sole ~]# reboot

以下操作需切换至oracle用户操作

[root@sole ~]# su - oracle

12. 安装Oracle主程序

a. 编辑数据库安装文件

[oracle@sole ~]# vi /data/src/database/response/db_install.rsp

oracle.install.option=INSTALL_DB_SWONLY                # 安装类型
ORACLE_HOSTNAME=oracle.server                            # 主机名称
UNIX_GROUP_NAME=oinstall                                   # 安装组
INVENTORY_LOCATION=/data/inventory                         # INVENTORY目录
SELECTED_LANGUAGES=en,zh_CN                                # 选择语言
ORACLE_HOME=/data/oracle/product/11.2.0/db_1               # oracle_home
ORACLE_BASE=/data/oracle                                   # oracle_base
oracle.install.db.InstallEdition=EE                        # oracle版本
oracle.install.db.DBA_GROUP=dba                            # dba用户组
oracle.install.db.OPER_GROUP=oinstall                      # oper用户组
oracle.install.db.config.starterdb.type=GENERAL_PURPOSE    # 数据库类型
oracle.install.db.config.starterdb.globalDBName=orcl       # globalDBName
oracle.install.db.config.starterdb.SID=orcl                # SID	oracle.install.db.config.starterdb.characterSet=AL32UTF8   # 默认数据库编码
oracle.install.db.config.starterdb.memoryLimit=800         # 自动管理内存的最小内存(M)
oracle.install.db.config.starterdb.password.ALL=oracle     # 设定所有数据库用户使用同一个密码
DECLINE_SECURITY_UPDATES=true                              # 设置安全更新

b. 安装oracle

[oracle@sole ~]# /data/src/database/runInstaller -silent -responseFile /data/src/database/response/db_install.rsp -ignorePrereq

以上完成后,根据提示用root用户执行两个脚本文件

[root@sole ~]# /data/inventory/orainstRoot.sh
[root@sole ~]# /data/oracle/product/11.2.0/db_1/root.sh

13. 配置监听

[oracle@sole ~]# vi /data/src/database/response/netca.rsp

INSTALL_TYPE=""custom""                               # 安装的类型
LISTENER_NUMBER=1                                     # 监听器数量
LISTENER_NAMES={"LISTENER"}                           # 监听器的名称列表
LISTENER_PROTOCOLS={"TCP;1521"}                       # 监听器使用的通讯协议列表
LISTENER_START=""LISTENER""                           # 监听器启动的名称

执行命令

[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/netca /silent /responseFile /data/src/database/response/netca.rsp

查看监听

[oracle@sole ~]# netstat -tnulp | grep 1521

补充:监听的开启&关闭

# 开启监听:
[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/lsnrctl start
# 关闭监听:
[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/lsnrctl stop

14. 添加数据库实例

#修改配置文件
[oracle@sole ~]# vi /data/src/database/response/dbca.rsp

RESPONSEFILE_VERSION ="11.2.0"                              // 不要变哦
OPERATION_TYPE ="createDatabase"                            // 操作为创建实例  
GDBNAME ="orcl"                                             // 数据库实例名
SID ="orcl"                                                 // 实例名字
TEMPLATENAME = "General_Purpose.dbc"                        // 建库用的模板文件
SYSPASSWORD = "oracle"                                      // SYS管理员密码
SYSTEMPASSWORD = "oracle"                                   // SYSTEM管理员密码
SYSMANPASSWORD= "oracle"
DBSNMPPASSWORD= "oracle"
DATAFILEDESTINATION =/data/oracle/oradata                   // 数据文件存放目录
RECOVERYAREADESTINATION=/data/oracle/flash_recovery_area    // 恢复数据存放目录
CHARACTERSET ="AL32UTF8"                                    // 字符集
NATIONALCHARACTERSET= "AL16UTF16"                           // 字符集
TOTALMEMORY ="1638"                                         // 1638MB,物理内存2G*80%

启动实例

[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/dbca -silent -responseFile /data/src/database/response/dbca.rsp

查看实例

[oracle@sole ~]# ps -ef | grep ora_ | grep -v grep

修改启动和关闭实例的程序

[oracle@sole ~]# vi /data/oracle/product/11.2.0/db_1/bin/dbstart
[oracle@sole ~]# vi /data/oracle/product/11.2.0/db_1/bin/dbshut

#将ORACLE_HOME_LISTNER=$1修改为
ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1

修改/etc/oratab

[oracle@sole ~]# vi /etc/oratab

#将orcl:/data/oracle/product/11.2.0:N修改为
orcl:/data/oracle/product/11.2.0:Y

补充:启动&关闭实例

#启动实例:
[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/dbstart
#关闭实例:
[oracle@sole ~]# /data/oracle/product/11.2.0/db_1/bin/dbshut

15. 开机自启Oracle

root下操作

#授权执行权限
[root@sole ~]# chmod +x /etc/rc.d/rc.local
#修改文件,添加如内容
[root@sole ~]# vi /etc/rc.d/rc.local

su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/lsnrctl start"
su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/dbstart"

16. 登录测试

# 切换用户
[root@sole ~]# su - oracle
# 无日志启动
[oracle@sole ~]# sqlplus /nolog
# 以sysdba身份连接
SQL> conn /as sysdba;
# 查询时间
SQL> select sysdate from dual;

自动化安装脚本

链接地址:oracle脚本安装

提取码:rtw6


脚本执行如下:只需输入两次oracle用户的密码即可
在这里插入图片描述


脚本实例

这里写的比较简单,也没有做安装之后的验证,后续会更新新版安装脚本

#!/bin/bash
#修改/etc/redhat-release
#将每一行前加'#'
sed -i 's/^/\#&/g' /etc/redhat-release
#将redhat-7插入至最后一行
sed -i '$aredhat-7' /etc/redhat-release

#编辑 /etc/sysctl.conf
TEXT="fs.aio-max-nr=1048576
fs.file-max=6815744
kernel.shmmni=4096
kernel.sem=250@32000@100@128
kernel.shmall=2097152
kernel.shmmax=2147483648
net.ipv4.ip_local_port_range=9000@65500
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.conf.all.rp_filter=1
net.core.rmem_default=262144
net.core.rmem_max=4194304
net.core.wmem_default=262144
net.core.wmem_max=1048576
"
#自定义一个坐标,以供数据的顺序性
sed -i '$a#end' /etc/sysctl.conf
#替换'@'为空,并插入至'#end'的上一行
LINES=`echo $TEXT`
for line in $LINES
 do
	line=${line//@/ }
    VAR=`eval "sed -i '/#end/i\$line' /etc/sysctl.conf"`
done
#将自定义坐标删除
sed -i '$d' /etc/sysctl.conf

#启动新配置
VAR=`sysctl -p`

#安装软件包
VAR=`yum -y install binutils* compat-libcap1* compat-libstdc++* gcc* gcc-c++* glibc* glibc-devel* ksh* libaio* libaio-devel* libgcc* libstdc++* libstdc++-devel* libXi* libXtst* make* sysstat* elfutils* unixODBC* unzip lrzsz`

#创建用户和组
groupadd oinstall
groupadd dba
useradd -g dba -m oracle
usermod -a -G oinstall oracle
passwd oracle

#创建安装目录
mkdir -p /data/oracle
mkdir -p /data/inventory
mkdir -p /data/src
chown -R oracle:oinstall /data

#修改oracle用户的安全性能设置,修改/etc/security/limits.conf
TEXT="oracle_soft_nproc_2047
oracle_hard_nproc_16384
oracle_soft_nofile_1024
oracle_hard_nofile_65536
"
LINES=`echo $TEXT`
for line in $LINES
do
    line=${line//_/ }
    sed -i "\$i ${line//_/ }" /etc/security/limits.conf
done


#修改用户环境变量/home/oracle/.bashrc
TEXT="export@PATH
export@ORACLE_BASE=/data/oracle
export@ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export@ORACLE_SID=orcl
export@ORACLE_UNQNAME=orcl
export@PATH=\$ORACLE_HOME/bin:/usr/sbin:\$PATH
export@LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export@LANG=C
export@NLS_LANG=AMERICAN_AMERICA.AL32UTF8
"

#自定义一个坐标,以供数据的顺序性
sed -i '$a#end' /home/oracle/.bashrc
#替换'@'为空,并插入至'#end'的上一行
LINES=`echo $TEXT`
for line in $LINES
 do
	line=${line//@/ }
    VAR=`eval "sed -i '/#end/i\$line' /home/oracle/.bashrc"`
done
#将自定义坐标删除
sed -i '$d' /home/oracle/.bashrc

#source /home/oracle/.bashrc

#解压缩zip包到/data/src
VAR=`find / -name linux*of2.zip`
VAR=($VAR)
for i in ${VAR[@]}
do
	RES=`unzip $i -d /data/src`
done
#授权oracle用户和oinstall组
chown -R oracle:oinstall /data/src/


#关闭selinux /etc/selinux/config
NUM=`grep -n "SELINUX=enforcing" /etc/selinux/config|awk -F ':' '{print $1}'`
sed -i "$[NUM]c SELINUX=disabled" /etc/selinux/config


#编辑数据库安装文件/data/src/database/response/db_install.rsp
TEXT="oracle.install.option=INSTALL_DB_SWONLY
ORACLE_HOSTNAME=oracle.server
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/data/inventory
SELECTED_LANGUAGES=en,zh_CN
ORACLE_HOME=/data/oracle/product/11.2.0/db_1
ORACLE_BASE=/data/oracle
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=orcl
oracle.install.db.config.starterdb.SID=orcl
oracle.install.db.config.starterdb.characterSet=AL32UTF8
oracle.install.db.config.starterdb.memoryLimit=800
oracle.install.db.config.starterdb.password.ALL=oracle
DECLINE_SECURITY_UPDATES=true
"

PARAMS=($TEXT)

for i in ${PARAMS[@]}
do
    param=(${i//=/ })
    counts=`cat -n /data/src/database/response/db_install.rsp|grep "${param[0]}="|awk '{print $1}'`
    counts=($counts)
    for j in ${counts[@]}
    do
        sentence=`sed -n "${j}p" /data/src/database/response/db_install.rsp`
        if [[ $sentence =~ ^${param[0]}  ]]
        then
        result=`sed -i "${j}c${i}" /data/src/database/response/db_install.rsp`
        fi
    done
done

TMP=`su - oracle -c "/data/src/database/runInstaller -silent -responseFile /data/src/database/response/db_install.rsp -ignorePrereq"`

a=1

TMP=`su - root -c "/data/inventory/orainstRoot.sh"`
TMP=`su - root -c "/data/oracle/product/11.2.0/db_1/root.sh"`

TEXT="INSTALL_TYPE=\"\"custom\"\""

NUM=`cat -n /data/src/database/response/netca.rsp|grep "INSTALL_TYPE=\"\"typical\"\""|awk '{print $1}'`
result=`sed -i "${NUM}c${TEXT}" /data/src/database/response/netca.rsp`


TMP=`su - oracle -c "/data/oracle/product/11.2.0/db_1/bin/netca /silent /responseFile /data/src/database/response/netca.rsp"`


TEXT="GDBNAME#=\"orcl\"
SID#=\"orcl\"
SYSPASSWORD#=\"oracle\"
SYSTEMPASSWORD#=\"oracle\"
SYSMANPASSWORD#=\"oracle\"
DBSNMPPASSWORD#=\"oracle\"
DATAFILEDESTINATION#=/data/oracle/oradata
RECOVERYAREADESTINATION=/data/oracle/flash_recovery_area
CHARACTERSET#=\"AL32UTF8\"
NATIONALCHARACTERSET=\"AL16UTF16\"
TOTALMEMORY#=\"1638\"
"

PARAMS=($TEXT)

for i in ${PARAMS[@]}
do
    param=${i//=/ }
    param=($param)
    first=${param[0]}
    first=${first//#/ }
    count=`cat -n /data/src/database/response/dbca.rsp|grep "${first}="|awk '{print $1}'`
    count=($count)
    count=${count[0]}
    sen=${i//#/ }
    result=`sed -i "${count}c${sen}" /data/src/database/response/dbca.rsp`
done

TMP=`su - oracle -c "/data/oracle/product/11.2.0/db_1/bin/dbca -silent -responseFile /data/src/database/response/dbca.rsp"`


TEXT="ORACLE_HOME_LISTNER=/data/oracle/product/11.2.0/db_1"

NUM=`cat -n /data/oracle/product/11.2.0/db_1/bin/dbstart|grep "ORACLE_HOME_LISTNER=$1"|awk '{print $1}'`
RES=`sed -i "${NUM}c${TEXT}" /data/oracle/product/11.2.0/db_1/bin/dbstart`
NUM=`cat -n /data/oracle/product/11.2.0/db_1/bin/dbshut|grep "ORACLE_HOME_LISTNER=$1"|awk '{print $1}'`
RES=`sed -i "${NUM}c${TEXT}" /data/oracle/product/11.2.0/db_1/bin/dbshut`

NUM=`cat -n /etc/oratab|grep "orcl:/data/oracle/product/11.2.0:N"|awk '{print $1}'`
RES=`sed -i ''$count's/N/Y/1' /etc/oratab`


echo 'su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/lsnrctl start"' >> /etc/rc.d/rc.local
echo 'su oracle -lc "/data/oracle/product/11.2.0/db_1/bin/dbstart"' >> /etc/rc.d/rc.local


PS:如果有写错或者写的不好的地方,欢迎各位在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!

原创作者:wsjslient

作者主页:https://blog.csdn.net/wsjslient

参考来源:https://www.cnblogs.com/yejingcn/p/10278473.html


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值