> 文档中心 > 手把手教学Linux下oracle11g自动化安装脚本编写

手把手教学Linux下oracle11g自动化安装脚本编写


手把手教学Linux下oracle11g自动化安装脚本编写

  • 产品:Oracle
  • 版本:11.2.0.4
  • 环境:Centos7

文章目录

    • 手把手教学Linux下oracle11g自动化安装脚本编写
      • 0、脚本参数变量初始化
      • 1、配置hosts主机解析文件
      • 2、安装依赖包
      • 3、配置操作系统内核参数
      • 4、配置操作系统资源限制
      • 5、取消透明大页
      • 6、禁用SELINUX及防火墙
      • 7、创建用户和组
      • 8、修改Oracle密码
      • 9、创建目录
      • 10、设置环境变量
      • 11、获取安装包、补丁包
      • 12、解压安装包
      • 13、获取静默安装脚本
      • 14、执行静默安装
      • 15、根据安装提示以root用户执行相关脚本
      • 16、补丁
      • 17、创建数据库
      • 18、注册监听

说明:

  • 该脚本包含oracle安装前依赖安装、操作系统资源配置、oracle数据库软件安装、数据库补丁、实例创建、监听注册;
  • 在部署过程中数据库服务名、实例名、操作系统oracle用户皆为自定义,因此作为参数传入;
  • 在未做配置的操作系统上执行该脚本可得到即可使用的oracle数据库,安装时长大约十分钟。
  • 该脚本在需root用户下执行。

0、脚本参数变量初始化

#!/bin/bash# 传入第一个参数为SIDSID=$1# 传入第二个参数为服务名GDBNAME=$2# 传入第三个参数为操作系统oracle用户密码oraclepwd=$3# 定义ORACLE_HOME变量,防止后续读不到环境变量导致安装失败ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/db_1

1、配置hosts主机解析文件

echo "INFO>>>配置hosts主机解析文件"# 获取本机ip,注意查看自己使用的网卡是否为eth0,不是的话需要替换ipaddr=`ip a | grep -w "inet" | grep eth0 |sed 's/^.*inet //g'|sed 's/\/[0-9][0-9].*$//g'`hostname=`hostname`echo "${ipaddr} ${hostname}" >> /etc/hostsecho

2、安装依赖包

echo "INFO>>>安装依赖包"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 cpp glibc-headers mpfr unixODBC unixODBC-devel glibc-headers psmisc unzip expectrpm -q --queryformat "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n" binutils compat-libcap1 compat-libstdc++ gcc gcc-c++ glibc glibc-devel ksh libaio libaio-devel libgcc libstdc++ libstdc++-devel libXi libXtst make sysstat cpp glibc-headers mpfr unixODBC unixODBC-devel glibc-headersecho

3、配置操作系统内核参数

echo "INFO>>>配置操作系统内核参数"maxmemory=`free | awk 'NR==2{print}' | awk '{print $2}'`maxmemoryb=`expr ${maxmemory} \* 1024`shmallb=`expr ${maxmemoryb} / 4096`echo "kernel.sem = 250 32000 100 128kernel.shmmni = 4096kernel.shmall = ${shmallb}kernel.shmmax = ${maxmemoryb}kernel.panic_on_oops = 1net.core.rmem_default = 262144net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576net.ipv4.conf.all.rp_filter = 2net.ipv4.conf.default.rp_filter = 2net.ipv4.ip_local_port_range = 9000 65500fs.file-max = 6815744fs.aio-max-nr = 1048576" >> /etc/sysctl.confsysctl -pecho

4、配置操作系统资源限制

echo "INFO>>>配置操作系统资源限制"echo "oracle soft nproc 2047oracle hard nproc 16384oracle soft nofile 1024oracle hard nofile 65536 oracle soft stack 10240oracle hard stack 32768oracle soft memlock unlimitedoracle hard memlock unlimited" >> /etc/security/limits.confFalg=`cat -n /etc/pam.d/login | grep -v "#" |grep "session" | grep "required" | grep "pam_loginuid.so" |awk '{print $1}'`sed -i "$Falg i session required pam_limits.so" /etc/pam.d/loginecho

