linux oracle11g开机,Linux 下Oracle11g 自动随系统启动
安裝完畢 Oracle 11g 每次都得手動啟動 | 停止數(shù)據(jù)庫(dbstart | dbshut)、監(jiān)聽器(lsnrctl)、控制臺(emtcl),以下步驟實(shí)現(xiàn)數(shù)據(jù)庫的自動啟動:
1.首先修改/etc/oratab文件#vi
/etc/oratab
找到orcl=/u01/app/oracle/product/11.1.0/db_1:N這一行
改為:
orcl=/u01/app/oracle/product/11.1.0/db_1:Y
也就是將最后的N改為Y,意思是將不允許自動啟動改為允許自動啟動。
2.修改ORACLE自帶的啟動與關(guān)閉腳本,
分別是dbstart和
dbshut。執(zhí)行這兩個(gè)腳本就可以實(shí)現(xiàn)ORACLE腳本的啟動與關(guān)閉。在oracle賬戶下修改$ORACLE_HOME/bin/dbstart文件
#su
-oracle
$cd $ORACLE_HOME/bin
$vi
dbstart
找到ORACLE_HOME_LISTNER=$1這一行
改為:ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做這一步,是因?yàn)樵谶@個(gè)腳本自動生成的時(shí)候,也就是ORACLE被安裝進(jìn)RHEL的時(shí)候,這個(gè)腳本并不知道你的ORACLE_HOME_LISTNER是什么,現(xiàn)在要將這個(gè)參數(shù)顯示的寫明,這樣就不會在執(zhí)行這個(gè)腳本的時(shí)候報(bào)ORACLE_HOME_LISTNER沒有被指定的錯(cuò)誤了。注意:dbstart和dbshut腳本在10g之后就已經(jīng)將監(jiān)聽器的啟動與關(guān)閉合并進(jìn)數(shù)據(jù)庫實(shí)例的啟動與關(guān)閉腳本里面了。而不再是單獨(dú)分開的了。
同樣的方式,我們也要修改dbshut的這個(gè)參數(shù)。這里就不再詳細(xì)寫出了,他們在同一個(gè)目錄下。
3.寫一個(gè)腳本,把它注冊為一個(gè)系統(tǒng)服務(wù),讓它在開機(jī)與關(guān)機(jī)的時(shí)候運(yùn)行。它的作用就是調(diào)用并執(zhí)行dbstart和dbshut。這樣不就實(shí)現(xiàn)了數(shù)據(jù)庫啟動與關(guān)閉了嗎?!這個(gè)腳本被放在/etc/init.d目錄中,腳本的名字是oracle11
腳本如下:
# !/bin/sh
# chkconfig: 345 61 61
# description: Oracle 11g AutoRun Services
# /etc/init.d/oracle
#
# Run-level Startup script. for the Oracle Instance, Listener, and
# Web Interface
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=ORCL
export PATH=$PATH:$ORACLE_HOME/bin
ORA_OWNR="oracle"
# if the executables do not exist -- display error
if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]
then
echo "Oracle startup: cannot start"
exit 1
fi
# depending on parameter -- startup, shutdown, restart
# of the instance and listener or usage display
case "$1" in
start)
# Oracle listener and instance startup
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbstart
touch /var/lock/subsys/oracle11
su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl start dbconsole"
echo "Oracle Start Succesful!OK."
;;
stop)
# Oracle listener and instance shutdown
su $ORA_OWNR -lc "$ORACLE_HOME/bin/emctl stop dbconsole"
su $ORA_OWNR -lc $ORACLE_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle11
echo "Oracle Stop Succesful!OK."
;;
reload|restart)
$0 stop
$0 start
;;
*)
echo $"Usage: `basename $0` {start|stop|reload|reload}"
exit 1
esac
exit 0
保存并退出。
這段腳本的關(guān)鍵解釋:
第一:#chkconfig:345 99
10雖是一行注釋,但是確實(shí)關(guān)鍵的必不可少的一行,除非你不用chkconfig命令來自動生成符號連接文件,而是完全采用手工創(chuàng)建。否則沒有這一行,執(zhí)行chkconfig系統(tǒng)將會報(bào)出oracle11沒有chkconfig服務(wù)權(quán)限的錯(cuò)誤。
第二:su
oracle -c $ORACLE_HOME/bin/dbstart和touch
/var/lock/subsys/oracle11這兩行的作用是首先執(zhí)行dbstart腳本啟動oracle,然后在服務(wù)活動列表目錄中創(chuàng)建一個(gè)與oracle11這個(gè)服務(wù)同名的一個(gè)文件,表示這個(gè)服務(wù)是活動的,也就是被啟動的。而su
oracle -c $ORACLE_HOME/bin/dbshut和rm -f
/var/lock/subsys/oracle11這兩行的作用是首先執(zhí)行dbshut急哦腳本關(guān)閉oracle,然后從服務(wù)活動列表目錄中刪除那個(gè)與oracle11同名的那個(gè)文件,表示這個(gè)服務(wù)不是活動的,也就是已經(jīng)被關(guān)閉。
那么為什么要做touch
/var/lock/subsys/oracle11和rm -f
/var/lock/subsys/oracle11這兩步呢?原因是跟LINUX系統(tǒng)的機(jī)制有關(guān)的:LINUX的判別一個(gè)服務(wù)是否被啟動的依據(jù)是在/var/lock/subsys/目錄下是否與服同名的文件,若有則表示這個(gè)服務(wù)已經(jīng)被啟動了,在系統(tǒng)關(guān)閉的時(shí)候,LINUX會把這里面列出的服務(wù)全部關(guān)閉,并刪掉與服務(wù)同名的文件。若一個(gè)服務(wù)被啟動了,但卻在這個(gè)目錄里沒有那個(gè)服務(wù)的同名文件,則不會關(guān)閉那個(gè)服務(wù)。網(wǎng)上的文章均將這個(gè)地方設(shè)置錯(cuò)了,所以會發(fā)現(xiàn),ORACLE可以隨系統(tǒng)啟動了,但卻沒有隨系統(tǒng)關(guān)閉。我也是分析了/etc/rc.d/rc.local后才發(fā)現(xiàn)這個(gè)原理的。經(jīng)過試驗(yàn),果然如此。再分析mysql的啟動與關(guān)閉腳本也是這樣做的,最終恍然大悟
原來如此。這個(gè)地方請大家注意了。
4.將這個(gè)腳本注冊成為一個(gè)系統(tǒng)服務(wù)
方法有二:
其一:先給腳本分配可以被執(zhí)行的權(quán)限。執(zhí)行下面命令:
#su-root
chown
oracle /etc/init.d/oracle11
chmod 775
/etc/init.d/oracle11
-------[root@oracle init.d]# chmod 750 /etc/init.d/oracle
-------鏈接:
-------[root@oracle init.d]# ln -s /etc/init.d/oracle /etc/rc1.d/K61oracle
-------[root@oracle init.d]# ln -s /etc/init.d/oracle /etc/rc3.d/S61oracle
-------執(zhí)行以下命令:
-----[root@oracle init.d]# chkconfig --level 345 oracle on?? (參數(shù)--level 為兩個(gè)"-" ,下同)
-----[root@oracle init.d]# chkconfig --add oracle????????? // 添加到服務(wù)里
再創(chuàng)建符號鏈接文件。
chkconfig --add
/etc/init.d/oracle11,執(zhí)行這個(gè)命令就需要你在腳本中寫上#chkconfig:3459910了。這樣當(dāng)這個(gè)命令被執(zhí)行的時(shí)候,回去oracle11文件中尋找這行注釋,并解析這行注釋,根據(jù)解析結(jié)果分別在/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中創(chuàng)建符號連接文件S99oracle11文件,這個(gè)文件是系統(tǒng)啟動時(shí)要執(zhí)行的,其實(shí)這個(gè)文件是指向/etc/init.d/oracle11的,啟動的時(shí)候系統(tǒng)向這個(gè)文件發(fā)送一個(gè)start參數(shù),也就執(zhí)行了oracle11文件中的start分支了。還會在/etc/rc.d/rc0.d;/etc/rc.d
/rc1.d;/etc/rc.d/rc6.d中創(chuàng)建K10oracle11文件,這個(gè)文件時(shí)系統(tǒng)關(guān)閉時(shí)要執(zhí)行的,其實(shí)這個(gè)文件也是指向/etc
/init.d/oracle11的,關(guān)閉的時(shí)候系統(tǒng)向這個(gè)文件發(fā)送一個(gè)stop參數(shù),也就執(zhí)行了oracle11文件中的stop分支了。
我想你應(yīng)該明白#chkconfig:3459910中這些數(shù)字的含義了吧:指出3,4,5級別啟動這個(gè)服務(wù),99是在相應(yīng)的/etc
/rc.d/rcN.d(N為前面指定的級別,這里是2345)目錄下生成的鏈接文件的序號(啟動優(yōu)先級別)S99oracle11,10為在除前面指出的級別對應(yīng)的/etc/rc.d/rcN.d(N為除2345之外的級別)目錄生成的鏈接文件的序號(服務(wù)停止的優(yōu)先級別)K10oracle11。至于為什么在這些目錄中創(chuàng)建文件和文件的命名規(guī)則,這就要您對LINUX的系統(tǒng)啟動流程有一個(gè)熟悉的了解了,在這就不詳談了。
其二:若您想嘗試一下手動創(chuàng)建符號連接文件的樂趣,請執(zhí)行如下命令:
#su
-root
ln -s /etc/init.d/oracle11 /etc/rc.d/rc3.d/S99oracle11
ln -s
/etc/init.d/oracle11 /etc/rc.d/rc4.d/S99oracle11
ln -s /etc/init.d/oracle11
/etc/rc.d/rc5.d/S99oracle11
作用效果和執(zhí)行chkconfig --add
oracle11是一樣的。
重啟之后看看/var/lock/subsys/目錄下的oracle11log文件,里面是不是有腳本的啟動分支輸出信息呢?
總結(jié)
以上是生活随笔為你收集整理的linux oracle11g开机,Linux 下Oracle11g 自动随系统启动的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: puppet php,puppet入门实
- 下一篇: div 设置a4大小_如何在A4纸张尺寸