以下我們在Centos7操作系統上以oracle11g為例來進行一下安裝
環境准備
JDK1.7(這里不再闡述)
可用的yum源(這里不再闡述)
操作用戶
root
開始安裝
基礎環境配置
操作節點:192.168.22.1 操作用戶:root
- 修改主機名IP映射關系,編輯/etc/hosts文件
192.168.22.1 risen
- 修改主機名,編輯/etc/hostname文件
risen
- 修改系統名稱,編輯文件/etc/redhat-release並修改為redhat-7 (此步驟可跳過,后續安裝如果不報錯可不修改)
安裝必備的依賴環境
- 安裝環境依賴
操作節點: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
-
將安裝包通過sftp或者客戶端工具或者rz命令等方式上傳至/tmp目錄下
-
解壓壓縮包
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
- 在/home/oracle/目錄下新建目錄etc,並執行以下命令
mkdir /home/oracle/etc
cp /tmp/database/response/* /home/oracle/etc/
- 創建oraInst.loc文件,進入到/etc/目錄下並新建oraInst.loc文件,並新增以下內容
nventory_loc=/home/oracle/app/oraInventory
inst_group=oinstall
- 修改oraInst.loc文件權限
chown oracle:oinstall /etc/oraInst.loc
chmod 664 /etc/oraInst.loc
修改系統限制文件
操作節點:192.168.22.1 操作用戶:root
- 備份limits.conf
cp /etc/security/limits.conf /etc/security/limits.conf.bak
- 編輯/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
- 備份login
cp /etc/pam.d/login /etc/pam.d/login.bak
- 編輯/etc/pam.d/login,並在文件末尾加上以下內容(如果已經存在則跳過此步驟)
session required pam_limits.so
設置系統環境變量
操作節點:192.168.22.1 操作用戶:root
- 備份profile
cp /etc/profile /etc/profile.bak
- 編輯/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
- 使環境變量生效
source /etc/profile
設置系統參數文件
操作節點:192.168.22.1 操作用戶:root
- 備份sysctl.conf
cp /etc/sysctl.conf /etc/sysctl.conf.bak
- 編輯/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
- 進入到/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
- 進入到/tmp/database目錄下執行以下命令
./runInstaller -silent -ignorePrereq -responseFile /home/oracle/etc/db_install.rsp
需要等一會。若果沒有問題,則繼續下一步,如果有問題,查看相應的日志去解決,出現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
- 完成之前步驟說明oracle的基本命令已經安裝,並且在最開始我們已經將oracle的安裝目錄中的命令配置到了環境變量中,現在只需要使環境變量生效執行命令
source /home/oracle/.bash_profile
- 開始安裝監聽
netca /silent /responsefile /home/oracle/etc/netca.rsp
(此處可能會報錯命令解析錯誤,需要手動寫入此命令,不然直接復制可能帶有其它隱藏特殊字符)通過查看端口命令查看1521端口是否啟動。
修改數據庫配置並安裝
操作節點:192.168.22.1 操作用戶:oracle
- 進入到/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
- 查看監聽狀態
lsnrctl status
- 配置監聽文件
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/
- 修改監聽名稱解析文件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)
)
)
- 修改監聽文件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))
)
)
)
- 重啟監聽
lsnrctl stop
lsnrctl start
啟動oracle
操作節點:192.168.22.1 操作用戶:oracle
- 執行以sysdba的角色登錄命令
sqlplus / as sysdba
- 執行啟動命令
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
-
最后附上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