启动数据库实例,分为两步:第一步,启动监听;第二步,启动数据库实例。
一、如何启动数据库实例
1.进入到sqlplus启动实例
[oracle@redhat ~]$ su - oracle --“切换到oracle用户”
Password:
[oracle@redhat ~]$ lsnrctl start --“打开监听”
[oracle@redhat ~]$ sqlplus /nolog --“进入到sqlplus”
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Oct 14 19:06:45 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn /as sysdba --“连接到sysdba”
Connected to an idle instance.
SQL> startup --“启动数据库实例
SQL> shutdown immediate --“关闭数据库实例”
[oracle@redhat ~]$ lsnrctl stop --“关闭监听”
2.用dbstart和dbshut启动和关闭数据库实例
先启动监听 lsnrctl start
启动实例 dbstart
使用dbstart命令启动数据库比较方便,但是在linux上安装好oracle之后,第一次使用dbstart命令可能会报如下错误:
Failed to auto-start Oracle Net Listene using /ade/vikrkuma_new/oracle/bin/tnslsnr
看起来貌似是监听没有起来,可是实际上,监听可以成功启动。
我们来看一下dbstart脚本,该脚本放在$ORACLE_HOME/bin下面。
搜索dbstart里面的tnslsnr:
grep tnslsnr dbstart
返回结果:
if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"
返回结果中发现有$ORACLE_HOME_LISTNER变量,有可能是该变量的路径不对,我们继续搜索ORACLE_HOME_LISTNER
grep ORACLE_HOME_LISTNER dbstart
返回结果:
# 3) Set ORACLE_HOME_LISTNER
ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
if [ ! $ORACLE_HOME_LISTNER ] ; then
echo "ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener"
LOG=$ORACLE_HOME_LISTNER/listener.log
if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
$ORACLE_HOME_LISTNER/bin/lsnrctl start >> $LOG 2>&1 &
export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep "LSNRCTL for " | cut -d' ' -f5 | cut -d'.' -f1`
echo "Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr"
$LOGMSG "Restart Oracle Net Listener using an alternate ORACLE_HOME_LISTNER: lsnrctl start"
我们发现ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle
中,指定的路径不对,需要对这一行重新编辑,使其路径制定到$ORACLE_HOME
用vi编辑dbstart,将ORACLE_HOME_LISTNER=/ade/vikrkuma_new/oracle更改为
export ORACLE_HOME_LISTNER=$ORACLE_HOME
然后保存退出,此时再运行dbstart,已经不报错了,但是没有任何反应,ps一下进程,没有oracle的进程,说明oracle实例没有正常启动。
此时的原因是在/etc/oratab的设置问题,我们cat一下,发现
zgz:/home/oracle/product/10g:N
最后设置的是"N"(我的环境中只有一个实例,因此只有一行配置语句),我们需要把“N”修改为“Y”。
以上的工作做好之后,dbstart就可以正常使用了:
[oracle@redhat bin]$ lsnrctl start --“启动监听”
[oracle@redhat bin]$ dbstart --“启动数据库实例”
[oracle@redhat bin]$ dbshut --“关闭数据库实例”
[oracle@redhat bin]$ lsnrctl stop --“关闭监听”
二、如何使数据库实例和linux系统一起启动
在/etc/rc.d/rc.local中加入如下语句即可实现同系统启动实例:
echo "su - oracle -c 'lsnrctl start'" >> /etc/rc.local
echo "su - oracle -c 'dbstart'" >> /etc/rc.local
实际操作中可能会出现不能自动启动oracle数据库的情况!
三、配置Oracle的自动启动脚本动
首先在/etc/rc.d/init.d/目录下配置Oracle的服务文件
#touch /etc/rc.d/init.d/oracle
#cd /etc/rc.d/init.d
#chmod a+x oracle
然后vi编辑oracle文件,将一下脚本输入到oracle中
#!/bin/sh
#
# /etc/rc.d/init.d/oracle
# whoami
# root
# chkconfig: 345 99 10
# /etc/init.d/oracle
# description: starts the oracle dabase deamons
#
case "$1" in
start)
echo -n "Starting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Starting Oracle Listeners: "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
stop)
echo -n "Shutting Down Oracle Listeners: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Shutting Down Oracle Databases as part of system down." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c "lsnrctl stop" >> /var/log/oracle
echo "Done."
rm -f /var/lock/subsys/oracle
echo -n "Shutting Down Oracle Databases: "
su - oracle -c dbshut >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
;;
restart)
echo -n "Restarting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstop >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Restarting Oracle Listeners: "
su - oracle -c "lsnrctl stop" >> /var/log/oracle
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac
保存文件,退出以后,添加并启动察看服务。
#chkconfig --add oracle
#chkconfig --list oracle
chkconfig --list oracle的运行结果:
oracle 0:off 1:off 2:off 3:on 4:off 5:on 6:off
根据上面的运行结果,当相应的运行级别为on时(例如:5:on),在对应的/etc/rc.d/rcN.d(例如:和5:on对应的是:/etc/rc.d/rc5.d)下面会生成一个文件:S99oracle,使用vi S99oracle打开该文件,可以看到该文件的内容和/etc/rc.d/init.d/oracle内容相同,表示配置成功,其实,S99oracle是一个到/etc/rc.d/init.d/oracle的链接,我们可以使用file命令来查看:
$file /etc/rc.d/rc5.d/S99oracle
S99oracle:symbolic link to '../init.d/oracle
说明一点:
脚本文件中的:# chkconfig: 345 99 10
指出3,4,5级别启动这个服务,99是在相应的/etc/rc.d/rcN.d(N为前面指定的级别,这里是345)目录下生成的链接文件的序号(启动优先级别)S99oracle,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle
重启系统,就可以在启动的过程中看到 Starting oracle,因为我们设置的优先级为99,一般是最后启动。[OK]以后就可以了。因为要启动emctl,可能有点慢,等待的时间要稍微长一点。
启动以后可以以root执行oracle start或者oracle stop来启动或停止服务。
注意:
这样的脚本启动一般不会启动实例,如果想让实例也随脚本一起启动的话,就需要修改文件:/etc/oratab
如果这个文件不存在,那么就得运行脚本文件产生它sh /u01/app/oracle/product/10.2.0/root.sh
改/etc/oratab 最后一行
sid:/oracle/product/10.2.0.1:N
=>
sid:/oracle/product/10.2.0.1:Y(其中sid为想要启动的database)
只要在这里设置好后,在配合上面的脚本,即可实现开机自动启动oracle以及实例了.