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了!
本文转自清风拂面 51CTO博客,原文链接:http://blog.51cto.com/crazy123/1159176