下一页 上一页 目录

6. 自动启动和关闭

6.1 dbstartdbstop

Oracle 数据库的自动启动和关闭可以使用 Oracle 提供的 dbstartdbshut 文件来实现(在 7.3.3.0.0 版本中)。这些文件依赖于 /etc/oratab 文件的存在才能工作(尽管通过修改 dbshutdbstart 文件,可以更改这种依赖关系)。

/etc/oratab 文件的格式如下


SID:ORACLE_HOME:AUTO

一个例子


orcl:/home/oracle/7.3.3.0.0:Y
leaveup:/home/oracle/7.3.2.1.0:N

6.2 init.drc.d

要在机器启动和关闭时启动和停止数据库,需要修改 Linux 机器的启动例程。 这相当容易,尽管我应该在此指出,这可能会根据 Linux 的不同版本(slackware、debian、redhat 等)而有所不同。 我将展示适用于 Redhat Linux 5.0 的示例。 要为您的 Linux 版本修改这些示例,请参阅您的 Linux 文档集。(虽然它应该适用于任何 Sys V 类型 UNIX)。

首先,我们需要创建将在 /etc/rc.d/init.d 目录中运行 dbshutdbstart 的脚本。 创建以下文件并命名为 /etc/rc.d/init.d/oracle


#!/bin/sh
#
# /etc/rc.d/init.d/oracle
# Description: Starts and stops the Oracle database and listeners
# See how we were called.
case "$1" in
  start)
        echo -n "Starting Oracle Databases: "
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        su - oracle -c dbstart >> /var/log/oracle
        echo "Done."
        echo -n "Starting Oracle Listeners: "
        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 -n "Shutting Down Oracle Listeners: "
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Shutting Down Oracle Databases 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 -n "Shutting Down Oracle Databases: "
        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)
        echo -n "Restarting Oracle Databases: "
        echo "----------------------------------------------------" >> /var/log/oracle
        date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle
        echo "----------------------------------------------------" >> /var/log/oracle
        su - oracle -c dbstop >> /var/log/oracle
        su - oracle -c dbstart >> /var/log/oracle
        echo "Done."
        echo -n "Restarting Oracle Listeners: "
        su - oracle -c "lsnrctl stop" >> /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
        ;;
  *)
        echo "Usage: oracle {start|stop|restart}"
        exit 1
esac

值得检查此文件是否实际正确地停止和启动了您的系统的数据库。 检查日志文件 /var/log/oracle 以查找错误消息。

一旦此脚本正常工作,我们需要在相应的运行级别目录 /etc/rc.d/rcX.d 中创建启动和终止符号链接。

以下命令将确保数据库在运行级别 2、3 和 4 中启动


$ 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/rc4.d/S99oracle

要在重启或重新启动时停止数据库,我们需要以下链接


$ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle          # Halting
$ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle          # Rebooting


下一页 上一页 目录