linux oracle11g开机,Linux 下Oracle11g 自动随系统启动
安裝完畢 Oracle 11g 每次都得手動啟動 | 停止數據庫(dbstart | dbshut)、監聽器(lsnrctl)、控制臺(emtcl),以下步驟實現數據庫的自動啟動:
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自帶的啟動與關閉腳本,
分別是dbstart和
dbshut。執行這兩個腳本就可以實現ORACLE腳本的啟動與關閉。在oracle賬戶下修改$ORACLE_HOME/bin/dbstart文件
#su
-oracle
$cd $ORACLE_HOME/bin
$vi
dbstart
找到ORACLE_HOME_LISTNER=$1這一行
改為:ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做這一步,是因為在這個腳本自動生成的時候,也就是ORACLE被安裝進RHEL的時候,這個腳本并不知道你的ORACLE_HOME_LISTNER是什么,現在要將這個參數顯示的寫明,這樣就不會在執行這個腳本的時候報ORACLE_HOME_LISTNER沒有被指定的錯誤了。注意:dbstart和dbshut腳本在10g之后就已經將監聽器的啟動與關閉合并進數據庫實例的啟動與關閉腳本里面了。而不再是單獨分開的了。
同樣的方式,我們也要修改dbshut的這個參數。這里就不再詳細寫出了,他們在同一個目錄下。
3.寫一個腳本,把它注冊為一個系統服務,讓它在開機與關機的時候運行。它的作用就是調用并執行dbstart和dbshut。這樣不就實現了數據庫啟動與關閉了嗎?!這個腳本被放在/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
保存并退出。
這段腳本的關鍵解釋:
第一:#chkconfig:345 99
10雖是一行注釋,但是確實關鍵的必不可少的一行,除非你不用chkconfig命令來自動生成符號連接文件,而是完全采用手工創建。否則沒有這一行,執行chkconfig系統將會報出oracle11沒有chkconfig服務權限的錯誤。
第二:su
oracle -c $ORACLE_HOME/bin/dbstart和touch
/var/lock/subsys/oracle11這兩行的作用是首先執行dbstart腳本啟動oracle,然后在服務活動列表目錄中創建一個與oracle11這個服務同名的一個文件,表示這個服務是活動的,也就是被啟動的。而su
oracle -c $ORACLE_HOME/bin/dbshut和rm -f
/var/lock/subsys/oracle11這兩行的作用是首先執行dbshut急哦腳本關閉oracle,然后從服務活動列表目錄中刪除那個與oracle11同名的那個文件,表示這個服務不是活動的,也就是已經被關閉。
那么為什么要做touch
/var/lock/subsys/oracle11和rm -f
/var/lock/subsys/oracle11這兩步呢?原因是跟LINUX系統的機制有關的:LINUX的判別一個服務是否被啟動的依據是在/var/lock/subsys/目錄下是否與服同名的文件,若有則表示這個服務已經被啟動了,在系統關閉的時候,LINUX會把這里面列出的服務全部關閉,并刪掉與服務同名的文件。若一個服務被啟動了,但卻在這個目錄里沒有那個服務的同名文件,則不會關閉那個服務。網上的文章均將這個地方設置錯了,所以會發現,ORACLE可以隨系統啟動了,但卻沒有隨系統關閉。我也是分析了/etc/rc.d/rc.local后才發現這個原理的。經過試驗,果然如此。再分析mysql的啟動與關閉腳本也是這樣做的,最終恍然大悟
原來如此。這個地方請大家注意了。
4.將這個腳本注冊成為一個系統服務
方法有二:
其一:先給腳本分配可以被執行的權限。執行下面命令:
#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
-------執行以下命令:
-----[root@oracle init.d]# chkconfig --level 345 oracle on?? (參數--level 為兩個"-" ,下同)
-----[root@oracle init.d]# chkconfig --add oracle????????? // 添加到服務里
再創建符號鏈接文件。
chkconfig --add
/etc/init.d/oracle11,執行這個命令就需要你在腳本中寫上#chkconfig:3459910了。這樣當這個命令被執行的時候,回去oracle11文件中尋找這行注釋,并解析這行注釋,根據解析結果分別在/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中創建符號連接文件S99oracle11文件,這個文件是系統啟動時要執行的,其實這個文件是指向/etc/init.d/oracle11的,啟動的時候系統向這個文件發送一個start參數,也就執行了oracle11文件中的start分支了。還會在/etc/rc.d/rc0.d;/etc/rc.d
/rc1.d;/etc/rc.d/rc6.d中創建K10oracle11文件,這個文件時系統關閉時要執行的,其實這個文件也是指向/etc
/init.d/oracle11的,關閉的時候系統向這個文件發送一個stop參數,也就執行了oracle11文件中的stop分支了。
我想你應該明白#chkconfig:3459910中這些數字的含義了吧:指出3,4,5級別啟動這個服務,99是在相應的/etc
/rc.d/rcN.d(N為前面指定的級別,這里是2345)目錄下生成的鏈接文件的序號(啟動優先級別)S99oracle11,10為在除前面指出的級別對應的/etc/rc.d/rcN.d(N為除2345之外的級別)目錄生成的鏈接文件的序號(服務停止的優先級別)K10oracle11。至于為什么在這些目錄中創建文件和文件的命名規則,這就要您對LINUX的系統啟動流程有一個熟悉的了解了,在這就不詳談了。
其二:若您想嘗試一下手動創建符號連接文件的樂趣,請執行如下命令:
#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
作用效果和執行chkconfig --add
oracle11是一樣的。
重啟之后看看/var/lock/subsys/目錄下的oracle11log文件,里面是不是有腳本的啟動分支輸出信息呢?
總結
以上是生活随笔為你收集整理的linux oracle11g开机,Linux 下Oracle11g 自动随系统启动的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: puppet php,puppet入门实
- 下一篇: div 设置a4大小_如何在A4纸张尺寸