关于oraclelinux系统下安装后,如何在系统重启的情况下让服务自动启动起来,网上有很多的教程和现成的脚本,这里只是个人工作中的一点经验。

    redhat as4oracle 10g为例。单机在安装过程依照oracle官方的文档一步步下来,只要设置好参数、安装好必要的包,一般不会出什么问题。安装好了以后系统重启, oracle重启服务,网上很多人建议自己写脚本(其实脚本也很简单),这里讲的是用oracle本身的脚本实现,当然不可避免最后还要写一点点的:)

 

1、配置dbstartdbshut

$ORACLE_HOME/bin中,有dbstartdbshut这两个脚本,more dbstart看一下可以看到:

 

#

# $Id: dbstart.sh.pp 11-may-2005.18:18:07 vikrkuma Exp $

# Copyright (c) 1991, 2005, Oracle. All rights reserved.

#

 

###################################

#

# usage: dbstart

#

# This script is used to start ORACLE from /etc/rc(.local).

# It should ONLY be executed as part of the system boot procedure.

#

# This script will start all databases listed in the oratab file

# whose third field is a "Y". If the third field is set to "Y" and

# there is no ORACLE_SID for an entry (the first field is a *),

# then this script will ignore that entry.

#

# This script requires that ASM ORACLE_SID's start with a +, and

# that non-ASM instance ORACLE_SID's do not start with a +.

#

# If ASM instances are to be started with this script, it cannot

# be used inside an rc*.d directory, and should be invoked from

# rc.local only. Otherwise, the CSS service may not be available

# yet, and this script will block init from completing the boot

# cycle.

#

# Note:

# Use ORACLE_TRACE=T for tracing this script.

#

# The progress log for each instance bringup plus Error and Warning message[s]

# are logged in file $ORACLE_HOME/startup.log. The error messages related to

# instance bringup are also logged to syslog (system log module).

# The Listener log is located at $ORACLE_HOME_LISTNER/listener.log

......

 

可以看出这个脚本是用来启动oracle服务的,包括listenerinstanceasm instances,并且可以放到/etc/rc(.local).,同样dbshut也是起到关闭服务的作用。

配置系统使这个脚本起作用:

1)、以root编辑/etc/oratab,类似 orcl:/u01/product/10.2.0/db_1:N 这种格式,其中orcl是你的ORACLE_SID/u01/product/10.2.0/db_1ORACLE_HOME,这里需要把N改为Y,即orcl:/u01/product/10.2.0/db_1:Y这样。

2)、以oracle编辑$ORACLE_HOME/bin/dbstart,找到其中第78:ORACLE_HOME_LISTNER=改为你自己的路径,或者可以改成ORACLE_HOME_LISTNER=$ORACLE_HOME

保存脚本,以oracle用户运行dbshutdbstart看是否能关闭、启动数据库。如果不能,一般是参数设置,根据报错找到对应位置更改。

 

2、把dbstartdbshut加到redhat启动服务中

经过上一步的配置,可以直接用dbstart命令启动数据listenerinstanceasm instances,但是还没有启动oracle10gEMORACLE利用web页面管理数据库相当方便,也是10g的一个特色,所以应该一并启动起该服务来。

$ORACLE_HOME/bin/emctl start dbconsole

因此我们可以用rc.local或者redhat服务都可以实现要求的开机启动。下面分别说一下:

 

1)、利用rc.local。直接把dbstart加到rc.local中,实现开机自动启动。这里需要注意的是必须以oracle启动该脚本。

    root编辑/etc/rc.local,添加下面一行:

    su - oracle -c "/u01/product/10.2.0/db_1/bin/dbstart"

     su - oracle -c "/u01/product/10.2.0/db_1/bin/emctl start dbconsole"

    这里/u01/product/10.2.0/db_1需要替换成实际的ORACLE_HOME

保存并退出后,reboot服务器测试一下,可以看到,当系统启动以后oracle监听、实例和em都已经起来了

2)、如果我们不用rc.local,也可以加到redhat服务中。在/etc/rc.d/init.d中添加如下脚本文件,命名为oracle

#!/bin/sh

#chkconfig: 2345 99 01

#description: ORACLE 10g Server

 

ORACLE_HOME=/u01/product/10.2.0/db_1

 

if [ ! -f $ORACLE_HOME/bin/dbstart ]

then

echo "ORACLE cannot start"

exit

fi

 

case "$1" in

'start')

     echo "Starting Oracle Database..."

     su - oracle -c "$ORACLE_HOME/bin/dbstart"

     su - oracle -c "$ORACLE_HOME/bin/emctl start dbconsole"

     ;;

'stop')

     echo "Stoping Oracle Database"

     su - oracle -c "$ORACLE_HOME/bin/emctl stop dbconsole"

     su - oracle -c "$ORACLE_HOME/bin/dbshut"

     ;;

esac

 

注意其中两行注释,网上很多脚本因为少了这两行不能使服务自启动:

#chkconfig: 2345 99 01

#description: ORACLE 10g Server

其中chkconfig2345 99 01 是指脚本将为运行级2345启动oracle 10g服务,启动优先级为99,关闭优先级为01

 

然后以root权限:

# cd /etc/rc2.d

# ln -s /etc/rc.d/init.d/oracle S99oracle

# chkconfig --list oracle

# chkconfig --level 2345 on

重启系统,就可以在启动的过程中看到 Starting oracle ,因为我们设置的优先级为99,一般是最后启动。[OK]以后就可以了。因为要启动emctl,可能有点慢,等待的时间要稍微长一点。

启动以后可以以root执行oracle start或者oracle stop来启动或停止服务。

 

-----------------------------------------------------------------------------------------------

1、 修改Oracle系统配置文件/etc/oratab

/etc/oratab 格式为: SID:ORACLE_HOME:AUTO

AUTO域设置为Y(大写),只有这样,oracle 自带的dbstartdbshut才能够发挥作用。我的为:

ora9i:/home/oracle/ora/products/9.2.0:Y

2、 编写服务脚本:

如下

#!/bin/bash

#

#################FUNCTION#############

#

# AutoStart Oracle and listener

# AutoStop Oracle and listener

#

#####################################

#

# Created by ZhouYS 2003-11-26

#

case "$1" in

start)

echo "Starting Oracle Databases ... "

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Starting Oracle Databasee as part of system up." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

su - oracle -c "dbstart" >> /var/log/oracle

echo "Done."

echo "Starting Oracle Listeners ... "

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Starting Oracle Listeners as part of system up." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

su - oracle -c "lsnrctl start" >> /var/log/oracle

echo "Done."

echo ""

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Finished." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

touch /var/lock/subsys/oracle

;;

stop)

echo "Stoping Oracle Listeners ... "

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Stoping Oracle Listener as part of system down." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

su - oracle -c "lsnrctl stop" >> /var/log/oracle

echo "Done."

rm -f /var/lock/subsys/oracle

echo "Stoping Oracle Databases ... "

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Stoping Oracle Databases as part of system down." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

su - oracle -c "dbshut" >>/var/log/oracle

echo "Done."

echo ""

echo "-------------------------------------------------" >> /var/log/oracle

date +" %T %a %D : Finished." >> /var/log/oracle

echo "-------------------------------------------------" >> /var/log/oracle

;;

restart)

$0 stop

$0 start

;;

*)

echo "Usage: oracle {start|stop|restart}"

exit 1

esac

将脚本命名为oracle,保存在/etc/rc.d/init.d

改变文件属性:chmod 755 oracle

注意:在windows下编辑此文件时有DOS格式字符导致在linux下不能够正常运行,建议用gedit 或用 vi编辑

3、建立服务连接:

系统启动时启动数据库,我们需要以下连结∶

--------------------------------------------------------------------------------

$ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle

$ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle

$ ln -s ../init.d/oracle /etc/rc.d/rc5.d/S99oracle #rc4.d unused

--------------------------------------------------------------------------------

要在重新启动时停止数据库,我们需要以下连结∶

--------------------------------------------------------------------------------

$ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # 停止

$ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # 重新启动

--------------------------------------------------------------------------------

******上面是 网上抄的 ,以下是我的 方法******

--------------------------------------------------------------------------------

最简单的 方法 呵呵

首先 把oracle/product/../bin 下的 dbstart脚本搞定,如果 执行 dbstart就可以 运行oracle的话 , /etc/rc.local 中加入 如下:

su - oracle -c "/home/oracle/oracle/product/10.2.0/db_1/bin/dbstart"

su - oracle -c "/home/oracle/oracle/product/10.2.0/db_1/bin/emctl start dbconsole"

即可.