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=` \ninst_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 '\tif [ $SHELL = "/bin/ksh" ]; then' >> /etc/profile
		echo -e '\t\tulimit -p 16384' >> /etc/profile
		echo -e '\t\tulimit -n 65536' >> /etc/profile
		echo -e '\telse' >> /etc/profile
		echo -e '\t\tulimit -u 16384 -n 65536' >> /etc/profile
		echo -e '\tfi' >> /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 "\033[1;41;33m 環境准備: \033[0m"
echo -e "    \033[31m 1.使用前請現將oracle安裝包上傳至/tmp下\033[0m"
echo -e "    \033[31m 2.配置好可用的yum源\033[0m"
echo -e "    \033[31m 3.建議安裝好1.7版本的jdk\033[0m"
echo -e "\033[1;41;33m 安裝順序: \033[0m"
echo -e "    \033[31m 1.配置初始環境\033[0m"
echo -e "    \033[31m 2.安裝oracle\033[0m"
echo -e "    \033[31m 3.安裝監聽\033[0m"
echo -e "    \033[31m 3.配置數據庫\033[0m"
echo -e "    \033[31m 4.配置監聽\033[0m"
echo -e "    \033[31m 4.啟動數據庫\033[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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM