天天看點

oracle資料庫連接配接自動關閉,Oracle 11g資料庫随系統自動啟動與關閉的設定方法

備注:此文根據網上文章實踐并修改所成。

RHEL6.8 64bit+Oracle Database 11g Enterprise Edition Release 11.2.0.1.0

Oracle 11g系統自動啟動與關閉的設定方法

第一步:要在Linux中設定允許ORACLE系統自動啟動,因為預設情況下是設定為不允許的。

1.root賬戶下修改/etc/oratab檔案:

# vi /etc/oratab

找到:orcl=/db/app/oracle/product/11.1.0/db_1 :N

改為:orcl=/db/app/oracle/product/11.1.0/db_1 :Y

就是将最後的N改為Y,将不允許自動啟動改為允許自動啟動。

2.修改Oracle自帶的啟動與關閉腳本,分别是dbstart和dbshut;

執行這兩個腳本就可以實作ORACLE腳本的啟動與關閉。

在oracle賬戶下修改$ORACLE_HOME/bin/dbstart檔案:

$ vi $ORACLE_HOME/bin dbstart

找到: ORACLE_HOME_LISTNER=$1

改為:ORACLE_HOME_LISTNER=$ORACLE_HOME

之是以做這一步,是因為在這個腳本自動生成的時候,也就是Oracle被安裝進Linux的時候,這個腳本并不知道你的ORACLE_HOME_LISTNER是什麼,現在安裝後要将這個參數顯示的寫明,這樣就不會在執行這個腳本的時候報出ORACLE_HOME_LISTNER沒有被指定的錯誤了。

注意:dbstart和dbshut腳本在10g版本之後,已經将監聽器的啟動與關閉合并進資料庫執行個體的啟動與關閉腳本裡面了,而不再是單獨分開的了。

同樣的方式,也要修改dbshut的這個參數。這裡就不再詳細寫出了,腳本在同一個目錄下。

第二步:寫一個腳本,把它注冊為一個系統服務,讓它在開機與關機的時候運作。它的作用就是調用并執行dbstart和dbshut。這樣不就實作了資料庫啟動與關閉了。

1.建立腳本名為oracle,腳本被放在/etc/init.d目錄中。

腳本代碼如下:

#!/bin/bash

# chkconfig: 2345 96 11

# description:Startup Script for oracle Databases

#/etc/rc.d/init.d/oradbstart

exportORACLE_BASE=/u01/app/oracle/

export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1

exportORACLE_SID=ORDB

exportPATH=$PATH:$ORACLE_HOME/bin

case "$1"in

start)

echo"-----startup oracle-----">> /var/log/oraclelog

su - oracle -c"$ORACLE_HOME/bin/dbstart"

touch /var/lock/subsys/oracle

echo"-----startup oracle successful-----">> /var/log/oraclelog

echo "OK"

;;

stop)

echo"-----shutdwn oracle-----">> /var/log/oraclelog

su - oracle -c"$ORACLE_HOME/bin/dbshut"

rm -f /var/lock/subsys/oracle

echo"-----shutdown oracle successful-----">> /var/log/oraclelog

echo "OK"

;;

reload|restart)

$0 stop

$1 start

;;

*)

echo "Usage:'basename $0' start|stop|reload|restart"

exit 1

esac

exit 0

儲存内容并退出。

現在,我要對這段腳本做一個關鍵解釋:

第一:# chkconfig: 2345 99 10 雖是一行注釋,但是确實關鍵的必不可少的一行,除非你不用chkconfig指令來自動生成符号連接配接檔案,而是完全采用手工建立。否則沒有這一行,執行chkconfig系統将會報出oracle沒有chkconfig服務權限的錯誤。

第二:su - oracle -c $ORACLE_HOME/bin/dbstart和touch /var/lock/subsys/oracle這兩行的作用是首先執行dbstart腳本啟動oracle,然後在服務活動清單目錄中建立一個與oracle這個服務同名的一個檔案,表示這個服務是活動的,也就是被啟動的。

