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/
//关闭空表不分配表空间的问题
alter system set deferred_segment_creation=false;
//关闭审计
alter system set audit_trail=FALSE scope=spfile;
shutdown immediate;
startup mount;
//关闭归档
alter database noarchivelog;
alter database open;