手动和自动启动多个oracle实例

2018-04-16 09:05:00
六月
来源:
https://www.2cto.com/database/201505/402319.html
转贴 1466
手工启动两个实例
su - oracle
lsnrctl start
--假设一个实例是itsm、另外一个是test
export ORACLE_SID=itsm
sqlplus / as sysdba
startup
quit
export ORACLE_SID=test
sqlplus / as sysdba
startup
quit
自动启动,可以在/etc/rc.local中设置,增加如下的内容
--启动默认的 数据库实例
su - oracle
lsnrctl start
sqlplus / as sysdba
startup

quit

--启动第二个数据库实例
su - oracle
export ORACLE_SID=test
sqlplus / as sysdba
startup

quit

======================================================


linux下ORACLE 11g多个实例多个监听,自动启动关闭问题

环境: Red hat linux 6.2,64位

      ORACLE 11G 11.2.0.1 64位

公司特殊要求,在一台机器上建了4个实例,4个监听,希望能够开机自动启动。在网上查到若干资料,多个实例倒是不少,可是多个监听的不多。经过收集整理测试,把自己的处理步骤说一下。

 

ORACLE其实自己有一个启动和停止脚本,分别是$ORACLE_HOME/bin下的dbstart和dbshut。

这两个脚本运行时,要输入dbstart $ORACLE_HOME 和 dbshut$ORACLE_HOME。测试的结果是这两个脚本虽然能启动多个是咧,但是不能启动多个LISTENER.

 

为此,我做了以下处理。

 

# su - oracle
$ cd $ORACLE_HOME/bin
$ vi dbstart
找到 ORACLE_HOME_LISTNER=.....这行, 修改成
ORACLE_HOME_LISTNER=/oracle/oracle

 

同样修改dbshut

vi dbshut

ORACLE_HOME_LISTNER=/oracle/oracle
 

注意:是修改,不是增加,可是使用vi的查找功能查找:
ORACLE_HOME_LISTNER,然后进行修改,修改后保存

其实,/oracle/oracle可以写为$ORACLE_HOME,只不过我的$ORACLE_HOME本身就是/oracle/oracle。为了避免一会儿在自动启动脚本里面设置$ORACLE_HOME变量,我直接写了实际路径,大家根据自己情况进行替换。

 

进行了以上设置后,dbstart和dbshut的执行就不用$ORACLE_HOME参数了。

 

下面来解决多个监听启动的问题。

 

查看dbstart和dbshut,发现了下面的一段代码,此段代码大概在90行附近:

 

 if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ;then
   echo "$0:Starting Oracle Net Listener" >> $LOG2>&1
    $ORACLE_HOME_LISTNER/bin/lsnrctlstart>> $LOG2>&1&
   VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTLfor " | cut -d' ' -f5 | cut -d'.' -f1`
   exportVER10LIST
 else
   echo "Failedto auto-start Oracle Net Listener using$ORACLE_HOME_LISTNER/bin/tnslsnr"
 fi

很明显,这段代码只是启动了一个LISTENER。我做了如下修改后,就可以启动多个了。

 

 if [ -x $ORACLE_HOME_LISTNER/bin/tnslsnr ] ;then
   echo "$0:Starting Oracle Net Listener" >> $LOG2>&1
    $ORACLE_HOME_LISTNER/bin/lsnrctl start LISTENER>> $LOG2>&1 &
   $ORACLE_HOME_LISTNER/bin/lsnrctl start LISTENER_BIL>> $LOG2>&1 &
   $ORACLE_HOME_LISTNER/bin/lsnrctl start ADSPMRKS>> $LOG2>&1 &
   $ORACLE_HOME_LISTNER/bin/lsnrctl start ADSPBILS>> $LOG2>&1&
   VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTLfor " | cut -d' ' -f5 | cut -d'.' -f1`
   exportVER10LIST
 else
   echo "Failedto auto-start Oracle Net Listener using$ORACLE_HOME_LISTNER/bin/tnslsnr"
 fi

其中LISTENER、LISTENER_BIL、ADSPMRKS、ADSPBILS是我的listener.ora里面配置的四个监听。

 

同理,将dbshut脚本中类似的语句进行类似修改。

 

启动和关闭多个实例和多个监听的目的达到了,下面我们来看如何自动启动和关闭。

 

第一步:

修改/etc/oratab文件,将需要启动的实例名称后面的N修改为Y。

 

第二步:

编写个shell脚本

cd /etc/init.d  

vi oracle.sh  

 

#!/bin/bash 

touch /var/log/oracle

case "$1" in 

start)     
 date>>/var/log/oracle     
 echo -e "nThe oracle willstartn">/var/log/oracle     
 su - oracle -c " dbstart;">>/var/log/oracle     
 echo -e "The oraclestarted">>/var/log/oracle ;; 
stop)      
 date>>/var/log/oracle     
 echo -e "nThe oracle willstopn">/var/log/oracle     
 su - oracle -c " dbshut;">>/var/log/oracle     
 echo -e "The oraclestoped">>/var/log/oracle ;; 
restart)     
 $0stop     
 $0 start 
;; 
*)     
 echo -e "usage $0{start|stop|restart}"     
 exit 1 
esac 

 

黑色字体为文件中的shell内容

 

第三步:

chmod 755 oracle.sh

cd  /etc/rc.d/rc3.d/

ln -s /etc/init.d/oracle.sh S99oracle 

cd  /etc/rc.d/rc5.d/

ln -s /etc/init.d/oracle.sh S99oracle

cd  /etc/rc.d/rc0.d/

ln -s /etc/init.d/oracle.sh K01oracle  

cd  /etc/rc.d/rc6.d/

ln -s /etc/init.d/oracle.sh K01oracle  

以上命令,rc3.d和rc5.d中的内容是代表启动时自动执行的内容;rc0.d和rc6.d代表关闭和重启时候自动执行的内容。

 

经过以上处理,就可以实现oracle多实例多监听自动启动了。

ref: http://blog.sina.com.cn/s/blog_4c634b970101a59u.html


发表评论
评论通过审核后显示。