5、取消透明大页

echo "INFO>>>取消透明大页"echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag# 开机执行echo "if test -f /sys/kernel/mm/transparent_hugepage/enabled; thenecho never > /sys/kernel/mm/transparent_hugepage/enabledfiif test -f /sys/kernel/mm/transparent_hugepage/defrag; thenecho never > /sys/kernel/mm/transparent_hugepage/defragfi" >> /etc/rc.d/rc.localchmod 755 /etc/rc.d/rc.local

6、禁用SELINUX及防火墙

echo "INFO>>>禁用SELINUX及防火墙"Falg=`cat -n /etc/selinux/config | grep -v "#" |grep "SELINUX=" | grep "enforcing" | awk '{print $1}'`if [ ${Falg} ]; then  sed -i ${Falg}s/enforcing/permissive/g /etc/selinux/config  echo "INFO >>>>>> SELinux配置文件已修改,现配置如下:"  cat /etc/selinux/config | grep -v "#" |grep -v '^$'  setenforce 0  echo "INFO >>>>>> SELinux已临时换成宽容模式"fi# 如果安装的是单实例,可开启防火墙,开放对应端口即可systemctl stop firewalld.serviceecho

7、创建用户和组

echo "INFO>>>创建用户和组"/usr/sbin/groupadd -g 5000 oinstall/usr/sbin/groupadd -g 5004 dba/usr/sbin/groupadd -g 5005 oper/usr/sbin/useradd -u 5002 -g oinstall -G oper,dba -m -d /home/oracle -s /bin/bash oracleecho

8、修改Oracle密码

echo $oraclepwd | passwd oracle --stdin > /dev/null 2>&1echo

9、创建目录

echo "INFO>>>创建目录"mkdir -p /u01/app/oraInventorymkdir -p /u01/app/oraclemkdir -p /u01/app/oracle/product/11.2.0.4/db_1chown -R oracle:oinstall /u01/app/oraInventorychown -R oracle:oinstall /u01/app/oracleecho

10、设置环境变量

echo "INFO>>>设置环境变量"echo "# .bash_profile # Get the aliases and functionsif [ -f ~/.bashrc ]; then . ~/.bashrcfi # User specific environment and startup programs PATH=\$PATH:\$HOME:/bin:/usr/bin:/etc:/usr/sbin:/usr/ucb:/usr/bin/X11:/sbin:.export PATHexport ORACLE_SID=$SIDexport ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=\$ORACLE_BASE/product/11.2.0.4/db_1export ORACLE_TERM=vt100export TNS_ADMIN=\$ORACLE_HOME/network/adminexport NLS_LANG=american_america.zhs16gbkexport LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/libexport PATH=\$ORACLE_HOME/bin:\$ORACLE_HOME/OPatch:\$PATHexport CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/JRE/lib:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlibexport NLS_DATE_FORMAT='yyyy-mm-dd HH24:MI:SS'export DISPLAY=localhost:0.0export ORA_NLS33=\$ORACLE_HOME/ocommon/nls/admin/dataexport DISABLE_HUGETLBFS=1export LANG=Cif [ \$USER = \"oracle\" ]; then  if [ \$SHELL = \"/bin/ksh\" ]; then    ulimit -p 16384    ulimit -n 65536  else    ulimit -u 16384 -n 65536  fifiumask 022" > /home/oracle/.bash_profileecho

11、获取安装包、补丁包

说明:
此次获取oracle11g的安装包和补丁包,小狮子的做法是将安装包和补丁包放到内网服务器上,然后通过Nginx代理,成为一个软件库,需要时直接拉取即可,请根据自己的需求调整脚本,资源对应关系如下:

资源名称 用途
p13390677_112040_Linux-x86-64_1of7.zip Oracle安装包
p13390677_112040_Linux-x86-64_2of7.zip Oracle安装包
p31537677_112040_Linux-x86-64.zip DB 11.2.0.4 补丁
p31668908_112040_Linux-x86-64.zip OJVM补丁
p6880880_112000_Linux-x86-64.zip OPatch工具

