手把手教学Linux下oracle11g自动化安装脚本编写
手把手教学Linux下oracle11g自动化安装脚本编写
- 产品:Oracle
- 版本:11.2.0.4
- 环境:Centos7
文章目录
说明:
- 该脚本包含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
到此脚本已编写完成,本教程更多的是分享编写脚本的思路与脚本的写法,让大家少走弯路,如有其他想法请留言我们一起探讨。
关注醒狮运维公众号,了解更多运维知识及漏洞信息!