• Oracle11g 离线静默安装并附安装脚本


    以下我们在Centos7操作系统上以oracle11g为例来进行一下安装

    环境准备

    Oracle下载地址 https://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html

    JDK1.7(这里不再阐述)

    可用的yum源(这里不再阐述)

    操作用户

    root

    开始安装

    基础环境配置

    操作节点:192.168.22.1 操作用户:root

    1. 修改主机名IP映射关系,编辑/etc/hosts文件
    192.168.22.1 risen
    
    1. 修改主机名,编辑/etc/hostname文件
    risen
    
    1. 修改系统名称,编辑文件/etc/redhat-release并修改为redhat-7 (此步骤可跳过,后续安装如果不报错可不修改)

    安装必备的依赖环境

    1. 安装环境依赖

    操作节点:192.168.22.1

    yum -y install  binutils-* compat-libstdc++-* compat-libcap1-* 
    elfutils-libelf-* elfutils-libelf-devel-* gcc* gcc-c++-* glibc* 
    glibc-common-* glibc-devel-* glibc-headers-* ksh-* 
    libaio-* libaio-devel-* libgcc-* libstdc++-* libstdc++-devel* make-* 
    sysstat-* unixODBC-* unixODBC-devel-* numactl-devel-* pdksh-* 
    kernel-headers*
    

    创建oracle相关用户以及用户组

    操作节点:192.168.22.1 操作用户:root

    groupadd oinstall
    groupadd dba
    useradd -g oinstall -G dba oracle
    

    为oracle用户设置密码

    操作节点:192.168.22.1 操作用户:root

    echo "oracle" | passwd --stdin oracle
    

    修改oracle环境变量

    编辑/home/oracle/.bash_profile文件,并新增以下内容

    操作节点:192.168.22.1 操作用户:root

    umask 022
    stty erase ^H
    PATH=$PATH:$HOME/bin
    TMP=/tmp
    TMPDIR=$TMP
    ORACLE_BASE=/home/oracle/app/oracle
    ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
    ORACLE_SID=orcl
    ORACLE_TERM=xterm
    PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
    LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"
    NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
    export EDITOR=vi
    export TMP TMPDIR ORACLE_TERM CLASSPATH NLS_DATE_FORMAT ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH NLS_LANG EDITOR
    

    上传解压安装包

    操作节点:192.168.22.1 操作用户:root

    1. 将安装包通过sftp或者客户端工具或者rz命令等方式上传至/tmp目录下

    2. 解压压缩包

    unzip linux.x64_11gR2_database_1of2.zip
    unzip linux.x64_11gR2_database_2of2.zip
    

    修改权限

    操作节点:192.168.22.1 操作用户:root

    chmod -R 777 /tmp/database
    chown -R oracle.oinstall /tmp/database
    

    创建app目录

    操作节点:192.168.22.1 操作用户:oracle

    mkdir -p /home/oracle/app/oracle
    

    准备安装文件

    操作节点:192.168.22.1 操作用户:oracle

    1. 在/home/oracle/目录下新建目录etc,并执行以下命令
    mkdir /home/oracle/etc
    cp /tmp/database/response/* /home/oracle/etc/
    
    1. 创建oraInst.loc文件,进入到/etc/目录下并新建oraInst.loc文件,并新增以下内容
    nventory_loc=/home/oracle/app/oraInventory
    inst_group=oinstall
    
    1. 修改oraInst.loc文件权限
    chown oracle:oinstall /etc/oraInst.loc
    chmod 664 /etc/oraInst.loc
    

    修改系统限制文件

    操作节点:192.168.22.1 操作用户:root

    1. 备份limits.conf
    cp /etc/security/limits.conf /etc/security/limits.conf.bak
    
    1. 编辑/etc/security/limits.conf,在文件末尾加上以下内容(如果已经存在则跳过此步骤)
    oracle soft nofile 1024
    oracle hard nofile 65536
    grid soft nproc 2047
    grid hard nproc 16384
    grid soft nofile 1024
    grid hard nofile 65536
    

    设置系统资源限制

    操作节点:192.168.22.1 操作用户:root

    1. 备份login
    cp /etc/pam.d/login /etc/pam.d/login.bak
    
    1. 编辑/etc/pam.d/login,并在文件末尾加上以下内容(如果已经存在则跳过此步骤)
    session required pam_limits.so
    

    设置系统环境变量

    操作节点:192.168.22.1 操作用户:root

    1. 备份profile
    cp /etc/profile /etc/profile.bak
    
    1. 编辑/etc/profile,在文件末尾加上以下内容(如果已经存在则跳过此步骤)
    if [ $USER = "oracle" ]; then
       if [ $SHELL = "/bin/ksh" ]; then
           ulimit -p 16384
           ulimit -n 65536
        else
           ulimit -u 16384 -n 65536
       fi
    fi
    
    1. 使环境变量生效
    source /etc/profile
    

    设置系统参数文件

    操作节点:192.168.22.1 操作用户:root

    1. 备份sysctl.conf
    cp /etc/sysctl.conf /etc/sysctl.conf.bak
    
    1. 编辑/etc/sysctl.conf,并在文件末尾加上以下内容(如果已经存在则跳过此步骤)
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.shmall = 2097152
    kernel.shmmax = 1054472192
    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 = 1048586
    net.ipv4.tcp_wmem = 262144 262144 262144
    net.ipv4.tcp_rmem = 4194304 4194304 4194304
    

    然后执行sysctl -p命令使其生效

    配置oracle安装文件

    操作节点:192.168.22.1 操作用户:oracle

    1. 进入到/home/oracle/etc目录下,编辑db_install.rsp文件
    oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v11_2_0
    oracle.install.option=INSTALL_DB_SWONLY
    ORACLE_HOSTNAME=risen
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/home/oracle/app/oraInventory
    SELECTED_LANGUAGES=en,zh_CN
    ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db_1
    ORACLE_BASE=/home/oracle/app/oracle_base
    oracle.install.db.InstallEdition=EE
    oracle.install.db.isCustomInstall=true
    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=ZHS16GBK
    oracle.install.db.config.starterdb.memoryOption=true
    oracle.install.db.config.starterdb.memoryLimit=512
    oracle.install.db.config.starterdb.installExampleSchemas=false
    oracle.install.db.config.starterdb.enableSecuritySettings=true
    oracle.install.db.config.starterdb.password.ALL=123456
    DECLINE_SECURITY_UPDATES=true
    

    静默安装

    操作节点:192.168.22.1 操作用户:oracle

    1. 进入到/tmp/database目录下执行以下命令
    ./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp
    

    runInstaller

    需要等一会。若果没有问题,则继续下一步,如果有问题,查看相应的日志去解决,出现Successfully.Setup.Software.信息则说明安装成功。

    检查

    操作节点:192.168.22.1 操作用户:root

    sh /home/oracle/app/oracle/product/11.2.0/db_1/root.sh
    

    安装监听

    操作节点:192.168.22.1 操作用户:oracle

    1. 完成之前步骤说明oracle的基本命令已经安装,并且在最开始我们已经将oracle的安装目录中的命令配置到了环境变量中,现在只需要使环境变量生效执行命令
    source /home/oracle/.bash_profile
    
    1. 开始安装监听
    netca /silent /responsefile /home/oracle/etc/netca.rsp
    

    netcat

    (此处可能会报错命令解析错误,需要手动写入此命令,不然直接复制可能带有其它隐藏特殊字符)通过查看端口命令查看1521端口是否启动。

    修改数据库配置并安装

    操作节点:192.168.22.1 操作用户:oracle

    1. 进入到/home/oracle/etc目录下,编辑dbca.rsp文件
    #数据库名.主机名
    GDBNAME = "orcl.risen"
    #设置实例名
    SID = "orcl"
    TEMPLATENAME = "General_Purpose.dbc"
    #设置sys账户密码
    SYSPASSWORD = "123456"
    #设置system账户密码
    SYSTEMPASSWORD = "123456"
    DATAFILEDESTINATION = /home/oracle/app/oracle/oradata
    RECOVERYAREADESTINATION= /home/oracle/app/oracle/oradata_back
    CHARACTERSET = "ZHS16GBK"
    TOTALMEMORY = "512"
    

    执行以下命令

    export DISPLAY=0.0
    dbca -silent -responsefile /home/oracle/etc/dbca.rsp
    

    (不要复制最好手动写,不然可能夹杂其它特殊字符)

    安装过程

    查看监听状态

    操作节点:192.168.22.1 操作用户:oracle

    1. 查看监听状态
    lsnrctl status
    

    查看监听状态

    1. 配置监听文件
    cp /home/oracle/app/oracle/product/11.2.0/db_1/network/admin/samples/tnsnames.ora /home/oracle/app/oracle/product/11.2.0/db_1/network/admin/
    
    cp  /home/oracle/app/oracle/product/11.2.0/db_1/network/admin/samples/listener.ora /home/oracle/app/oracle/product/11.2.0/db_1/network/admin/
    
    1. 修改监听名称解析文件tnsnames.ora,进入到/home/oracle/app/oracle/product/11.2.0/db_1/network/admin/目录下进行编辑tnsnames.ora在文件末尾新增
    orcl=
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.1)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVICE_NAME = orcl)
        )
      )
    
    1. 修改监听文件listener.ora
    LISTENER =
     (ADDRESS_LIST=
            (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.22.1)(PORT=1521))
            (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)))
    
    SID_LIST_LISTENER=
       (SID_LIST=
            (SID_DESC=
              (GLOBAL_DBNAME=orcl)
              (SID_NAME=orcl)
              (ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db_1)
             (PRESPAWN_MAX=20)
              (PRESPAWN_LIST=
               (PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1))
             )
            )
           )
    
    1. 重启监听
    lsnrctl stop
    lsnrctl start
    

    修改监听后的状态

    启动oracle

    操作节点:192.168.22.1 操作用户:oracle

    1. 执行以sysdba的角色登录命令
    sqlplus / as sysdba
    

    sysdba_login

    1. 执行启动命令
    startup
    

    启动

    说明启动成功,到此所有安装完成。可以新建一个用户然后通过Windows客户端去访问一下。

    问题总结

    • 问题一: 报错缺少DISPLAY变量

    解决一:在当前窗口执行

    export DISPLAY=0.0
    
    • 问题二:lsnrctl: error while loading shared libraries: /u01/app/oracle/product/11.2.0/db_1/lib/libclntsh.so.11.1: cannot restore segment prot after reloc: Permission denied

    在root用户下执行以下命令

    su - root
    setenforce 0
    
    • 问题三:错误 ORA-01102: cannot mount database in EXCLUSIVE mode

      参考链接 https://blog.csdn.net/lzwgood/article/details/26368323

    • 最后附上linux安装oracle11g的脚本,具体安装过程通过查看日志可以解决百分之95以上的问题(自己写的,不足之处欢迎指正)

    #!/bin/bash +x
    #author:ranzechen
    #date:2019/05/06
    
    oracle_config_path=./oracle.config
    
    #判断oracle.config是否存在,不存在则创建
    function config_file(){
    	if [ ! -f $oracle_config_path ];then
    		touch $oracle_config_path
    		if [ $? == 0 ];then
    			echo "=====>创建oracle配置信息成功<======"
    			echo "##以下是oracle的默认配置信息,可修改" >> $oracle_config_path
    			echo "#oracle的基础安装目录" >> $oracle_config_path
    			echo "ORACLE_BASE=/home/oracle/app/oracle" >> $oracle_config_path
    			echo "#oracle的安装目录" >> $oracle_config_path
    			echo "ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/db_1" >> $oracle_config_path
    			echo "#oracle的实例名" >> $oracle_config_path
    			echo "ORACLE_SID=orcl" >> $oracle_config_path
    			echo "#创建/etc/oraInst.loc文件" >> $oracle_config_path
    			echo "nventory_loc=/home/oracle/app/oracle/oraInventory" >> $oracle_config_path
    			echo "##配置oracle安装文件db_install.rsp" >> $oracle_config_path
    			echo "#配置oracle启动密码" >> $oracle_config_path
    			echo "oracle.install.db.config.starterdb.password.ALL=123456" >> $oracle_config_path
    			echo "#配置sys密码" >> $oracle_config_path
    			echo "SYSPASSWORD=123456" >> $oracle_config_path
    			echo "#配置system密码" >> $oracle_config_path
    			echo "SYSTEMPASSWORD=123456" >> $oracle_config_path
    			echo "#配置oracle数据目录" >> $oracle_config_path
    			echo "DATAFILEDESTINATION = /home/oracle/app/oracle/oradata" >> $oracle_config_path
    			read -p "======>是否修改配置oracle的默认配置信息[yes/no]:" flag
                    	if [ $flag == "yes" ];then
                            	vi $oracle_config_path
                            	exit
                    	fi
    		fi
    	else
    		read -p "======>是否修改配置oracle的默认配置信息[yes/no]:" flag
    		if [ $flag == "yes" ];then
    			vi $oracle_config_path
    			exit
    		fi
    	fi
    }
    
    #配置oralce用户.bash_profile
    function set_bash_profile(){
    	echo "【配置oracle环境变量】"
    	grep "ORACLE_HOME" /home/oracle/.bash_profile && grep "ORACLE_SID" /home/oracle/.bash_profile
    	if [ $? != 0 ];then
    		echo "umask 022" >>/home/oracle/.bash_profile
    		echo "stty erase ^H" >>/home/oracle/.bash_profile
    		echo "PATH=$PATH:$HOME/bin" >>/home/oracle/.bash_profile
    		echo "TMP=/tmp" >>/home/oracle/.bash_profile
    		echo "TMPDIR=$TMP" >>/home/oracle/.bash_profile
    		echo `cat oracle.config | grep ORACLE_BASE=` >>/home/oracle/.bash_profile
    		echo `cat oracle.config | grep ORACLE_HOME=` >>/home/oracle/.bash_profile
    		echo `cat oracle.config | grep ORACLE_SID=` >>/home/oracle/.bash_profile
    		echo "ORACLE_TERM=xterm" >>/home/oracle/.bash_profile
    		echo "PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin" >>/home/oracle/.bash_profile
    		echo "LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib" >>/home/oracle/.bash_profile
    		echo "CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib" >>/home/oracle/.bash_profile
    		echo 'NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS"'>>/home/oracle/.bash_profile
    		echo "NLS_LANG=AMERICAN_AMERICA.ZHS16GBK" >>/home/oracle/.bash_profile
    		echo "export EDITOR=vi" >>/home/oracle/.bash_profile
    		echo "export TMP TMPDIR ORACLE_TERM CLASSPATH NLS_DATE_FORMAT ORACLE_BASE ORACLE_HOME ORACLE_SID PATH LD_LIBRARY_PATH NLS_LANG EDITOR" >>/home/oracle/.bash_profile 	
    	else
    		echo "======>oracle用户.bash_profile环境变量可能已经配置,无需再次配置<======"
    	fi
    }
    
    #yum安装oracle依赖库
    function install_lib_env(){
    	yum -y install  binutils-* compat-libstdc++-* compat-libcap1-* 
    			elfutils-libelf-* elfutils-libelf-devel-* gcc* 
    			gcc-c++-* glibc* glibc-common-* glibc-devel-* 
    			glibc-headers-* ksh-* libaio-* libaio-devel-* 
    			libgcc-* libstdc++-* libstdc++-devel* make-* 
    			sysstat-* unixODBC-* unixODBC-devel-* numactl-devel-* 
    			pdksh-* kernel-headers* uzip readline readline-devel
    	if [ $? == 0 ];then
    		echo "======>已成功安装oracle所需要的依赖库<======"
    	else
    		echo "======>检测不到可用的yum源<======"
    		exit
    	fi
    }
    
    #检测oracle的基础环境,如果没有则安装
    function check_base_env(){
    	echo "【检查当前用户】"
    	sleep 2
    	whoami
    	if [ `whoami` != "root" ];then
    		echo "======>请切换到root用户<====="
    		exit
    	fi
    	echo "【检查是否有jdk环境】"
    	sleep 2
    	java -version
    	if [ $? != 0 ];then
    		echo "======>没有检测到jdk<======"
    		exit 0
    	fi
    	echo "【检查是否已经上传oracle安装包到/tmp目录下】"
    	sleep 2
    	ls /tmp/*database*.zip
    	if [ $? != 0 ];then
    		echo "======>没有检测到oracle安装包<====="
    		exit 0
    	fi
    	echo "【检查是否有可用的yum源】"
    	sleep 2
    	install_lib_env
    	echo "【检查是否存在oracle的默认配置信息】"
    	sleep 2
    	config_file
    }
    #创建oracle用户以及用户组
    #配置oracle用户的环境变量以及创建oracle安装目录
    function config_base_env(){
    	#创建oinstall组和dba组以及oracle用户
    	groupadd oinstall && groupadd dba && useradd -g oinstall -G dba oracle && echo "oracle" | passwd --stdin oracle
    	set_bash_profile
    	mkdir -p /home/oracle/app/oracle
    	chmod -R 777 /home/oracle/app/oracle
    	chown -R oracle.oinstall /home/oracle
    	echo "【正在解压oracle压缩包】"
    	sleep 2
    	unzip -q -o /tmp/`ls /tmp/ | grep 1of2` -d /tmp/		
    	unzip -q -o /tmp/`ls /tmp/ | grep 2of2` -d /tmp/
    	chmod 777 /tmp
    	chmod -R 777 /tmp/database
    	chown -R oracle.oinstall /tmp/database
    	echo -e "`cat oracle.config | grep nventory_loc=` 
    inst_group=oinstall" > /etc/oraInst.loc
    	chown oracle:oinstall /etc/oraInst.loc
    	chmod 664 /etc/oraInst.loc
    	mkdir /home/oracle/etc
    	cp /tmp/database/response/* /home/oracle/etc/
    }
    
    #配置oracle运行环境参数
    function config_run_env(){
    	echo "【检测oracle运行环境limits参数并配置】"
    	sleep 2
    	grep "oracle" /etc/security/limits.conf
    	if [ $? != 0 ];then
    		cp /etc/security/limits.conf /etc/security/limits.conf.bak
    		echo "oracle soft nproc 2047" >>/etc/security/limits.conf
    		echo "oracle hard nproc 16384" >>/etc/security/limits.conf
    		echo "oracle soft nofile 1024" >>/etc/security/limits.conf
    		echo "oracle hard nofile 65536" >>/etc/security/limits.conf
    		echo "grid soft nproc 2047" >>/etc/security/limits.conf
    		echo "grid hard nproc 16384" >>/etc/security/limits.conf
    		echo "grid soft nofile 1024" >>/etc/security/limits.conf
    		echo "grid hard nofile 65536" >>/etc/security/limits.conf
    	else
    		echo "======>检测到oracle运行环境limits参数可能已经配置,无需再次配置<======"
    	fi
    	echo "【检测oracle运行环境sysctl参数并配置】"
    	sleep 2
    	grep net /etc/sysctl.conf && grep kernel /etc/sysctl.conf
    	if [ $? != 0 ];then
                    cp /etc/sysctl.conf /etc/sysctl.conf.bak
            	echo "fs.aio-max-nr = 1048576" >> /etc/sysctl.conf
    		echo "fs.file-max = 6815744" >> /etc/sysctl.conf
    		echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
    		echo "kernel.shmmax = 1054472192" >> /etc/sysctl.conf
    		echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
    		echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
    		echo "net.ipv4.ip_local_port_range = 9000 65500" >> /etc/sysctl.conf
    		echo "net.core.rmem_default = 262144" >> /etc/sysctl.conf
    		echo "net.core.rmem_max = 4194304" >> /etc/sysctl.conf
    		echo "net.core.wmem_default = 262144" >> /etc/sysctl.conf
    		echo "net.core.wmem_max = 1048586" >> /etc/sysctl.conf
    		echo "net.ipv4.tcp_wmem = 262144 262144 262144" >> /etc/sysctl.conf
    		echo "net.ipv4.tcp_rmem = 4194304 4194304 4194304" >> /etc/sysctl.conf
    		sysctl -p
    	else
                    echo "======>检测到oracle运行环境sysctl参数可能已经配置,无需再次配置<======"
            fi
    	echo "【检测oracle运行环境login参数并配置】"
    	sleep 2
    	grep "pam_limits.so" /etc/pam.d/login
    	if [ $? != 0 ];then
    		cp /etc/pam.d/login /etc/pam.d/login.bak
    		echo "session required pam_limits.so" >> /etc/pam.d/login
    	else
                    echo "======>检测到oracle运行环境sysctl参数可能已经配置,无需再次配置<======"
    	fi
    	echo "【检测oracle运行环境profile参数】"
            sleep 2
    	grep "oracle" /etc/profile | grep "grid"
    	if [ $? != 0 ];then
                    cp /etc/profile /etc/profile.bak
            	echo 'if [ $USER = "oracle" ]||[ $USER = "grid" ]; then' >>  /etc/profile
    		echo -e '	if [ $SHELL = "/bin/ksh" ]; then' >> /etc/profile
    		echo -e '		ulimit -p 16384' >> /etc/profile
    		echo -e '		ulimit -n 65536' >> /etc/profile
    		echo -e '	else' >> /etc/profile
    		echo -e '		ulimit -u 16384 -n 65536' >> /etc/profile
    		echo -e '	fi' >> /etc/profile
    		echo 'fi' >> /etc/profile
    		source /etc/profile
    	else
                    echo "======>检测到oracle运行环境profile参数可能已经配置,无需再次配置<======"
            fi
    }
    
    #oracle用户配置oracle安装文件install.rsp并运行安装命令
    function config_install_rsp(){
    	echo "【配置oracle安装文件】"
    	sleep 2
    	sed -i "s/oracle.install.option.*/oracle.install.option=INSTALL_DB_SWONLY/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/ORACLE_HOSTNAME=.*/ORACLE_HOSTNAME=`hostname`/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/UNIX_GROUP_NAME=.*/UNIX_GROUP_NAME=oinstall/g" /home/oracle/etc/db_install.rsp
    	nventory_loc=`grep nventory_loc $oracle_config_path | awk -F '=' '{print$2}' | sed 's///\\//g'`
    	sed -i "s/INVENTORY_LOCATION=.*/INVENTORY_LOCATION=$nventory_loc/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/SELECTED_LANGUAGES=.*/SELECTED_LANGUAGES=en,zh_CN/g" /home/oracle/etc/db_install.rsp
    	oracle_home=`grep ORACLE_HOME $oracle_config_path | awk -F '=' '{print$2}' | sed 's///\\//g'`
    	sed -i "s/ORACLE_HOME=.*/ORACLE_HOME=$oracle_home/g" /home/oracle/etc/db_install.rsp
    	oracle_bath=`grep ORACLE_BASE $oracle_config_path | awk -F '=' '{print$2}' | sed 's///\\//g'`
    	sed -i "s/ORACLE_BASE=.*/ORACLE_BASE=$oracle_path/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.InstallEdition=.*/oracle.install.db.InstallEdition=EE/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.isCustomInstall=false.*/oracle.install.db.isCustomInstall=true/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.DBA_GROUP=.*/oracle.install.db.DBA_GROUP=dba/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.OPER_GROUP=.*/oracle.install.db.OPER_GROUP=oinstall/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.type=.*/oracle.install.db.config.starterdb.type=GENERAL_PURPOSE/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.globalDBName=.*/oracle.install.db.config.starterdb.globalDBName=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.SID=.*/oracle.install.db.config.starterdb.SID=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.characterSet=AL32UTF8.*/oracle.install.db.config.starterdb.characterSet=ZHS16GBK/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.memoryLimit=.*/oracle.install.db.config.starterdb.memoryLimit=512/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/oracle.install.db.config.starterdb.password.ALL=.*/oracle.install.db.config.starterdb.password.ALL=`grep oracle.install.db.config.starterdb.password.ALL $oracle_config_path | awk -F '=' '{print$2}'`/g" /home/oracle/etc/db_install.rsp
    	sed -i "s/DECLINE_SECURITY_UPDATES=.*/DECLINE_SECURITY_UPDATES=true/g" /home/oracle/etc/db_install.rsp
    
    su - oracle << EOF
            cd /tmp/database
    
            ./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp
    
            install_log_path=`grep INVENTORY_LOCATION /home/oracle/etc/db_install.rsp | awk -F '=' '{print$2}'`/logs
    
            grep "Successfully Setup Software" $install_log_path/oraInstall*.out
    
            if [ $? == 0 ];then
                    echo "======>oracle安装成功<======"
            else
                    echo "======>oracle安装失败请切换到oracle用户进入到/tmp/database手动执行[./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp]并解决报错<======"
            fi
    EOF
    }
    #安装oracle监听
    function install_listener(){
    	echo "【安装oracle监听】"
    	sleep 2
    su - oracle << EOF
    	netca /silent /responsefile /home/oracle/etc/netca.rsp | tee -a ./listener.log
    	grep successful ./listener.log
    	if [ $? == 0 ];then
    		echo "======>安装oracle监听成功<======"
    	else
    		echo "======>安装oralce监听失败请切换到oracle用户手动执行[netca /silent /responsefile /home/oracle/etc/netca.rsp]并解决报错"
    	fi
    EOF
    }
    #创建数据库
    function config_database(){
    	echo "【配置oracle数据库】"
    	sleep 2
    	value=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`.`hostname`
    	sed -i "s/GDBNAME =.*/GDBNAME = "$value"/g" /home/oracle/etc/dbca.rsp
    	sid=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`
    	sed -i "s/SID =.*/SID = "$sid"/g" /home/oracle/etc/dbca.rsp
    	sys_passwd=`grep SYSPASSWORD $oracle_config_path | awk -F '=' '{print$2}'`
     	sed -i "s/.*SYSPASSWORD.*/SYSPASSWORD = "$sys_passwd"/g" /home/oracle/etc/dbca.rsp
    	system_passwd=`grep SYSTEMPASSWORD $oracle_config_path | awk -F '=' '{print$2}'`
     	sed -i "s/.*SYSTEMPASSWORD.*/SYSTEMPASSWORD = "$system_passwd"/g" /home/oracle/etc/dbca.rsp
    	oracle_data=`grep DATAFILEDESTINATION $oracle_config_path | awk -F '=' '{print$2}' | sed 's///\\//g'`
    	sed -i "s/.*DATAFILEDESTINATION.*/DATAFILEDESTINATION="$oracle_data"/g" /home/oracle/etc/dbca.rsp
    	oracle_data_bak=`grep RECOVERYAREADESTINATION $oracle_config_path | awk -F '=' '{print$2}' | sed 's///\\//g'`
    	sed -i "s/.*RECOVERYAREADESTINATION.*/RECOVERYAREADESTINATION="$oracle_data_bak"/g" /home/oracle/etc/dbca.rsp
    	sed -i "s/.*CHARACTERSET.*/CHARACTERSET = "ZHS16GBK"/g" /home/oracle/etc/dbca.rsp
    	sed -i "s/.*TOTALMEMORY.*/TOTALMEMORY="512"/g" /home/oracle/etc/dbca.rsp
    su - oracle << EOF
    
    	export DISPLAY=0.0
    
    	dbca -silent -responsefile /home/oracle/etc/dbca.rsp
    
    EOF
    }
    
    #p配置监听文件
    function config_listener(){
    	echo "【开始配置监听】"
    	sleep 2
    	oracle_home=`grep ORACLE_HOME $oracle_config_path | awk -F '=' '{print$2}'`
    	cp $oracle_home/network/admin/samples/tnsnames.ora $oracle_home/network/admin/
    	cp $oracle_home/network/admin/samples/listener.ora $oracle_home/network/admin/
    	sid=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`
    	ip=`ip addr | grep -w inet | sed -n '2p' | awk '{print$2}' | awk -F '/' '{print$1}'`
    	echo "$sid=" >> $oracle_home/network/admin/tnsnames.ora
    	echo "  (DESCRIPTION=" >> $oracle_home/network/admin/tnsnames.ora
    	echo "     (ADDRESS_LIST=" >> $oracle_home/network/admin/tnsnames.ora
    	echo "         (ADDRESS = (PROTOCOL = TCP)(HOST = $ip)(PORT = 1521))" >> $oracle_home/network/admin/tnsnames.ora
    	echo "       )" >> $oracle_home/network/admin/tnsnames.ora
    	echo "      (CONNECT_DATA =" >> $oracle_home/network/admin/tnsnames.ora
    	echo "         (SERVICE_NAME = $sid)" >> $oracle_home/network/admin/tnsnames.ora
    	echo "       )" >> $oracle_home/network/admin/tnsnames.ora
    	echo "   )" >> $oracle_home/network/admin/tnsnames.ora
    
    	echo "LISTENER = " >> $oracle_home/network/admin/listener.ora
    	echo "	(ADDRESS_LIST= " >> $oracle_home/network/admin/listener.ora
    	echo "        (ADDRESS=(PROTOCOL=tcp)(HOST=$ip)(PORT=1521)) " >> $oracle_home/network/admin/listener.ora
    	echo "        (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)) " >> $oracle_home/network/admin/listener.ora
    	echo "	) " >> $oracle_home/network/admin/listener.ora
    	echo "SID_LIST_LISTENER= " >> $oracle_home/network/admin/listener.ora
    	echo "   (SID_LIST= " >> $oracle_home/network/admin/listener.ora
    	echo "        (SID_DESC= " >> $oracle_home/network/admin/listener.ora
    	echo "          (GLOBAL_DBNAME=$sid) " >> $oracle_home/network/admin/listener.ora
    	echo "          (SID_NAME=$sid) " >> $oracle_home/network/admin/listener.ora
    	echo "          (ORACLE_HOME=$oracle_home) " >> $oracle_home/network/admin/listener.ora
    	echo "          (PRESPAWN_MAX=20) " >> $oracle_home/network/admin/listener.ora
    	echo "          (PRESPAWN_LIST= " >> $oracle_home/network/admin/listener.ora
    	echo "			(PRESPAWN_DESC=(PROTOCOL=tcp)(POOL_SIZE=2)(TIMEOUT=1)) " >> $oracle_home/network/admin/listener.ora
    	echo "          )" >> $oracle_home/network/admin/listener.ora
    	echo "        )" >> $oracle_home/network/admin/listener.ora
    	echo "    )" >> $oracle_home/network/admin/listener.ora
    	chown oracle.oinstall $oracle_home/network/admin/{listener.ora,tnsnames.ora}
    su - oracle << EOF
    
    	lsnrctl stop
    
    	lsnrctl start
    
    	lsnrctl status | grep $ip
    
    	if [ $? == 0 ];then
    		echo "======>监听配置启动成功<====="
    	else
    		echo "======>监听配置启动失败,请排查问题<====="
    	fi
    EOF
    }
    
    #启动数据库
    function startup_oracle(){
    	echo "【启动数据库】"
    	sleep 2
    	sid=`grep ORACLE_SID $oracle_config_path | awk -F '=' '{print$2}'`
    	ip=`ip addr | grep -w inet | sed -n '2p' | awk '{print$2}' | awk -F '/' '{print$1}'`
    	pfile_path=`grep ORACLE_BASE $oracle_config_path | awk -F '=' '{print$2}'`"/admin/$sid/pfile"
    	ora_filename=`ls $pfile_path | grep init.ora. | head -1`
    	sed -i "s/local_listener=.*/local_listener="(ADDRESS=(PROTOCOL=tcp)(HOST=$ip)(PORT=1521))"/g" $pfile_path/$ora_filename
    su - oracle << EOF
    
    	sqlplus / as sysdba
    
    	startup pfile='$pfile_path/$ora_filename'
    
    	exit
    
    	ps -axu | grep smon
    	if [ $? == 0 ];then
    		echo "======>oracle启动成功<======"
    	else
    		echo "======>oracle启动失败<======"
    	fi
    EOF
    }
    
    echo -e "======>使用必读<======"
    echo -e "33[1;41;33m 环境准备: 33[0m"
    echo -e "    33[31m 1.使用前请现将oracle安装包上传至/tmp下33[0m"
    echo -e "    33[31m 2.配置好可用的yum源33[0m"
    echo -e "    33[31m 3.建议安装好1.7版本的jdk33[0m"
    echo -e "33[1;41;33m 安装顺序: 33[0m"
    echo -e "    33[31m 1.配置初始环境33[0m"
    echo -e "    33[31m 2.安装oracle33[0m"
    echo -e "    33[31m 3.安装监听33[0m"
    echo -e "    33[31m 3.配置数据库33[0m"
    echo -e "    33[31m 4.配置监听33[0m"
    echo -e "    33[31m 4.启动数据库33[0m"
    read -p "======>如果尚未准备好环境请【Ctrl+c】结束脚本执行,[Enter]继续<======"
    echo "================================================"
    echo "检测初始环境[0] | 安装oracle[1] | 安装监听[2] | 配置数据库[3] | 配置监听[4] | 启动数据库[5]"
    echo "================================================"
    read -p "======>请选择你要安装的模块[0|1|2|3|4|5]:" num
    
    case $num in
    0)
    	check_base_env && config_base_env && config_run_env
    ;;
    1)
    	config_install_rsp
    ;;
    2)
    	install_listener
    ;;
    3)
    	config_database
    ;;
    4)
    	config_listener
    ;;
    5)	startup_oracle
    ;;
    *)
    	echo "你输入的数字不在选择服务提供范围内!"
    ;;
    esac
    
    狭路相逢勇者胜!
  • 相关阅读:
    1029. Two City Scheduling
    JS判断Android、iOS或浏览器的多种方法(四种方法)【转】
    layui select onchange事件【转】
    PHP 判断数据类型【转】
    php 对数组进行排序【转】
    php中怎么删除数组的第一个元素和最后一个元素【转】
    php数组操作之获取数组元素索引(键)值【转】
    HTML表单中 textarea标签的value属性赋值【转】
    为什么js的"关联数组"不能转成json字符串而对象可以?【转】
    CSS white-space属性是用来设置如何处理元素中的空白【转】
  • 原文地址:https://www.cnblogs.com/amcoder/p/13919448.html
Copyright © 2020-2023  润新知