注:因写此文章时资源尚未上传,如需要资源请留言。

echo "INFO>>>获取安装包、补丁包"wget -P /home/oracle/ http://101.10.35.181:18106/download/oracle/p13390677_112040_Linux-x86-64_1of7.zipsleep 10swget -P /home/oracle/ http://101.10.35.181:18106/download/oracle/p13390677_112040_Linux-x86-64_2of7.zipsleep 10swget -P /home/oracle/ http://101.10.35.181:18106/download/oracle/p31537677_112040_Linux-x86-64.zipsleep 10swget -P /home/oracle/ http://101.10.35.181:18106/download/oracle/p31668908_112040_Linux-x86-64.zipsleep 10swget -P /home/oracle/ http://101.10.35.181:18106/download/oracle/p6880880_112000_Linux-x86-64.zipEOF

12、解压安装包

su - oracle << EOFecho "INFO>>>解压安装包"cd /home/oracleunzip p13390677_112040_Linux-x86-64_1of7.zipunzip p13390677_112040_Linux-x86-64_2of7.zip

13、获取静默安装脚本

source ~/.bash_profileecho "INFO>>>获取静默安装脚本"wget -P /home/oracle/database/response/ http://101.10.35.181:18106/download/oracle/db_install_simple.rspcd /home/oracle/database/response/sleep 10ssed -i s/testdb/${hostname}/g /home/oracle/database/response/db_install_simple.rsp

静默安装配置文件db_install_simple.rsp 内容如下,小狮子将脚本上传内网软件库,安装时拉取,大家可根据实际情况修改脚本。

oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0oracle.install.option=INSTALL_DB_SWONLYORACLE_HOSTNAME=testdbUNIX_GROUP_NAME=oinstallINVENTORY_LOCATION=/u01/app/oraInventorySELECTED_LANGUAGES=en,zh_CNORACLE_HOME=/u01/app/oracle/product/11.2.0.4/db_1ORACLE_BASE=/u01/app/oracleoracle.install.db.InstallEdition=EEoracle.install.db.EEOptionsSelection=falseoracle.install.db.optionalComponents=oracle.rdbms.partitioning:11.2.0.4.0,oracle.oraolap:11.2.0.4.0,oracle.rdbms.dm:11.2.0.4.0,oracle.rdbms.dv:11.2.0.4.0,oracle.rdbms.lbac:11.2.0.4.0,oracle.rdbms.rat:11.2.0.4.0oracle.install.db.DBA_GROUP=dbaoracle.install.db.OPER_GROUP=operoracle.install.db.CLUSTER_NODES=oracle.install.db.isRACOneInstall=oracle.install.db.racOneServiceName=MYORACLESUPPORT_USERNAME=MYORACLESUPPORT_PASSWORD=SECURITY_UPDATES_VIA_MYORACLESUPPORT=DECLINE_SECURITY_UPDATES=truePROXY_HOST=PROXY_PORT=PROXY_USER=PROXY_PWD=PROXY_REALM=COLLECTOR_SUPPORTHUB_URL=oracle.installer.autoupdates.option=SKIP_UPDATESoracle.installer.autoupdates.downloadUpdatesLoc=AUTOUPDATES_MYORACLESUPPORT_USERNAME=AUTOUPDATES_MYORACLESUPPORT_PASSWORD=

14、执行静默安装

echo "INFO>>>执行静默安装"/home/oracle/database/runInstaller -silent -ignorePrereq -ignoreSysPreReqs -ignoreDiskWarning -responseFile /home/oracle/database/response/db_install_simple.rspsleep 3mecho -e "\n"EOF

说明: 第12步至14步皆为oracle用户执行,清注意su - oracle << EOF … EOF不能去掉。

15、根据安装提示以root用户执行相关脚本

echo "INFO>>>以root用户执行相关脚本"/u01/app/oraInventory/orainstRoot.sh/u01/app/oracle/product/11.2.0.4/db_1/root.sh

