折腾了我好几个时辰了,终于知道为什么自启动脚本一直无法成功执行,原来都是空格不对惹的祸。具体步骤说明如下:
1.修改dbstart和dbshut脚本
dbstart脚本默认值启动oracle服务,不启动监听服务,如果想在启动oracle服务的同时启动监听,就必须修改该脚本
将ORACLE_HOME_LISTNER值设为$ORACLE_HOME(原来是为$1)
dbshut一样的道理,如果想关闭数据库服务的同时关闭监听服务也是将dbshut文件中的ORACLE_HOME_LISTNER值设为$ORACLE_HOME
2.创建oracle自启动脚本
由于修改了dbstart和dbshut脚本,直接用这个脚本就可以实现oracle服务和监听的同时启动或关闭,因此该脚本启动或关闭数据库只要调用dbstart或dbshut脚本就可以了。如果采用默认不做修改,那么必须在该脚本中增加启动监听和关闭监听的语句
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl start"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/lsnrctl stop"
如果想开机自动启动oem或关闭自动一起关闭oem,则采用如下语句:
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl start dbconsole"
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
该脚本只是启动oracle监听和oracle服务,且已经做了dbstart脚本的修改,因此具体的脚本如下:
# !/bin/bash
# whoami
# root
# chkconfig: 2345 99 01
# /etc/init.d/orcl
# description: starts the oracle dabase deamons
#
ORACLE_HOME=/oradata/oracle/112
ORACLE_OWNER=oracle
case "$1" in
start)
echo -n "Starting orcl: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/orcl
echo
;;
stop)
echo -n "shutting down orcl: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/orcl
echo
;;
restart)
echo -n "restarting orcl: "
$0 stop
$0 start
echo
;;
*)
echo "Usage: `basename $0` start|stop|restart"
esac
# whoami
# root
# chkconfig: 2345 99 01
# /etc/init.d/orcl
# description: starts the oracle dabase deamons
#
ORACLE_HOME=/oradata/oracle/112
ORACLE_OWNER=oracle
case "$1" in
start)
echo -n "Starting orcl: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbstart"
touch /var/lock/subsys/orcl
echo
;;
stop)
echo -n "shutting down orcl: "
su - $ORACLE_OWNER -c "$ORACLE_HOME/bin/dbshut"
rm -f /var/lock/subsys/orcl
echo
;;
restart)
echo -n "restarting orcl: "
$0 stop
$0 start
echo
;;
*)
echo "Usage: `basename $0` start|stop|restart"
esac
注:原先直接从网上拷贝了脚本, 如
#!/bin/bash 这句话,前面按理是只有两个空格的,直接将这句话拷贝到linux系统后,只表示两个空格(在linux系统实际上是4个空格了,其实表示了换行加回车),因此拷贝到linux系统后,先将该非正常空格去掉。
3.赋予自启动脚本执行权限
chmod 775 /etc/init.d/orcl
4. 增加配置服务
[root@localhost ~]# /sbin/chkconfig --add orcl
orcl 服务不支持 chkconfig
“服务不支持 chkconfig”:——这个提示是因为oracle自启动脚本前面必须要有以下这两行
#chkconfig: 2345 00 01
#description:oracle 11g service
orcl 服务不支持 chkconfig
“服务不支持 chkconfig”:——这个提示是因为oracle自启动脚本前面必须要有以下这两行
#chkconfig: 2345 00 01
#description:oracle 11g service
当然如果不采用这个命令进行配置服务,也可以手动方式创建文件链接来完成,如下所示:
文件链接
ln -s /etc/init.d/orcl /etc/rc.d/rc2.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc3.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc4.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc5.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc0.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc1.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc6.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc2.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc3.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc4.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc5.d/S99orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc0.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc1.d/K01orcl
ln -s /etc/init.d/orcl /etc/rc.d/rc6.d/K01orcl
若想删除链接,执行如下:
rm -rf /etc/rc.d/rc2.d/S99orcl
rm -rf /etc/rc.d/rc3.d/S99orcl
rm -rf /etc/rc.d/rc4.d/S99orcl
rm -rf /etc/rc.d/rc5.d/S99orcl
rm -rf /etc/rc.d/rc0.d/K0orcl
rm -rf /etc/rc.d/rc1.d/011orcl
rm -rf /etc/rc.d/rc6.d/S01orcl
rm -rf /etc/rc.d/rc3.d/S99orcl
rm -rf /etc/rc.d/rc4.d/S99orcl
rm -rf /etc/rc.d/rc5.d/S99orcl
rm -rf /etc/rc.d/rc0.d/K0orcl
rm -rf /etc/rc.d/rc1.d/011orcl
rm -rf /etc/rc.d/rc6.d/S01orcl
5.修改 /etc/oratab 文件
vi /etc/oratab
ORACLE_SID:ORACLE_HOME:Y -- 是否自启动将原来的N改成Y
注:没有oratab(这个文件是oracle安装时执行如下脚本后生成的)这个文件,重新执行这两个脚本
/oradata/oraInventory/orainstRoot.sh
/oradata/oracle/112/root.sh
6.测试是否配置成功ORACLE_SID:ORACLE_HOME:Y -- 是否自启动将原来的N改成Y
注:没有oratab(这个文件是oracle安装时执行如下脚本后生成的)这个文件,重新执行这两个脚本
/oradata/oraInventory/orainstRoot.sh
/oradata/oracle/112/root.sh
service orcl(oracle自启动脚本名称)--用于检查配置是否成功,如果有错误会有具体的输出,根据输出结果检查修改。
service orcl start 测试是否可以成功启动oracle
备注:
第二步可以替换,如果不创建oracle自启动脚本,可以直接在/etc/rc.d/rc.local文件中增加想启动的服务的语句即可
su - oracle -c "/oradata/oracle/112/bin/dbstart"
su - oracle -c "/oradata/oracle/112/bin/emctl start dbconsole"
su - oracle -c "/oradata/oracle/112/bin/emctl start dbconsole"