Oracle 11g随Redhat 5系统自动启动与关闭的设置方法
最近,ORACLE系统基本调试通过,是时候设置ORACLE随RHEL自动启动与关闭服务的时候了,之所以把这个任务放在最后来做,是因为我觉得这个应该不会很难,但真正实施起来,还是遇到了个不小的障碍:写好脚本,注册好服务之后,经测试,ORACLE可以随RHEL启动而启动,但不能随系统关闭而关闭。在网上找答案,发现几乎所有的设置过程帖子都是从同一篇原样照抄过来的,根本就行不通。天下文章一大抄。求助他人,没有得到一个好的解决方案。无奈,自己静下心来慢慢研究分析,总算找到了问题的关键原因所在。
现在就把我的整个成功设置的过程贴出来,供大家参考,以期大家能少走弯路;另外还是要给其他人一个建议:切莫生硬照搬,断章取义,否则其害大焉!!
首先,要在RHEL中设置允许ORACLE系统自动启动,因为默认情况下是设置为不允许的。操作如下:
在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,意思是将不允许自动启动改为允许自动启动。
然后,是修改ORACLE自带的启动与关闭脚本,分别是dbstart和dbshut。执行这两个脚本就可以实现ORACLE脚本的启动与关闭。
在oracle账户下修改$ORACLE_HOME/bin/dbstart文件:
# su - ORACLE
$ cd $ORACLE_HOME/bin
$ vi dbstart
找到 ORACLE_HOME_LISTNER=$1这一行
改为:
ORACLE_HOME_LISTNER=$ORACLE_HOME
之所以做这一步,是因为在这个脚本自动生成的时候,也就是ORACLE被安装进RHEL的时候,这个脚本并不知道你的
ORACLE_HOME_LISTNER是什么,现在要将这个参数显示的写明,这样就不会在执行这个脚本的时候报
ORACLE_HOME_LISTNER没有被指定的错误了。注意:dbstart和dbshut脚本在10g之后就已经将监听器的启动与关闭合并进数
据库实例的启动与关闭脚本里面了。而不再是单独分开的了。
同样的方式,我们也要修改dbshut的这个参数。这里就不再详细写出了,他们在同一个目录下。
再次,就是写一个脚本,把它注册为一个系统服务,让它在开机与关机的时候运行。它的作用就是调用并执行dbstart和dbshut。这样不
就实现了数据库启动与关闭了吗?!这个脚本被放在/etc/init.d目录中,脚本的名字是oracle11
脚本如下:
#!/bin/bash
# chkconfig: 2345 99 10
# description: Startup Script for oracle Databases
# /etc/rc.d/init.d/oradbstart
export ORACLE_BASE=/db/app/oracle/
export ORACLE_HOME=/db/app/oracle/product/11.1.0/db_1
export ORACLE_SID=orcl
export PATH=$PATH:$ORACLE_HOME/bin
case "$1" in
start)
echo "-----startup oracle-----" >> /var/log/oracle11log
su oracle -c $ORACLE_HOME/bin/dbstart
touch /var/lock/subsys/oracle11
echo "-----startup oracle successful-----" >> /var/log/oracle11log
echo "OK"
;;
stop)
echo "-----shutdwn oracle-----" >> /var/log/oracle11log
su oracle -c $ORACLE_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle11
echo "-----shutdown oracle successful-----" >> /var/log/oracle11log
echo "OK"
;;
*)
echo "Usage: 'basename $0' start|stop"
exit 1
esac
exit 0
保存并退出。
现在,我要对这段脚本做一个关键解释:
第一:# chkconfig: 2345 99 10 虽是一行注释,但是确实关键的必不可少的一行,除非你不用chkconfig命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行chkconfig系统将会报出oracle11没有chkconfig服务权限的错误。
第二:su oracle -c $ORACLE_HOME/bin/dbstart 和touch /var/lock/subsys/oracle11这两行的作用是首先执行dbstart脚本启动oracle,然后在服务活动列表目录中创建一个与oracle11这个服务同名的一个文件,表示这个服务是活动的,也就是被启动的。
而su oracle -c $ORACLE_HOME/bin/dbshut 和rm -f /var/lock/subsys/oracle11这两行的作用是首先执行dbshut急哦脚本关闭oracle,然后从服务活动列表目录中删除那个与oracle11同名的那个文件,表示这个服务不是活动的,也就是已经被关闭。
那么为什么要做touch /var/lock/subsys/oracle11和rm -f /var/lock/subsys/oracle11这两步呢?原因是跟LINUX系统的机制有关的:LINUX的判别一个服务是否被启动的依据是在/var/lock/subsys/目录下是否与服同名的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,LINUX会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。网上的文章均将这个地方设置错了,所以会发现,ORACLE可以随系统启动了,但却没有随系统关闭。我也是分析了/etc/rc.d/rc.local后才发现这个原理的。经过试验,果然如此。再分析mysql的启动与关闭脚本也是这样做的,最终恍然大悟。原来如此。这个地方请大家注意了。
最后,就是将这个脚本注册成为一个系统服务就可以了,方法有二:
其一:先给脚本分配可以被执行的权限。执行下面命令:
#su - root
chown oracle /etc/init.d/oracle11
chmod 775 /etc/init.d/oracle11
再创建符号链接文件。
chkconfig --add /etc/init.d/oracle11,执行这个命令就需要你在脚本中写上# chkconfig: 2345 99 10 了。这样当这个命令被执行的时候,回去oracle11文件中寻找这行注释,并解析这行注释,根据解析结果分别在/etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中创建符号连接文件S99oracle11文件,这个文件是系统启动时要执行的,其实这个文件是指向/etc/init.d/oracle11的,启动的时候系统向这个文件发送一个start参数,也就执行了oracle11文件中的start分支了。还会在/etc/rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d中创建K10oracle11文件,这个文件时系统关闭时要执行的,其实这个文件也是指向/etc/init.d/oracle11的,关闭的时候系统向这个文件发送一个stop参数,也就执行了oracle11文件中的stop分支了。
我想你应该明白# chkconfig: 2345 99 10 中这些数字的含义了吧:指出2,3,4,5级别启动这个服务,99是在相应的/etc/rc.d/rcN.d(N为前面指定的级别,这里是2345)目录下生成的链接文件的序号(启动优先级别)S99oracle11,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除2345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle11。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对LINUX的系统启动流程有一个熟悉的了解了,在这就不详谈了。
其二:若您想尝试一下手动创建符号连接文件的乐趣,请执行如下命令:
#su - root
ln -s /etc/init.d/oracle11 /etc/rc.d/rc2.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc3.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc4.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc5.d/S99oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc0.d/K10oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc1.d/K10oracle11
ln -s /etc/init.d/oracle11 /etc/rc.d/rc6.d/K10oracle11
作用效果和执行chkconfig --add oracle11是一样的。
到此,所以得设置过程就结束了,下面进行一下测试吧:
#cd /etc/init.d
sh oracle11 start
执行后,看看/var/log目录下的oracle11log文件,里面是不是有脚本的启动分支输出信息呢?
sh oracle11 stop
执行后,看看/var/log目录下的oracle11log文件,里面是不是有脚本的关闭分支输出信息呢?
若看到信息,表示您设置成功了。若没有,请再仔细设置一遍,并注意文件的权限问题。LINUX的用户概念是很严格的。毕竟是多用户系统嘛。
文章属于作者原创,转载请注明出处。来自:http://blog.csdn.net/kanon_lgt/
详细出处参考:http://www.jb51.net/article/19823.htm
详细出处参考:http://www.jb51.net/article/19823.htm
详细出处参考:http://www.jb51.net/article/19823.htm
Oracle 11g随Redhat 5系统自动启动与关闭的设置方法的更多相关文章
- Oracle 11g客户端在Linux系统上的配置步骤详解
Oracle 11g客户端在Linux系统上的配置步骤详解 2011-07-26 10:47 newhappy2008 CSDN博客 字号:T | T 本文我们主要介绍了Oracle 11g客户端在L ...
- Oracle 11G for redhat 自启动脚本
在$ORACLE_HOME/bin中,有dbstart和dbshut这两个脚本,可以使用这两个oracle自带的脚本实现oracle的开机自启动.这个脚本中包含oraclelistener.insta ...
- CentOS6.x和CentOS7.X启动系统不显示进度条设置方法
[root@ok Desktop]# vi /boot/grub/grub.conf # grub.conf generated by anaconda # # Note that you do no ...
- ORACLE 11g R2数据库安装硬件环境要求
物理内存要求:最小1G,在windows7,windows8,windows8.1上最小2G. 虚拟内存(或分页空间)容量要求: Available RAM Swap Space Required B ...
- oracle 11g centos6 安装
选型:32位的内存是个瓶颈,已经是64位的时代了.使用64位的CentOS6 和 64位的Oracle 11g R2在虚拟机器安装,采用hostonly方式设置网络注意:能上网的网卡要设置一下ICS( ...
- Oracle 11g完全卸载(Windows)(转)
Oracle 11g完全卸载(Windows) 1.关闭oracle所有的服务.可以在windows的服务管理器中关闭: 一般有以下服务: (1)Oracle SID VSS Writer ...
- Oracle 11g改密码有效期
oracle 11g,密码默认有效期为180天,设置为不过期,可在线操作. 步骤: -->>进入oracle用户 su - oracle -->>已sys超级用户登录sqlpl ...
- RedHat 6.7 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机双实例HA
环境 软硬件环境 硬件环境: 浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台. 软件环境: 操作系统:Redhat Enterpris ...
- RedHat 6.7 Enterprise x64环境下使用RHCS部署Oracle 11g R2双机HA
环境 软硬件环境 硬件环境: 浪潮英信服务器NF570M3两台,华为OceanStor 18500存储一台,以太网交换机两台,光纤交换机两台. 软件环境: 操作系统:Redhat Enterprise ...
随机推荐
- Python数据类型list(列表)和tuple(元组)
list Python内置的一种数据类型是列表:list.list是一种有序的集合,可以随时添加和删除其中的元素. 比如,列出班里所有同学的名字,就可以用一个list表示: >>> ...
- Java高精度学习第一弹
为了快速解决高精度问题,总算是要来接触java了,算上这学期要开java的课了,好好学习吧! 拿来练手的是hdu的1002,高精度加法. import java.util.*; import java ...
- 关于 wait_event_interruptible() 和 wake_up()的使用
来源:http://blog.csdn.net/allen6268198/article/details/8112551 1. 关于 wait_event_interruptible() 和 wake ...
- VM虚拟机上 实现CentOS 6.X下部署LVS(NAT)+keepalived实现高性能高可用负载均衡
一.简介 VS/NAT原理图: 二.系统环境 实验拓扑: 1 准备工作 a) 虚拟机上安装CentOS6.x操作系统,参考一下博客内容 http://www.cnblogs.com/seesea125 ...
- 用c语言程序对显存进行操作
一.基础研究 我们之前研究过变量.数组.函数和指针,他们都可以看作是内存中存储的一段数据,当程序需要用到它们时,会通过它们的地址找到它们并进行调用,只是调用的用途不同而已:变量和数组元素是作为常量来处 ...
- NTOPNG修改密码
感觉这个有点妖,因为在两个实例上修改密码都失败了. 于是,从网上看看是怎么回事, 按以下步骤重置你想要的密码: 1,为密码生成MD5字串: echo -n "your_password&qu ...
- 最大流Dinic
不断用BFS构造分层网络,用DFS增广.中途用取指的cur优化DFS. Dinic封装模板: #include <cstdio> #include <iostream> #in ...
- 服务器端javascript——Rhino和Node
Node: Node是v8 javasript解析器的一个特别版本,侧重于异步I/O,网络和HTTP 入门见:http://www.cnblogs.com/wishyouhappy/p/3647037 ...
- delphi 写系统日志监控 转
不久前写了个抓取网页内容的小程序,跑了一晚上,本以为早上起来都抓完了,谁知道程序死掉了,分析半天,才发现用tmemo来记录日志的信息太多了,越积越多,本来memo的容量就不大.对于无法控制信息量的日志 ...
- [Design Pattern] Adapter Pattern 简单案例
Adapter Pattern, 即适配器模式,用于连接两个不兼容的接口,属于结构类的设计模式. 或者叫做,转换器模式. 下面是一个转换器模式简单案例. 假设已有 AudioPlayer 专门播放 m ...