设为首页 加入收藏

TOP

Oracle 11g数据库随系统自动启动与关闭的设置方法(一)
2017-07-04 10:23:22 】 浏览:1101
Tags:Oracle 11g 数据库 系统 自动 启动 关闭 设置 方法

备注:此文根据网上文章实践并修改所成。


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

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇PHP扩展数据库连接参数说明详解 下一篇MySQL 5.6使用SSL加密连接实战

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目