【DB寶49】Oracle如何設定DB、監聽和EM開機啟動

lhrbest發表於2021-04-26

一、Windows系統

Oracle提供了隨作業系統啟動而啟動的功能,在Windows和Linux中,分別有不同的設定方法。

在Windows中,可以修改“我的電腦-->管理-->服務-->OracleService$ORACLE_SID”,或直接使用Win+R鍵開啟執行視窗,輸入services.msc即可開啟服務,找到相應的Oracle服務,然後將其屬性中的啟動型別修改成自動。一般在Windows系統上安裝完後會自動設定成自動。

二、Linux系統

對於Linux/Unix作業系統,如果想設定自動重啟,那麼該如何操作呢?對此Oracle提供了dbstart命令用於啟動。

首先,第一步,需要修改/etc/oratab檔案,將N修改為Y

[root@oracle ~]# vim /etc/oratab
LHR11G:/u01/app/oracle/product/11.2.0.4/dbhome_1:Y     #將N改為Y

檔案/etc/oratab由root.sh指令碼建立,在用dbca命令建立例項時也會更新這個檔案。當$ORACLE_SID:$ORACLE_HOME:<N|Y>設定為Y時,允許例項自啟動,當設定為N時,則不允許自啟動。這個檔案裡的配置僅僅起一個開關的作用,其並不會具體的執行啟動和關閉,具體的操作由$ORACLE_HOME/bin/dbstart和dbshut指令碼來實現。這2個指令碼在執行時會檢查/etc/oratab檔案裡的配置,為Y時才能繼續執行。

接下來需要配置開機啟動檔案,有2種辦法:

方法1:配置/etc/rc.d/rc.local檔案(推薦)

在配置了/etc/oratab檔案後,然後將以下指令碼新增到/etc/rc.d/rc.local或/etc/rc.local檔案中(/etc/rc.local是/etc/rc.d/rc.local的軟連線檔案):

cat >> /etc/rc.d/rc.local <<"EOF"
# 重啟DB
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
su oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"

# 重啟EM
export ORACLE_UNQNAME=LHR11G
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
EOF

該方法需要注意以下問題:
1、若環境中沒有建立EM,則可以不用新增ORACLE_UNQNAME和emctl這2行

2、從Oracle 12c開始,由於EMDE(Enterprise Manager Database Express)替代了原有的EMDC(Enterprise Manager Database Control),所以,不再單獨設定EM相關內容,只需要配置DB即可,例如:

cat >> /etc/rc.d/rc.local <<"EOF"
# 重啟DB
export ORACLE_HOME=/u01/app/oracle/product/12.1.0.2/dbhome_1
su oracle -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
EOF

3、在CentOS 7中,/etc/rc.d/rc.local的許可權被降低了,所以需要執行如下命令賦予其可執行許可權:

chmod +x /etc/rc.d/rc.local

最後就可以重啟OS做測試工作了。

方法2:配置service服務

1. 建立啟動指令碼

使用root使用者建立指令碼/etc/rc.d/init.d/oracle,指令碼內容如下,注意修改第6-9行的相關內容:

#!/bin/bash 
# chkconfig: 2345 99 10 
# description: Startup Script for oracle Databases 
# /etc/rc.d/init.d/oracle

export ORACLE_BASE=/u01/app/oracle/
export ORACLE_HOME=/u01/app/oracle/product/11.2.0.4/dbhome_1
export PATH=$PATH:$ORACLE_HOME/bin
export ORACLE_UNQNAME=LHR11G

echo " " >> /var/log/oraclelog
echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog

case "$1" in
start)
echo "-----startup oracle-----" >> /var/log/oraclelog
su oracle -c "$ORACLE_HOME/bin/dbstart"
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/oracle
echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog
echo "-----startup oracle successful-----" >> /var/log/oraclelog
echo "OK" 
;;

