azure 云端centos6.5下oracle11g服务开机自启动

时间:2022-06-08 16:57:39


1,云端rc.local设置失效

服务器信息是centos6.5,oracle数据库版本是orcle11g,小版本号是11.2.0.1.0,以前在idc环境设置的oracle服务器开机启动oracle服务,在/etc/rc.local中设置,增加如下的内容 :

su - oracle < lsnrctl start                                                                                                                                                                                                                  
sqlplus / as sysdba 
startup 
quit 
EOF 

 

但是迁移到云环境后,这个设置启动失效了,服务器启动后,oracle没有随机开启,所以准备换一种新的思路来实现。

 

Linux启动时,会运行一个init程序,然后由init来启动后面的任务,包括多用户环境(inittab中设定)和网络等。运行级就是当前程序运行的功能级别,这个级别从1到6,具有不同的功能。这些级别在/etc/inittab中指定,该文件就是init程序寻找的主要文件。最先运行的服务放在/etc/rc.d目录下。

文件以S开头,代表start(启动),后面的数字是启动顺序;文件以K开头,代表kill(结束),同样,后面的数字代表结束顺序。

例如/etc/rc2.d/S10network代表它与运行级别2有关,10就是他的启动顺序。

目录介绍:

init.d

    这个目录中存放了一些服务启动脚本,系统安装时的多个rpm包,这些脚本在执行时可以用来启动,停止和重启这些服务。

rcx.d(x为0~6)

这个目录是启动级别的执行程序链接目录,里面的文件都是指向init.d目录中文件的一些软连接。

所以可以在init.d里面添加一个启动oracle的脚本,然后通过chkconfig来实现开机自启动。

 

2,修改/etc/oratab

[root@xxx ~]# vim /etc/oratab                                                                                                                                                                      

 

powerdes:/oracle/app/oracle/product/11.2.0/dbhome_1:Y

 

blog源地址:http://blog.csdn.net/mchdba/article/details/51176911 ,博主mchdba,谢绝转载


3,在oracle用户的profile文件中增加SID环境变量

[root@xxx ~]# su - oracle                                                                                                                                                                              

[oracle@xxx ~]$ vim .bash_profile

 

# .bash_profile

 

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

        . ~/.bashrc

fi

 

# User specific environment and startup programs

 

PATH=$PATH:$HOME/bin

 

export PATH

export ORACLE_BASE=/oracle/app/oracle

export ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1

 

export PATH=$ORACLE_HOME/bin:$PATH

export ORACLE_TERM=xterm

export TNS_ADMIN=$ORACLE_HOME/network/admin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/oracm/lib:$ORACLE_HOME/lib

export CLASSPATH=$CLASSPATH:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/jlib:$ORACLE_HOME/network/lib

export LANG=en_US.gbk

export NLS_LANG=american_america.ZHS16GBK

export EDITOR=vim

# add in the end

export ORACLE_SID=powerdes

 

 

4,编写oracle自启动脚本oracled

判断oracle是否启动的小脚本:

[root@xxx ~]# more t.sh

pidnum=`ps -eaf|grep oracle |grep powerdes |grep -v grep  |wc |awk '{ print $1 }' `                                                                                                        

echo $pidnum

if [ $pidnum -gt 0 ]; then

         echo "oracle is running,there are $pidnum oracle proccesses exists .."

fi

[root@yueworldoracle_crm ~]#

[root@yueworldoracle_crm ~]# sh t.sh

40

oracle is running,there are 40 oracle proccesses exists ..

[root@xxx ~]#

 

 

Oracle随机启动的脚本:

[root@xxx ~]# more /etc/init.d/oracled

#!/bin/bash
# chkconfig: 2345 10 90 
# description: myservice ....
 
# description: The Oracle Database is an Object-Relational Database Management System.                                                                                   
# check the oracle server by "  ps -eaf|grep oracle |grep powerdes |grep -v grep  |wc "

 
. /etc/rc.d/init.d/functions
 
LOCKFILE=/var/lock/subsys/oracle
ORACLE_HOME=/oracle/app/oracle/product/11.2.0/dbhome_1
ORACLE_USER=oracle
# check the oracle processe, if >0 means oracle is running.
pidnum=`ps -eaf|grep oracle |grep powerdes |grep -v grep  |wc |awk '{ print $1 }' `
 
case "$1" in
'start')
   if [ $pidnum -gt 0 ]; then
      echo $0 already running.
      exit 1
   fi
   echo -n $"Starting Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl start"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbstart $ORACLE_HOME"
   #su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl start dbconsole"
   touch $LOCKFILE
   ;;
'stop')
   #if [ ! -f $LOCKFILE ]; then
   if [ $pidnum -lt 1 ]; then
      echo $0 already stopping.
      exit 1
   fi
   echo -n $"Stopping Oracle Database:"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/lsnrctl stop"
   su - $ORACLE_USER -c "$ORACLE_HOME/bin/dbshut $ORACLE_HOME"
   #su - $ORACLE_USER -c "$ORACLE_HOME/bin/emctl stop dbconsole"
   rm -f $LOCKFILE
   ;;
'restart')
   $0 stop
   $0 start
   ;;
'status')
   if [ $pidnum -gt 0 ]; then
      echo $0 started.
      else
      echo $0 stopped.
   fi
   ;;
*)
   echo "Usage: $0 [start|stop|status]"
   exit 1
esac
 
exit 0

[root@xxx ~]#

 

5,验证oracled

赋予执行权限:

chmod a+x /etc/rc.d/init.d/oracled

ln –s /etc/rc.d/init.d/oracle  /etc/rc2.d/S61oracled                                                                                                                                                                  

ln –s /etc/rc.d/init.d/oracled  /etc/rc3.d/S61oracled

ln –s /etc/rc.d/init.d/oracled  /etc/rc4.d/S61oracled

ln –s /etc/rc.d/init.d/oracle  /etc/rc0.d/K61oracled

ln –s /etc/rc.d/init.d/oracle  /etc/rc6.d/K61oracled

 

验证:

service oracled status;

service oracled start;

service oracled stop;

service oracled restart;

 

6,添加开机自启动

将oracled添加进chkconfig:

chkconfig --level 2345 oracled on;                                                                                                                                                                                         

chkconfig --add oracled;