【實(shí)用腳本】一鍵安裝Oracle19c數(shù)據(jù)庫(kù)




完整腳本:
#!/bin/bash
#Oracle 一鍵安裝工具
log_file="/var/log/oracle_install_$(date +%Y%m%d_%H%M%S).log"
# 屏幕輸出只顯示狀態(tài)提示,日志文件記錄完整詳細(xì)信息
exec > >(tee -a "$log_file") 2>&1
echo -e "\e[1;35m###########################################################\e[0m"
echo -e "\e[1;35m# Oracle 一鍵安裝工具 #\e[0m"
echo -e "\e[1;35m###########################################################\e[0m"
echo -e "安裝日志路徑:${log_file}\n"
echo "==========================================================" >> "$log_file"
echo "Oracle 安裝開(kāi)始時(shí)間:$(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file"
echo "==========================================================" >> "$log_file"
# 步驟1/15:修改主機(jī)名
echo -e "【步驟1/15】修改主機(jī)名..."
echo "===== 步驟1:修改主機(jī)名 =====" >> "$log_file"
hostnamectl set-hostname myoracle # 保留詳細(xì)輸出到日志
if [ $? -eq 0 ]; then
echo -e "[SUCCESS] 主機(jī)名修改為 myoracle"
else
echo -e "[ERROR] 主機(jī)名修改失敗,詳細(xì)日志請(qǐng)查看:${log_file}"
fi
echo "當(dāng)前主機(jī)名:$(hostname)" >> "$log_file"
# 步驟2/15:添加主機(jī)名與IP對(duì)應(yīng)記錄
echo -e "\n【步驟2/15】添加主機(jī)名與IP對(duì)應(yīng)記錄..."
echo -e "\n===== 步驟2:添加主機(jī)名與IP對(duì)應(yīng)記錄 =====" >> "$log_file"
public_ip=$(hostname -I| grep -o -e '[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}.[0-9]\{1,3\}' |head -n 1)
node_name=$(hostname)
echo "獲取到的IP:${public_ip},主機(jī)名:${node_name}" >> "$log_file"
echo -e "${public_ip} ${node_name}">> /etc/hosts
# 屏幕只顯示添加的記錄,完整hosts文件寫(xiě)入日志
cat /etc/hosts | grep "${node_name}"
echo "完整/etc/hosts文件內(nèi)容:" >> "$log_file"
cat /etc/hosts >> "$log_file"
echo -e "[SUCCESS] 主機(jī)名與IP對(duì)應(yīng)記錄添加完成"
# 步驟3/15:關(guān)閉Selinux
echo -e "\n【步驟3/15】關(guān)閉Selinux..."
echo -e "\n===== 步驟3:關(guān)閉Selinux =====" >> "$log_file"
sed -i "s/SELINUX=enforcing/SELINUX=disabled/" /etc/selinux/config
setenforce 0 # 保留詳細(xì)輸出到日志
# 屏幕只顯示當(dāng)前模式,完整sestatus輸出寫(xiě)入日志
current_selinux=$(sestatus | grep "Current mode" | awk '{print $3}')
echo "Current mode: ${current_selinux}"
echo "完整sestatus輸出:" >> "$log_file"
sestatus >> "$log_file"
echo -e "[SUCCESS] Selinux 已設(shè)置為 disabled"
# 步驟4/15:關(guān)閉防火墻
echo -e "\n【步驟4/15】關(guān)閉防火墻..."
echo -e "\n===== 步驟4:關(guān)閉防火墻 =====" >> "$log_file"
systemctl stop firewalld # 保留詳細(xì)輸出到日志
systemctl disable firewalld # 保留詳細(xì)輸出到日志
# 屏幕只顯示激活狀態(tài),完整status輸出寫(xiě)入日志
firewall_status=$(systemctl status firewalld | grep "Active" | awk '{print $2,$3}')
echo " Active: ${firewall_status}"
echo "完整firewalld狀態(tài)輸出:" >> "$log_file"
systemctl status firewalld >> "$log_file"
echo -e "[SUCCESS] 防火墻已停止并禁用"
# 步驟5/15:準(zhǔn)備目錄并復(fù)制安裝包
echo -e "\n【步驟5/15】準(zhǔn)備目錄并復(fù)制安裝包..."
echo -e "\n===== 步驟5:準(zhǔn)備目錄并復(fù)制安裝包 =====" >> "$log_file"
current_dir=$(pwd)
target_dir="/soft"
echo "當(dāng)前目錄:${current_dir},目標(biāo)目錄:${target_dir}" >> "$log_file"
if [ ! -d "$target_dir" ]; then
mkdir -p "$target_dir"
echo -e "[INFO] 已創(chuàng)建目錄: $target_dir"
echo "創(chuàng)建目錄 ${target_dir} 成功" >> "$log_file"
else
echo -e "[INFO] 目錄 $target_dir 已存在"
echo "目錄 ${target_dir} 已存在" >> "$log_file"
fi
# 復(fù)制文件(保留詳細(xì)輸出到日志)
echo "開(kāi)始復(fù)制當(dāng)前目錄文件到 ${target_dir}..." >> "$log_file"
cp -r "$current_dir"/* "$target_dir"
if [ $? -eq 0 ]; then
echo -e "[SUCCESS] 已將當(dāng)前目錄所有文件復(fù)制至 $target_dir"
echo "復(fù)制文件完成,目標(biāo)目錄內(nèi)容:" >> "$log_file"
ls -la "$target_dir" >> "$log_file"
else
echo -e "[ERROR] 文件復(fù)制失敗,詳細(xì)日志請(qǐng)查看:${log_file}"
fi
# 步驟6/15:添加用戶組及用戶(移到Y(jié)um源安裝前,解決cvuqdisk依賴)
echo -e "\n【步驟6/15】添加用戶組及用戶..."
echo -e "\n===== 步驟6:添加用戶組及用戶 =====" >> "$log_file"
# 移除/dev/null,讓組創(chuàng)建詳細(xì)信息寫(xiě)入日志
groupadd -g 54321 oinstall || echo -e "[INFO] 組 oinstall 已存在"
groupadd -g 54322 dba || echo -e "[INFO] 組 dba 已存在"
groupadd -g 54323 oper || echo -e "[INFO] 組 oper 已存在"
groupadd -g 54324 backupdba || echo -e "[INFO] 組 backupdba 已存在"
groupadd -g 54325 dgdba || echo -e "[INFO] 組 dgdba 已存在"
groupadd -g 54326 kmdba || echo -e "[INFO] 組 kmdba 已存在"
useradd -u 54321 -g oinstall -G dba,backupdba,dgdba,kmdba,oper oracle || echo -e "[INFO] 用戶 oracle 已存在"
echo "oracle" | passwd --stdin oracle
# 驗(yàn)證用戶創(chuàng)建結(jié)果
if id oracle >/dev/null 2>&1; then
echo -e "[SUCCESS] oracle 用戶及組創(chuàng)建完成"
echo "oracle用戶詳細(xì)信息:" >> "$log_file"
id oracle >> "$log_file"
echo "用戶組列表:" >> "$log_file"
cat /etc/group | grep -E "oinstall|dba|oper|backupdba|dgdba|kmdba" >> "$log_file"
else
echo -e "[ERROR] oracle 用戶及組創(chuàng)建失敗,詳細(xì)日志請(qǐng)查看:${log_file}"
fi
# 步驟7/15:處理離線Yum源
echo -e "\n【步驟7/15】處理離線Yum源..."
echo -e "\n===== 步驟7:處理離線Yum源 =====" >> "$log_file"
cd /soft
if [ -f "oracle_repo.tar.gz" ]; then
echo -e "[INFO] 正在解壓離線Yum源包..."
echo "開(kāi)始解壓 oracle_repo.tar.gz..." >> "$log_file"
tar -xvf oracle_repo.tar.gz >> "$log_file" 2>&1 # 解壓詳情寫(xiě)入日志
if [ $? -eq 0 ]; then
echo "[INFO] 離線Yum源包解壓完成" >> "$log_file"
else
echo "[ERROR] 離線Yum源包解壓失敗" >> "$log_file"
fi
cd /soft/my_oracle_repo
echo -e "[INFO] 正在安裝離線Yum源(包含cvuqdisk)..."
echo "開(kāi)始安裝離線Yum源rpm包(CVUQDISK_GRP=oinstall)..." >> "$log_file"
# rpm安裝詳情寫(xiě)入日志,屏幕不顯示
CVUQDISK_GRP=oinstall rpm -ivh *.rpm --nodeps --force >> "$log_file" 2>&1
if [ $? -eq 0 ]; then
echo -e "[SUCCESS] 離線Yum源(含cvuqdisk)安裝完成"
echo "已安裝的rpm包列表:" >> "$log_file"
rpm -qa | grep -E "$(ls *.rpm | sed 's/.rpm//g')" >> "$log_file"
else
echo -e "[ERROR] 離線Yum源安裝失敗,詳細(xì)日志請(qǐng)查看:${log_file}"
fi
else
echo -e "[WARNING] 未找到 oracle_repo.tar.gz,離線Yum源安裝跳過(guò)"
echo "未找到 oracle_repo.tar.gz,跳過(guò)離線Yum源安裝" >> "$log_file"
fi
echo -e "[SUCCESS] Yum源配置完成"
# 步驟8/15:配置系統(tǒng)參數(shù)文件(sysctl.conf)
echo -e "\n【步驟8/15】配置系統(tǒng)參數(shù)文件..."
echo -e "\n===== 步驟8:配置sysctl.conf =====" >> "$log_file"
chmod 644 /etc/sysctl.conf
echo "添加Oracle相關(guān)系統(tǒng)參數(shù)到/etc/sysctl.conf..." >> "$log_file"
cat <<EOF >>/etc/sysctl.conf
#ORACLE SETTING
fs.aio-max-nr = 1048576
fs.file-max = 6815744
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
kernel.panic_on_oops = 1
kernel.shmmax = 2684354560
kernel.shmall = 655360
kernel.shmmni = 4096
vm.swappiness=10
vm.vfs_cache_pressure=200
EOF
echo "重新加載sysctl參數(shù)..." >> "$log_file"
sysctl -p # 保留參數(shù)加載詳細(xì)輸出到日志
echo "修改后的/etc/sysctl.conf文件內(nèi)容:" >> "$log_file"
cat /etc/sysctl.conf | grep -A 20 "#ORACLE SETTING" >> "$log_file"
echo -e "[SUCCESS] sysctl.conf 配置完成"
# 步驟9/15:配置資源限制及內(nèi)存掛載
echo -e "\n【步驟9/15】配置資源限制及內(nèi)存掛載..."
echo -e "\n===== 步驟9:配置limits.conf及內(nèi)存掛載 =====" >> "$log_file"
chmod 644 /etc/security/limits.conf
echo "添加Oracle用戶資源限制到/etc/security/limits.conf..." >> "$log_file"
cat <<EOF >>/etc/security/limits.conf
#ORACLE SETTING
oracle soft nproc 16384
oracle hard nproc 16384
oracle soft nofile 16384
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768
EOF
echo "添加/dev/shm掛載配置到/etc/fstab..." >> "$log_file"
echo "none /dev/shm tmpfs defaults,size=3096m 0 0" >> /etc/fstab
echo "重新掛載/dev/shm..." >> "$log_file"
mount -o remount /dev/shm # 保留掛載詳細(xì)輸出到日志
# 屏幕只顯示關(guān)鍵信息,完整df輸出寫(xiě)入日志
df -h /dev/shm | grep "shm" | awk '{print $1,$2,$3,$4,$5,$6}'
echo "完整/dev/shm掛載信息:" >> "$log_file"
df -h /dev/shm >> "$log_file"
echo "修改后的/etc/security/limits.conf文件內(nèi)容:" >> "$log_file"
cat /etc/security/limits.conf | grep -A 10 "#ORACLE SETTING" >> "$log_file"
echo -e "[SUCCESS] 資源限制及內(nèi)存掛載配置完成"
# 步驟10/15:配置系統(tǒng)環(huán)境變量(/etc/profile)
echo -e "\n【步驟10/15】配置系統(tǒng)環(huán)境變量..."
echo -e "\n===== 步驟10:配置/etc/profile =====" >> "$log_file"
chmod 644 /etc/profile
echo "添加Oracle用戶環(huán)境變量到/etc/profile..." >> "$log_file"
cat <<EOF >>/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
EOF
source /etc/profile
echo "修改后的/etc/profile文件相關(guān)內(nèi)容:" >> "$log_file"
cat /etc/profile | grep -A 10 "if [ \$USER = \"oracle\" ]" >> "$log_file"
echo -e "[SUCCESS] /etc/profile 配置完成"
# 步驟11/15:準(zhǔn)備Oracle安裝目錄及權(quán)限
echo -e "\n【步驟11/15】準(zhǔn)備Oracle安裝目錄及權(quán)限..."
echo -e "\n===== 步驟11:準(zhǔn)備Oracle安裝目錄及權(quán)限 =====" >> "$log_file"
install_dirs="/u01/app/oracle /u01/app/oraInventory /u01/app/oracle/product/19.0.0/dbhome_1"
echo "創(chuàng)建Oracle安裝目錄:${install_dirs}" >> "$log_file"
mkdir -p $install_dirs # 保留詳細(xì)輸出到日志
echo "設(shè)置目錄權(quán)限(oracle:oinstall,775)..." >> "$log_file"
chown -R oracle:oinstall /u01 # 保留詳細(xì)輸出到日志
chmod -R 775 /u01 # 保留詳細(xì)輸出到日志
# 屏幕只顯示關(guān)鍵權(quán)限信息,完整ls輸出寫(xiě)入日志
ls -ld /u01 | awk '{print $1,$3,$4,$9}'
echo "Oracle安裝目錄詳細(xì)權(quán)限:" >> "$log_file"
ls -la /u01/app/ >> "$log_file"
echo -e "[SUCCESS] Oracle安裝目錄及權(quán)限設(shè)置完成"
# 步驟12/15:配置Oracle用戶環(huán)境變量(.bash_profile)
echo -e "\n【步驟12/15】配置Oracle用戶環(huán)境變量..."
echo -e "\n===== 步驟12:配置oracle用戶.bash_profile =====" >> "$log_file"
echo "添加Oracle環(huán)境變量到/home/oracle/.bash_profile..." >> "$log_file"
cat <<EOF >>/home/oracle/.bash_profile
#for oracle
umask=022
export PS1
export TMP=/tmp
export LANG=en_US.UTF8
export TMPDIR=\$TMP
export ORACLE_UNQNAME=orcl11g
export ORACLE_SID=orcl11g;
export ORACLE_BASE=/u01/app/oracle;
export ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1;
export ORACLE_TERM=xterm;
export NLS_DATE_FORMAT="yyyy-mm-dd HH24:MI:SS";
export NLS_LANG=AMERICAN_AMERICA.UTF8;
export PATH=.:\$PATH:\$HOME/.local/bin:\$HOME/bin:\$ORACLE_HOME/bin;
export THREADS_FLAG=native;
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:/lib:/usr/lib
export CLASSPATH=\$ORACLE_HOME/JRE:\$ORACLE_HOME/jlib:\$ORACLE_HOME/rdbms/jlib
export ORACLE_OWNR=oracle
export PATH=\$PATH:\$ORACLE_HOME/bin
EOF
source /home/oracle/.bash_profile
echo "修改后的.bash_profile文件內(nèi)容:" >> "$log_file"
cat /home/oracle/.bash_profile | grep -A 25 "#for oracle" >> "$log_file"
echo "oracle用戶環(huán)境變量驗(yàn)證:" >> "$log_file"
su - oracle -c "echo \$ORACLE_HOME; echo \$ORACLE_SID" >> "$log_file"
echo -e "[SUCCESS] oracle 用戶環(huán)境變量配置完成"
# 步驟13/15:移動(dòng)并解壓Oracle安裝包
echo -e "\n【步驟13/15】移動(dòng)并解壓Oracle安裝包..."
echo -e "\n===== 步驟13:移動(dòng)并解壓Oracle安裝包 =====" >> "$log_file"
oracle_zip="/soft/LINUX.X64_193000_db_home.zip"
target_zip="/u01/app/oracle/product/19.0.0/dbhome_1/LINUX.X64_193000_db_home.zip"
if [ -f "$oracle_zip" ]; then
echo "移動(dòng)Oracle安裝包:${oracle_zip} -> ${target_zip}" >> "$log_file"
mv "$oracle_zip" "$target_zip" # 保留詳細(xì)輸出到日志
cd /u01/app/oracle/product/19.0.0/dbhome_1
echo -e "[INFO] 正在解壓Oracle安裝包(此過(guò)程可能需要幾分鐘)..."
echo "開(kāi)始解壓Oracle安裝包:${target_zip}" >> "$log_file"
# 解壓詳細(xì)輸出寫(xiě)入日志,屏幕不顯示文件列表
unzip LINUX.X64_193000_db_home.zip >> "$log_file" 2>&1
if [ $? -eq 0 ]; then
echo -e "[SUCCESS] Oracle安裝包移動(dòng)并解壓完成"
echo "解壓后目錄大小:" >> "$log_file"
du -sh /u01/app/oracle/product/19.0.0/dbhome_1 >> "$log_file"
else
echo -e "[ERROR] Oracle安裝包解壓失敗,詳細(xì)日志請(qǐng)查看:${log_file}"
fi
else
echo -e "[WARNING] 未找到 Oracle 安裝包(${oracle_zip}),安裝包解壓跳過(guò)"
echo "未找到Oracle安裝包:${oracle_zip},跳過(guò)解壓" >> "$log_file"
fi
# 步驟14/15:配置安裝響應(yīng)文件(db_install.rsp)
echo -e "\n【步驟14/15】配置安裝響應(yīng)文件..."
echo -e "\n===== 步驟14:配置db_install.rsp =====" >> "$log_file"
response_dir="/u01/app/oracle/product/19.0.0/dbhome_1/install/response"
if [ -d "$response_dir" ]; then
mkdir -p /home/oracle/etc
chown -R oracle.oinstall /home/oracle/etc
echo "復(fù)制響應(yīng)文件模板到/soft:${response_dir}/* -> /soft/" >> "$log_file"
cp "$response_dir"/* /soft/ # 保留詳細(xì)輸出到日志
chmod 777 /soft/*.rsp
chown -R oracle:oinstall /soft
echo "創(chuàng)建db_install.rsp響應(yīng)文件:/soft/db_install.rsp" >> "$log_file"
cat <<EOF >/soft/db_install.rsp
oracle.install.responseFileVersion=/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0
oracle.install.option=INSTALL_DB_SWONLY
UNIX_GROUP_NAME=oinstall
INVENTORY_LOCATION=/u01/app/oraInventory
ORACLE_HOME=/u01/app/oracle/product/19.0.0/dbhome_1
ORACLE_BASE=/u01/app/oracle
oracle.install.db.InstallEdition=EE
oracle.install.db.OSDBA_GROUP=dba
oracle.install.db.OSOPER_GROUP=oper
oracle.install.db.OSBACKUPDBA_GROUP=backupdba
oracle.install.db.OSKMDBA_GROUP=kmdba
oracle.install.db.OSRACDBA_GROUP=dba
oracle.install.db.OSDGDBA_GROUP=dgdba
EOF
chown -R oracle:oinstall /soft/db_install.rsp
chmod 660 /soft/db_install.rsp
chown -R oracle:oinstall /u01/app/oracle/product/19.0.0/dbhome_1
echo "db_install.rsp文件內(nèi)容:" >> "$log_file"
cat /soft/db_install.rsp >> "$log_file"
echo -e "[SUCCESS] db_install.rsp 配置完成"
else
echo -e "[WARNING] 安裝包解壓目錄不存在(${response_dir}),響應(yīng)文件配置跳過(guò)"
echo "安裝包解壓目錄不存在:${response_dir},跳過(guò)響應(yīng)文件配置" >> "$log_file"
fi
# 步驟15/15:安裝Oracle軟件、配置監(jiān)聽(tīng)及創(chuàng)建數(shù)據(jù)庫(kù)(保留完整日志)
echo -e "\n【步驟15/15】安裝Oracle軟件及配置數(shù)據(jù)庫(kù)...(此過(guò)程可能需要30分鐘以上,請(qǐng)耐心等待)"
echo -e "\n===== 步驟15:安裝Oracle軟件及配置數(shù)據(jù)庫(kù) =====" >> "$log_file"
run_installer="/u01/app/oracle/product/19.0.0/dbhome_1/runInstaller"
db_rsp="/soft/db_install.rsp"
if [ -f "$run_installer" ] && [ -f "$db_rsp" ]; then
echo -e "[INFO] 正在安裝Oracle軟件..."
echo "開(kāi)始執(zhí)行Oracle安裝:${run_installer} -silent -responseFile ${db_rsp}" >> "$log_file"
echo "Oracle安裝詳細(xì)日志開(kāi)始($(date '+%Y-%m-%d %H:%M:%S')):" >> "$log_file"
# 保留Oracle安裝完整輸出(包括進(jìn)度、報(bào)錯(cuò))寫(xiě)入日志
su - oracle -c "$run_installer -silent -responseFile $db_rsp"
echo "Oracle安裝執(zhí)行完成($(date '+%Y-%m-%d %H:%M:%S'))" >> "$log_file"
echo "執(zhí)行orainstRoot.sh腳本..." >> "$log_file"
/u01/app/oraInventory/orainstRoot.sh # 保留詳細(xì)輸出到日志
echo "執(zhí)行root.sh腳本..." >> "$log_file"
/u01/app/oracle/product/19.0.0/dbhome_1/root.sh # 保留詳細(xì)輸出到日志
echo -e "\n[INFO] 正在配置監(jiān)聽(tīng)..."
netca_rsp_src="/u01/app/oracle/product/19.0.0/dbhome_1/assistants/netca/netca.rsp"
netca_rsp="/soft/netca.rsp"
if [ -f "$netca_rsp_src" ]; then
echo "復(fù)制監(jiān)聽(tīng)配置文件:${netca_rsp_src} -> ${netca_rsp}" >> "$log_file"
cp "$netca_rsp_src" "$netca_rsp"
chmod 644 "$netca_rsp"
echo "修改netca.rsp配置文件..." >> "$log_file"
cat <<EOF >>"$netca_rsp"
[GENERAL]
RESPONSEFILE_VERSION="19.0"
CREATE_TYPE="CUSTOM"
[oracle.net.ca]
INSTALLED_COMPONENTS={"server","net8","javavm"}
INSTALL_TYPE="typical"
LISTENER_NUMBER=1
LISTENER_NAMES={"LISTENER"}
LISTENER_PROTOCOLS={"TCP;1521"}
LISTENER_START="LISTENER"
NAMING_METHODS={"TNSNAMES","ONAMES","HOSTNAME"}
NSN_NUMBER=1
NSN_NAMES={"EXTPROC_CONNECTION_DATA"}
NSN_SERVICE={"PLSExtProc"}
NSN_PROTOCOLS={"TCP;HOSTNAME;1521"}
EOF
echo "netca.rsp文件內(nèi)容:" >> "$log_file"
cat "$netca_rsp" >> "$log_file"
sleep 60
echo "開(kāi)始配置監(jiān)聽(tīng):netca -silent -responsefile ${netca_rsp}" >> "$log_file"
# 保留監(jiān)聽(tīng)配置完整輸出到日志
su - oracle -c "/u01/app/oracle/product/19.0.0/dbhome_1/bin/netca -silent -responsefile $netca_rsp"
echo -e "[SUCCESS] 監(jiān)聽(tīng)配置完成"
echo "監(jiān)聽(tīng)狀態(tài)驗(yàn)證:" >> "$log_file"
su - oracle -c "lsnrctl status" >> "$log_file"
else
echo -e "[WARNING] 監(jiān)聽(tīng)配置文件缺失(${netca_rsp_src}),監(jiān)聽(tīng)配置跳過(guò)"
echo "監(jiān)聽(tīng)配置文件缺失:${netca_rsp_src},跳過(guò)監(jiān)聽(tīng)配置" >> "$log_file"
fi
echo -e "\n[INFO] 正在創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例..."
dbca_rsp_src="/u01/app/oracle/product/19.0.0/dbhome_1/assistants/dbca/dbca.rsp"
dbca_rsp="/soft/dbca.rsp"
if [ -f "$dbca_rsp_src" ]; then
echo "復(fù)制數(shù)據(jù)庫(kù)配置文件:${dbca_rsp_src} -> ${dbca_rsp}" >> "$log_file"
cp "$dbca_rsp_src" "$dbca_rsp"
chmod 644 "$dbca_rsp"
echo "修改dbca.rsp配置文件..." >> "$log_file"
cat <<EOF >>"$dbca_rsp"
responseFileVersion=/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0
templateName=General_Purpose.dbc
gdbName=orcl11g
sid=orcl11g
databaseConfigType=SI
sysPassword=Tiger@123
systemPassword=Tiger@123
characterSet=AL32UTF8
nationalCharacterSet=UTF8
listeners=LISTENER
memoryPercentage=40
databaseType=MULTIPURPOSE
automaticMemoryManagement=false
EOF
echo "dbca.rsp文件內(nèi)容:" >> "$log_file"
cat "$dbca_rsp" >> "$log_file"
sleep 60
echo "開(kāi)始創(chuàng)建數(shù)據(jù)庫(kù)實(shí)例:dbca -silent -createDatabase ..." >> "$log_file"
echo "數(shù)據(jù)庫(kù)創(chuàng)建詳細(xì)日志開(kāi)始($(date '+%Y-%m-%d %H:%M:%S')):" >> "$log_file"
# 保留數(shù)據(jù)庫(kù)創(chuàng)建完整輸出到日志
su - oracle -c "/u01/app/oracle/product/19.0.0/dbhome_1/bin/dbca -silent -createDatabase -templateName /u01/app/oracle/product/19.0.0/dbhome_1/assistants/dbca/templates/General_Purpose.dbc -gdbname orcl11g -sid orcl11g -syspassword Tiger@123 -systempassword Tiger@123 -emConfiguration NONE -characterSet ZHS16GBK"
echo "數(shù)據(jù)庫(kù)創(chuàng)建執(zhí)行完成($(date '+%Y-%m-%d %H:%M:%S'))" >> "$log_file"
echo -e "[SUCCESS] 數(shù)據(jù)庫(kù)實(shí)例創(chuàng)建完成"
echo "數(shù)據(jù)庫(kù)狀態(tài)驗(yàn)證:" >> "$log_file"
su - oracle -c "sqlplus -S / as sysdba <<EOF
select status from v\$instance;
exit;
EOF" >> "$log_file"
else
echo -e "[WARNING] 數(shù)據(jù)庫(kù)配置文件缺失(${dbca_rsp_src}),數(shù)據(jù)庫(kù)創(chuàng)建跳過(guò)"
echo "數(shù)據(jù)庫(kù)配置文件缺失:${dbca_rsp_src},跳過(guò)數(shù)據(jù)庫(kù)創(chuàng)建" >> "$log_file"
fi
echo -e "[SUCCESS] Oracle軟件安裝及數(shù)據(jù)庫(kù)配置完成"
else
echo -e "[WARNING] 安裝程序(${run_installer})或響應(yīng)文件(${db_rsp})缺失,Oracle軟件安裝及數(shù)據(jù)庫(kù)配置跳過(guò)"
echo "安裝程序或響應(yīng)文件缺失:${run_installer} / ${db_rsp},跳過(guò)安裝" >> "$log_file"
fi
echo -e "\n==========================================================" >> "$log_file"
echo "Oracle 安裝結(jié)束時(shí)間:$(date '+%Y-%m-%d %H:%M:%S')" >> "$log_file"
echo "==========================================================" >> "$log_file"
echo -e "\n\e[1;32m###########################################################\e[0m"
echo -e "\e[1;32m# Oracle 安裝流程完成 #\e[0m"
echo -e "\e[1;32m###########################################################\e[0m"
echo -e "\n\e[1;33m安裝完成提示:\e[0m"
echo -e "1. 安裝日志路徑:${log_file}(包含完整執(zhí)行細(xì)節(jié)和報(bào)錯(cuò)信息)"
echo -e "2. 數(shù)據(jù)庫(kù)信息:"
echo -e " - SID:orcl11g"
echo -e " - 端口:1521"
echo -e " - 管理員賬號(hào):sys/system"
echo -e " - 管理員密碼:Tiger@123"
echo -e "3. 登錄方式:su - oracle 后執(zhí)行 sqlplus / as sysdba"
echo -e "4. 若安裝失敗,請(qǐng)查看日志文件排查問(wèn)題(重點(diǎn)關(guān)注 [ERROR] 標(biāo)記)"
目錄文件:

浙公網(wǎng)安備 33010602011771號(hào)