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