共计 4055 个字符,预计需要花费 11 分钟才能阅读完成。
备注:此文根据网上文章实践并修改所成。
RHEL6.8 64bit+Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Oracle 11g 系统自动启动与关闭的设置方法
第一步:要在 Linux 中设置允许 ORACLE 系统自动启动,因为默认情况下是设置为不允许的。
1.root 账户下修改 /etc/oratab 文件:
# vi /etc/oratab
找到:orcl=/db/app/oracle/product/11.1.0/db_1 :N
改为:orcl=/db/app/oracle/product/11.1.0/db_1 :Y
就是将最后的 N 改为 Y,将不允许自动启动改为允许自动启动。
2. 修改 Oracle 自带的启动与关闭脚本, 分别是 dbstart 和 dbshut;
执行这两个脚本就可以实现 ORACLE 脚本的启动与关闭。
在 oracle 账户下修改 $ORACLE_HOME/bin/dbstart 文件:
$ vi $ORACLE_HOME/bin dbstart
找到: ORACLE_HOME_LISTNER=$1
改为:ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做这一步,是因为在这个脚本自动生成的时候,也就是 Oracle 被安装进 Linux 的时候,这个脚本并不知道你的 ORACLE_HOME_LISTNER 是什么,现在安装后要将这个参数显示的写明,这样就不会在执行这个脚本的时候报出 ORACLE_HOME_LISTNER 没有被指定的错误了。
注意:dbstart 和 dbshut 脚本在 10g 版本之后,已经将监听器的启动与关闭合并进数据库实例的启动与关闭脚本里面了,而不再是单独分开的了。
同样的方式,也要修改 dbshut 的这个参数。这里就不再详细写出了,脚本在同一个目录下。
第二步:写一个脚本,把它注册为一个系统服务,让它在开机与关机的时候运行。它的作用就是调用并执行 dbstart 和 dbshut。这样不就实现了数据库启动与关闭了。
1. 创建脚本名为 oracle,脚本被放在 /etc/init.d 目录中。
脚本代码如下:
#!/bin/bash
# chkconfig: 2345 96 11
# description:Startup Script for oracle Databases
#/etc/rc.d/init.d/oradbstart
exportORACLE_BASE=/u01/app/oracle/
export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1
exportORACLE_SID=ORDB
exportPATH=$PATH:$ORACLE_HOME/bin
case “$1″in
start)
echo”—–startup oracle—–“>> /var/log/oraclelog
su – oracle -c”$ORACLE_HOME/bin/dbstart”
touch /var/lock/subsys/oracle
echo”—–startup oracle successful—–“>> /var/log/oraclelog
echo “OK”
;;
stop)
echo”—–shutdwn oracle—–“>> /var/log/oraclelog
su – oracle -c”$ORACLE_HOME/bin/dbshut”
rm -f /var/lock/subsys/oracle
echo”—–shutdown oracle successful—–“>> /var/log/oraclelog
echo “OK”
;;
reload|restart)
$0 stop
$1 start
;;
*)
echo “Usage:’basename $0′ start|stop|reload|restart”
exit 1
esac
exit 0
保存内容并退出。
现在,我要对这段脚本做一个关键解释:
第一:# chkconfig: 2345 99 10 虽是一行注释,但是确实关键的必不可少的一行,除非你不用 chkconfig 命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行 chkconfig 系统将会报出 oracle 没有 chkconfig 服务权限的错误。
第二:su – oracle -c $ORACLE_HOME/bin/dbstart 和 touch /var/lock/subsys/oracle 这两行的作用是首先执行 dbstart 脚本启动 oracle,然后在服务活动列表目录中创建一个与 oracle 这个服务同名的一个文件,表示这个服务是活动的,也就是被启动的。
第三:su – oracle -c $ORACLE_HOME/bin/dbshut 和 rm -f /var/lock/subsys/oracle 这两行的作用是首先执行 dbshut 脚本关闭 oracle,然后从服务活动列表目录中删除那个与 oracle 同名的那个文件,表示这个服务不是活动的,也就是已经被关闭。
那么为什么要做 touch /var/lock/subsys/oracle 和 rm -f /var/lock/subsys/oracle 这两步呢?原因是跟 Linux 系统的机制有关的:Linux 的判别一个服务是否被启动的依据是在 /var/lock/subsys/ 目录下是否有与服务名相同的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,Linux 会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。
网上的文章均将这个地方设置错了,所以会发现,Oracle 可以随系统启动了,但却没有随系统关闭。
分析了 /etc/rc.d/rc.local 后才发现这个原理的。
经过试验,果然如此。再分析 MySQL 的启动与关闭脚本也是这样做的,最终恍然大悟。原来如此。这个地方请大家注意了。
最后,就是将这个脚本注册成为一个系统服务就可以了,方法有二:
其一:先给脚本分配可以被执行的权限。执行下面命令:
代码如下:
#su – root
chown oracle /etc/init.d/oracle
chmod 775 /etc/init.d/oracle
再创建符号链接文件。
chkconfig –add /etc/init.d/oracle, 执行这个命令就需要你在脚本中写上
# chkconfig: 2345 99 10 了。这样当这个命令被执行的时候,会去 oracle 文件中寻找这行注释,并解析这行注释,根据解析结果分别在 /etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d 中创建符号连接文件 S99oracle 文件,这个文件是系统启动时要执行的,其实这个文件是指向 /etc/init.d/oracle 的,启动的时候系统向这个文件发送一个 start 参数,也就执行了 oracle 文件中的 start 分支了。
另外还会在 /etc/rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d 中创建 K10oracle 文件,这个文件时系统关闭时要执行的,其实这个文件也是指向 /etc/init.d/oracle 的,关闭的时候系统向这个文件发送一个 stop 参数,也就执行了 oracle 文件中的 stop 分支了。
我想你应该明白# chkconfig: 2345 99 10 中这些数字的含义了吧:
指出 2,3,4,5 级别启动这个服务,99 是在相应的 /etc/rc.d/rcN.d(N 为前面指定的级别,这里是 2345)目录下生成的链接文件的序号 (启动优先级别)S99oracle,10 为在除前面指出的级别对应的 /etc/rc.d/rcN.d(N 为除 2345 之外的级别) 目录生成的链接文件的序号(服务停止的优先级别)K10oracle。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对 Linux 的系统启动流程有一个熟悉的了解了,在这就不详谈了。
其二:若您想尝试一下手动创建符号连接文件的乐趣,请执行如下命令:
代码如下:
#su – root
ln -s /etc/init.d/oracle/etc/rc.d/rc2.d/S99oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc3.d/S99oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc4.d/S99oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc5.d/S99oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc0.d/K10oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc1.d/K10oracle
ln -s /etc/init.d/oracle/etc/rc.d/rc6.d/K10oracle
其实手动这样操作作用效果和执行 chkconfig –add oracle 是一样的。
到此,所有设置就完成了,下面进行一下测试:
#cd /etc/init.d
sh oracle start 或者 service oracle start
执行后,看看 /var/log 目录下的 oraclelog 文件,里面是不是有脚本的启动分支输出信息呢?
sh oracle stop 或者 service oracle stop
执行后,看看 /var/log 目录下的 oraclelog 文件,里面是不是有脚本的关闭分支输出信息呢?
若看到信息,表示您设置成功了。若没有,请再仔细设置一遍,并注意文件的权限问题。
更多 Oracle 相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/145330.htm