Linux下安裝完後每次都得通過下面命令來啓動對應的服務:
啓動服務 dbstart
啓動監視器 lsnrctl start
啓動控制檯 emctl start dbconsole
本文以Red Hat Enterprise Linux 6.4 (x86_64)+oracle11G爲例設置oracle開機自動啓動:
方法一:
使用dbstart命令用於啓動,具體方法如下
首先修改/etc/oratab文件,將orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N中的N改成Y,然後在/etc/rc.local添加下面幾行
su - oracle -c '$ORACLE_HOME/bin/dbstart' su - oracle -c '$ORACLE_HOME/bin/lsnrctl start' su - oracle -c '$ORACLE_HOME/bin/emctl start dbconsole'
如果沒有設置ORACLE_HOMEH環境變量,用絕對路徑取代即可,如/dba/app/oracle/product/..
初次運行dbstart時,一般會有這個報錯:
su - oracle -c "dbstart"
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
這個提示說明
啓動oracle服務的同時沒有啓動oracle監聽服務,因此如果想在啓動oracle服務的同時i啓動監聽
就需要修改dbstart/dbshut,將ORACLE_HOME_LISTNER值設爲$ORACLE_HOME(原來是爲$1)
方法二:
vi /etc/rc.local
把下面的內容加入
su - oracle -c " export ORACLE_SID=orcl sqlplus /nolog <<EOF connect / as sysdba startup; exit; EOF" su - oracle -c '$ORACLE_HOME/bin/lsnrctl start' su - oracle -c '$ORACLE_HOME/bin/emctl start dbconsole'
說明下上面腳本:
在shell腳本中,通常將EOF與 << 結合使用,表示後續的輸入作爲子命令或子Shell的輸入,直到遇到EOF爲止,再返回到主Shell。
EOF只是一個分界符,當然也可以用abcde替換。
當shell遇到<<時,它知道下一個詞是一個分界符。在該分界符以後的內容都被當作輸入,直到shell又看到該分界符(位於單獨的一行)。
此分界符可以是所定義的任何字符串,其實,不一定要用EOF,只要是“內容段”中沒有出現的字符串,都可以用來替代EOF,完全可以換成abcde之類的字符串,只是一個起始和結束的標誌罷了。
1,command<<EOF
(內容)
EOF
例如:
#!/bin/bash #Filename:do.sh su - oracle -c " export ORACLE_SID=orcl sqlplus /nolog <<EOF connect / as sysdba startup; exit; EOF" sleep 5 su - oracle -c lsnrctl start
說明:
將“內容段”整個作爲命令的輸入。
用su命令讀取整段命令,並逐行執行。