2020年8月31日 星期一

4.8 自動啟動與關閉資料庫

先前介紹過 Oracle 資料庫的啟動與關閉必須進入 sqlplus 執行 startup 或是 shutdown ,在作業系統開機時並不會自動執行這些命令,所以每次主機重新開機之後必須要再手動將資料庫開啟,那麼要如何在主機開機之後自動地將 Oracle 資料庫啟動 ? 如果是 Windows 平台,在資料庫建立好的同時會在 Windows 服務上建立一個 Oracle 服務,隨著主機的開機與關機,這些服務也會自動控制 Oracle 資料庫的啟動與關閉,但是如果是 Unix 平台,在沒有 CRS 服務(RAC或 Oracle Restart)的狀態下,就必須自己寫 script 來設定資料庫的啟動與關閉。


Oracle 資料庫在安裝完成的同時已經在 $ORACLE_HOME/bin 底下幫我們建立好 DB 啟動與關閉的腳本了,分別為 dbstart (開啟 DB) 與 dbshut (關閉 DB),我們只需要在開機與關機的同時呼叫這個腳本就可以協助我們開啟與關閉資料庫了。


dbstart 與 dbshut 會去檢查 /etc/oratab 的內容來決定要開啟與關閉那些資料庫,/etc/oratab 內容裡面有三個區塊分別用 “:” 分開

這三個區塊分別表示 <ORACLE_SID>:<ORACLE_HOME>:<是否開啟>

dbstart / dbshut 會去判斷最後一個區塊是否為 “Y” ,如果為 “Y”,那麼就從指定的 ORACLE_HOME 底下來啟動這個資料庫,如果為 “N” 就表示不啟動這個資料庫。


了解 dbstart 與 dbshut 之後就可以簡單利用它來建立兩個腳本,start_db.sh 與 stop_db.sh 如下:


start_db.sh

ORA_HOME=/opt/app/oracle/product/11.2.0.4/dbhome_1

ORA_OWNER=oracle

su - $ORA_OWNER -c "dbstart $ORA_HOME"


stop_db.sh

ORA_HOME=/opt/app/oracle/product/11.2.0.4/dbhome_1

ORA_OWNER=oracle

su - $ORA_OWNER -c "dbshut $ORA_HOME"


建立完畢後授予執行權限:

# chmod 755 /etc/init.d/start_db.sh

# chmod 755 /etc/init.d/stop_db.sh


接下來我們只需要把它放入啟動程序就可以了,以 Linux 為例,啟動一般為 3或5,關閉一般為0或6,所以把 start_db.sh 放入 rc3.d與rc5.d,stop_db.sh 放入 rc0.d 與 rc6.d:

# cd /etc/rc3.d

# ln -s /etc/init.d/start_db.sh K99STARTDB

# cd /etc/rc5.d

# ln -s /etc/init.d/start_db.sh K99STARTDB

# cd /etc/rc0.d

# ln –s /etc/init.d/stop_db.sh K10STOPDB

# cd /etc/rc6.d

# ln –s /etc/init.d/stop_db.sh K10STOPDB


另一個方式則可以把資料庫啟動與關閉的腳本放入 Linux 服務當中,這樣就不需要自行連結至 run level 了。


首先於 /etc/init.d 建立 dbora 腳本:

#!/bin/sh

# chkconfig: 35 99 10

# description: Oracle auto start-stop script.


ORA_HOME=/opt/app/oracle/product/11.2.0.4/dbhome_1

ORA_OWNER=oracle

case $1 in

'start')

        su - $ORA_OWNER -c "dbstart $ORA_HOME"

        ;;

'stop')

        su - $ORA_OWNER -c "dbshut $ORA_HOME"   

       ;;

esac


前面 chkconfig 是用來設定 run level ,35 表示此服務會在 run level 3與5的時候啟動,在其他 level 的時候關閉;99表示此服務會在最後的順位啟動;10表示此服務會在最前面的順位停止。


接下來將此腳本註冊於 Linux 服務當中就可以了:

# chmod 755 /etc/init.d/dbora

# /sbin/chkconfig --add dbora


如果是 Linux 7 以上的版本,則必須使用 systemctl 來建立服務。首先於 /lib/systemd/system 底下建立 dbora.service ,裡面的內容呼叫我們之前建立的 start_db.sh 與 stop_db.sh:


/lib/system/system/dbora.service

[Unit]

Description=DB Auto Start and Stop

After=syslog.target network.target


[Service]

LimitMEMLOCK=infinity

LimitNOFILE=65535

RemainAfterExit=yes

User=oracle

Group=oinstall

Restart=no

ExecStart=/bin/bash -c '/etc/init.d/start_db.sh'

ExecStop=/bin/bash -c '/etc/init.d/stop_db.sh'


[Install]

WantedBy=multi-user.target


建立好之後再將此服務啟用就可以了:

# systemctl daemon-reload

# systemctl enable dbora.service



沒有留言:

張貼留言