SHELL指令碼實現Oracle自啟動與關閉
前言:通過SHELL指令碼實現Oracle自啟動與關閉方法很多,指令碼也很簡單,本例是通過編寫一個簡單的指令碼來呼叫Oracle10g自帶的3個指令碼來實現。現在開始吧
首先我們把Oracle自帶的3個指令碼簡單的編輯一下,這3個指令碼的目錄分別位於:
/etc/oratab
$ORACLE_HOME/bin/dbstart
$ORACLE_HOME/bin/dbshut
vi /etc/oratab
qdyx:/opt/app/oracle/product/10/db:Y
+ASM:/opt/app/oracle/product/10/db:Y
將確認啟動域置為“Y”,這樣做的好處是當系統中存在多個例項時,我們可以選擇性的進行操作。
vi $ORACLE_HOME/bin/dbstart
ORACLE_HOME_LISTNER=$ORACLE_HOME
找到“ORACLE_HOME_LISTNER”將他的值修改為“$ORACLE_HOME”
vi $ORACLE_HOME/bin/dbshut
在檔案未尾加入一行:lsnrctl stop
dbshut預設只關閉/etc/oratab中設定為“Y”的資料庫,並不關閉監聽器。
準備工作做好了,編輯一個簡單的指令碼來呼叫oratab、dbstart、dbshut
- #! /bin/bash
- case “$1” in
- start)
- echo “Starting Oracle Listener and Database…..”
- echo “———————————————-” >> /var/log/oracle.log
- echo “`date +%T%a%D`:Starting Oracle Listener and Database…..” >> /var/log/oracle.log
- echo “———————————————” >> /var/log/oracle.log
- su – oracle -c dbstart >> /var/log/oracle.log
- echo “Done”
- echo “”
- echo “———————————————-” >> /var/log/oracle.log
- ;;
- stop)
- echo “stoping Oracle Listener and Database…..”
- echo “———————————————-” >> /var/log/oracle.log
- echo “`date +%T%a%D`:Stoping Oracle Listener and Database…..” >> /var/log/oracle.log
- echo “———————————————” >> /var/log/oracle.log
- su – oracle -c dbshut >> /var/log/oracle.log
- echo “Done”
- echo “”
- echo “———————————————-” >> /var/log/oracle.log
- ;;
- *)
- echo “Usage: oracle{start | stop}”
- ;;
- esac
將上面的指令碼命名為oralce,放在/etc/init.d/目錄下,並新增可執行許可權。完了,可以執行指令碼做下資料庫開啟與關閉的測試。到這裡馬上快完了,耐心一點,呵呵!!!
接下來,我們要讓Linux系統在啟動與關閉的時候能夠執行這個指令碼。
首先是啟動時執行這個指令碼,我執行在啟動級別5下,建立一個軟連結:
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc5.d/S99oracle
如果你的系統執行在啟動級別3,將rc5.d變成rc3.d就行了,這個S99Oracle是什麼意思呢,簡單解釋下,S表示在系統啟動時會向指令碼傳遞一個start的引數,99表示最後執行這個指令碼,如果有興趣可去這個目錄看下就明白了。
關閉時執行這個指令碼,在啟動級別0與6都要建軟連結,0表示關閉系統,6表示重啟系統。
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc0.d/K01oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc6.d/K01oracle
K01啥意思,K表示在關閉時向指令碼傳遞一個stop引數,01表示最先關閉。
好了,到這裡就真的完了,檢視資料庫啟停資訊可以去這2個目錄
/var/log/oracle.log
$ORACLE_HOME/startup.log
做完以上工作,基本就成功了,第一次重啟測試,發現竟然沒起來,大汗啊,趕緊看日誌,在startup.log中發現大量下面資訊:
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 1.
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 2.
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 3.
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 4.
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 5.
Failure 1 contacting CSS daemon
logger: Waiting for Oracle CSS service to be available before starting
logger: ASM instance +ASM. Wait 6.
網上查了下,據說是一個Bug,通過這種方法解決,在/etc/inittab中新增一行,注意位置:
l2:2:wait:/etc/rc.d/rc 2
h1:35:respawn:/etc/init.d/init.cssd run >/dev/null 2>&1 </dev/null
l3:3:wait:/etc/rc.d/rc 3
好了,一切終於OK了!