1,云端rc.local设置失效
服务器信息是centos6.5,oracle数据库版本是orcle11g,小版本号是11.2.0.1.0,以前在idc环境设置的oracle服务器开机启动oracle服务,在/etc/rc.local中设置,增加如下的内容 :
su - oracle < lsnrctl start |
但是迁移到云环境后,这个设置启动失效了,服务器启动后,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; |