stop)
echo "-----shutdown oracle-----" >> /var/log/oraclelog
su oracle -c "$ORACLE_HOME/bin/dbshut"
su oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"
rm -f /var/lock/subsys/oracle
echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelogg
echo "-----shutdown oracle successful-----" >> /var/log/oraclelog
echo "OK" 
;;

restart)
echo "-----shutdown oracle-----" >> /var/log/oraclelog
su oracle -c "$ORACLE_HOME/bin/dbshut"
su oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"
rm -f /var/lock/subsys/oracle
echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog
echo "-----shutdown oracle successful-----" >> /var/log/oraclelog

echo "-----startup oracle-----" >> /var/log/oraclelog
su oracle -c "$ORACLE_HOME/bin/dbstart"
su oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"
touch /var/lock/subsys/oracle
echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog
echo "-----startup oracle successful-----" >> /var/log/oraclelog
echo "OK" 
;;

*)
echo "Usage: 'basename $0' start|stop|restart" 
exit 1
esac
exit 0

2. 給指令碼設定許可權

[root@oracle ~]# chmod 755 /etc/rc.d/init.d/oracle

3.建立服務

[root@oracle ~]# chkconfig --add oracle
[root@oracle ~]# chkconfig oracle on
[root@oracle ~]# chkconfig --list oracle
oracle          0:off   1:off   2:on    3:on    4:on    5:on    6:off

4.檢查是否生效

先使用root使用者測試服務是否生效:

[root@oracle ~]# service oracle stop
[root@oracle ~]# service oracle start
[root@oracle ~]# service oracle restart

再重啟OS,驗證是否生效。

三、Oracle 18c版本

從Oracle 18c開始,對於單機環境來說,可以使用rpm包來直接安裝Oracle軟體,在安裝完成後,會生成一個指令碼,類似 /etc/init.d/oracledb_$ORACLE_SID-$ORACLE_VERSION,該指令碼可以用來啟動和關閉Oracle軟體,所以也可以使用該指令碼來直接配置開機啟動:

cat >> /etc/rc.d/rc.local <<"EOF"
/etc/init.d/oracledb_ORCLCDB-18c start
/etc/init.d/oracledb_lhrsdb-18c start
EOF

chmod +x /etc/rc.d/rc.local

重啟OS,測試通過。

四、總結

對於這2種方法,需要注意的幾個問題:

  1. 若有多個例項,那麼多個例項都會自動啟動。
  2. 監聽也會自動啟動。
  3. 若資料庫小於18c,則重啟的詳細日誌為:$ORACLE_HOME/shutdown.log$ORACLE_HOME/startup.log。從Oracle 18c開始,dbstart的日誌檔案在$ORACLE_HOME/rdbms/log/startup.log
  4. oracle使用者的環境變數可以不用配置。
  5. ORACLE_UNQNAME的作用是設定EM的環境變數,emctl是啟動OEM,若沒有則可以不用設定。
  6. ORACLE_HOME的作用是設定資料庫監聽的環境變數。
  7. 對於Oracle 10.2.0.1來說,監聽不能自動啟動。需要修改指令碼$ORACLE_HOME/bin/dbstart,修改ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle為“ORACLE_HOME_LISTNER=$1
  8. 對於ASM、RAC環境,只需要將資料庫資源註冊到CRS中,即可實現開機啟動。
  9. 從Oracle 18c開始,可以使用指令碼 /etc/init.d/oracledb_$ORACLE_SID-$ORACLE_VERSION來啟動Oracle資料庫。
  10. 以上方法在Oracle 10g、11g、12cR1(12.1.0.2)、12cR2(12.2.0.1)、18c(12.2.0.2)和19c(12.2.0.3)中測試通過。

About Me


● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除
● 本文原始發表於個人微 信公眾號(DB寶)上
● QQ群號: 230161599 、618766405,微信群私聊
● 個人QQ號(646634621),微 訊號(db_bao),註明新增緣由
● 版權所有,歡迎分享本文,轉載請保留出處

相關文章