第三:su - oracle -c $ORACLE_HOME/bin/dbshut 和rm -f /var/lock/subsys/oracle這兩行的作用是首先執行dbshut腳本關閉oracle,然後從服務活動清單目錄中删除那個與oracle同名的那個檔案,表示這個服務不是活動的,也就是已經被關閉。

那麼為什麼要做touch /var/lock/subsys/oracle和rm -f /var/lock/subsys/oracle這兩步呢?原因是跟Linux系統的機制有關的:Linux的判别一個服務是否被啟動的依據是在/var/lock/subsys/目錄下是否有與服務名相同的檔案,若有則表示這個服務已經被啟動了,在系統關閉的時候,Linux會把這裡面列出的服務全部關閉,并删掉與服務同名的檔案。若一個服務被啟動了,但卻在這個目錄裡沒有那個服務的同名檔案,則不會關閉那個服務。

網上的文章均将這個地方設定錯了,是以會發現,Oracle可以随系統啟動了,但卻沒有随系統關閉。

分析了/etc/rc.d/rc.local後才發現這個原理的。

經過試驗,果然如此。再分析MySQL的啟動與關閉腳本也是這樣做的,最終恍然大悟。原來如此。這個地方請大家注意了。

最後,就是将這個腳本注冊成為一個系統服務就可以了,方法有二:

其一:先給腳本配置設定可以被執行的權限。執行下面指令:

代碼如下:

#su - root

chown oracle /etc/init.d/oracle

chmod 775 /etc/init.d/oracle

再建立符号連結檔案。

chkconfig --add /etc/init.d/oracle,執行這個指令就需要你在腳本中寫上

# chkconfig: 2345 99 10 了。這樣當這個指令被執行的時候,會去oracle檔案中尋找這行注釋,并解析這行注釋,根據解析結果分别在/etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中建立符号連接配接檔案S99oracle檔案,這個檔案是系統啟動時要執行的,其實這個檔案是指向/etc/init.d/oracle的,啟動的時候系統向這個檔案發送一個start參數,也就執行了oracle檔案中的start分支了。

另外還會在/etc/rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d中建立K10oracle檔案,這個檔案時系統關閉時要執行的,其實這個檔案也是指向/etc/init.d/oracle的,關閉的時候系統向這個檔案發送一個stop參數,也就執行了oracle檔案中的stop分支了。

我想你應該明白# chkconfig: 2345 99 10 中這些數字的含義了吧:

指出2,3,4,5級别啟動這個服務,99是在相應的/etc/rc.d/rcN.d(N為前面指定的級别,這裡是2345)目錄下生成的連結檔案的序号(啟動優先級别)S99oracle,10為在除前面指出的級别對應的/etc/rc.d/rcN.d(N為除2345之外的級别)目錄生成的連結檔案的序号(服務停止的優先級别)K10oracle。至于為什麼在這些目錄中建立檔案和檔案的命名規則,這就要您對Linux的系統啟動流程有一個熟悉的了解了,在這就不詳談了。

其二:若您想嘗試一下手動建立符号連接配接檔案的樂趣,請執行如下指令:

代碼如下:

#su - root

ln -s /etc/init.d/oracle/etc/rc.d/rc2.d/S99oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc3.d/S99oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc4.d/S99oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc5.d/S99oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc0.d/K10oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc1.d/K10oracle

ln -s /etc/init.d/oracle/etc/rc.d/rc6.d/K10oracle

其實手動這樣操作作用效果和執行chkconfig --add oracle是一樣的。

到此,所有設定就完成了,下面進行一下測試:

#cd /etc/init.d

sh oracle start 或者service oracle start

執行後,看看/var/log目錄下的oraclelog檔案,裡面是不是有腳本的啟動分支輸出資訊呢?

sh oracle stop或者service oracle stop

執行後,看看/var/log目錄下的oraclelog檔案,裡面是不是有腳本的關閉分支輸出資訊呢?

若看到資訊,表示您設定成功了。若沒有,請再仔細設定一遍,并注意檔案的權限問題。