16、补丁

说明: $ORACLE_HOME中的$需要转义,不然获取到的值为脚本中ORACLE_HOME的值,而不是oracle用户环境变量的值,因此我们之前定义ORACLE_HOME变量,就是防止忘记加转义符获取不到路径。

su - oracle << EOFecho "INFO>>>补丁"source ~/.bash_profilecd /home/oracle/mv \$ORACLE_HOME/OPatch \$ORACLE_HOME/Opatchbakunzip p6880880_112000_*.zip -d $ORACLE_HOME/unzip p31537677_112040_Linux-x86-64.zipcd /home/oracle/31537677\$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./EOFsu - oracle << EOFcd /home/oracle/31537677source ~/.bash_profile\$ORACLE_HOME/OPatch/opatch apply -silentEOFsu - oracle << EOFcd /home/oracle/source ~/.bash_profilemv /home/oracle/PatchSearch.xml /home/oracle/PatchSearch.xml.bakunzip p31668908_112040_Linux-x86-64.zipcd /home/oracle/31668908\$ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./EOFsu - oracle << EOFcd /home/oracle/31668908source ~/.bash_profile\$ORACLE_HOME/OPatch/opatch apply -silentEOF

17、创建数据库

su - oracle << EOFecho "INFO>>>创建数据库"source ~/.bash_profilewget -P /home/oracle/database/response/ http://10.10.5.18:18106/download/oracle/dbca_xs.rspsed -i 78s/orcl/${GDBNAME}/g /home/oracle/database/response/dbca_xs.rspsed -i 170s/orcl/${SID}/g /home/oracle/database/response/dbca_xs.rspdbca -silent -createDatabase -responseFile /home/oracle/database/response/dbca_gy.rspEOF

dbca_xs.rsp 内容如下,请大家根据自己需求配置与脚本

[GENERAL]RESPONSEFILE_VERSION = "11.2.0"OPERATION_TYPE = "createDatabase"[CREATEDATABASE]GDBNAME = "orcl"SID = "orcl"TEMPLATENAME = "General_Purpose.dbc"SYSPASSWORD = "oracle"SYSTEMPASSWORD = "oracle"CHARACTERSET = "ZHS16GBK"MEMORYPERCENTAGE = "40"AUTOMATICMEMORYMANAGEMENT = "FALSE"[createTemplateFromDB]SOURCEDB = "myhost:1521:orcl"SYSDBAUSERNAME = "system"TEMPLATENAME = "My Copy TEMPLATE"[createCloneTemplate]SOURCEDB = "orcl"TEMPLATENAME = "My Clone TEMPLATE"[DELETEDATABASE]SOURCEDB = "orcl"[generateScripts]TEMPLATENAME = "New Database"GDBNAME = "orcl11.us.oracle.com"[CONFIGUREDATABASE][ADDINSTANCE]DB_UNIQUE_NAME = "orcl11g.us.oracle.com"NODELIST=SYSDBAUSERNAME = "sys"[DELETEINSTANCE]DB_UNIQUE_NAME = "orcl11g.us.oracle.com"INSTANCENAME = "orcl11g"SYSDBAUSERNAME = "sys"

18、注册监听

su - oracle << EOFsource ~/.bash_profileecho "INFO>>>注册监听"netca -silent -responsefile /home/oracle/database/response/netca.rspEOF# read -p "按任意键继续。。。"su - oracle << EOFecho "SID_LIST_LISTENER =  (SID_LIST =    (SID_DESC =      (GLOBAL_DBNAME=${GDBNAME})      (ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/db_1)      (SID_NAME= $1)    )  )" >> $ORACLE_HOME/network/admin/listener.oralsnrctl stoplsnrctl startEOF

到此脚本已编写完成,本教程更多的是分享编写脚本的思路与脚本的写法,让大家少走弯路,如有其他想法请留言我们一起探讨。

关注醒狮运维公众号,了解更多运维知识及漏洞信息!
在这里插入图片描述