linux下Oracle自己启动

引用
http://bbs.51cto.com/topic/thread-688286.html


linux下 Oracle自动启动与停止

1、 修改Oracle系统配置文件/etc/oratab
  /etc/oratab 格式为: SID:ORACLE_HOME:AUTO
  把AUTO域设置为Y(大写),只有这样,oracle 自带的dbstart和dbshut才能够发挥作用。我的为:
  ora9i:/home/oracle/ora/products/9.2.0:Y

  2、 编写服务脚本:
  如下
  #!/bin/bash
  #
  #################FUNCTION#############
  #
  # AutoStart Oracle and listener
  # AutoStop Oracle and listener
  #
  #####################################
  #
  # Created by ZhouYS 2003-11-26
  #
  case "$1" in
  start)
  echo "Starting Oracle Databases ... "
  echo "-------------------------------------------------" >> /var/log/oracle
  date +" %T %a %D : Starting Oracle Databasee as part of system up." >> /var/log/oracle
  echo "-------------------------------------------------" >> /var/log/oracle
  su - oracle -c "dbstart" >> /var/log/oracle
  echo "Done."
  echo "Starting Oracle Listeners ... "
  echo "-------------------------------------------------" >> /var/log/oracle
  date +" %T %a %D : Starting Oracle Listeners as part of system up." >> /var/log/oracle
  echo "-------------------------------------------------" >> /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

  ;;
  stop)
  echo "Stoping Oracle Listeners ... "
  echo "-------------------------------------------------" >> /var/log/oracle
  date +" %T %a %D : Stoping Oracle Listener 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 "Stoping Oracle Databases ... "
  echo "-------------------------------------------------" >> /var/log/oracle
  date +" %T %a %D : Stoping Oracle Databases as part of system down." >> /var/log/oracle
  echo "-------------------------------------------------" >> /var/log/oracle
  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)
  $0 stop
  $0 start

  ;;
  *)
  echo "Usage: oracle {start|stop|restart}"
  exit 1
  esac

  将脚本命名为oracle,保存在/etc/rc.d/init.d下
  改变文件属性:chmod 755 oracle

  注意:在windows下编辑此文件时有DOS格式字符导致在linux下不能够正常运行,建议用gedit 或用 vi编辑

  3、建立服务连接:

  系统启动时启动数据库,我们需要以下连结∶
  --------------------------------------------------------------------------------
  $ ln -s ../init.d/oracle /etc/rc.d/rc2.d/S99oracle
  $ ln -s ../init.d/oracle /etc/rc.d/rc3.d/S99oracle
  $ ln -s ../init.d/oracle /etc/rc.d/rc5.d/S99oracle #rc4.d unused

  
  --------------------------------------------------------------------------------

  要在重新启动时停止数据库,我们需要以下连结∶

  
  --------------------------------------------------------------------------------

  $ ln -s ../init.d/oracle /etc/rc.d/rc0.d/K01oracle # 停止
  $ ln -s ../init.d/oracle /etc/rc.d/rc6.d/K01oracle # 重新启动


**********************************************************************************************************************



Linux中在Oracle安装完毕以后,如果重新启动Linux ,Oracle是不会自动启动的,你可以通过手动调用dbstart命令来进行启动,不过这样似乎也很繁琐。我们可以通过配置Oracle的自动启动脚本,然后利用Linux的Service来启动Oracle服务器。

首先在/etc/rc.d/init.d/目录下配置Oracle的服务文件。

touch oracle10g
chmod a+x oracle10g

然后编辑此oracle10g文件。内容如下。
# !/bin/bash
# whoami
# root
# chkconfig: 345 51 49
# description: starts the oracle dabase deamons
#
ORA_HOME=/opt/oracle
ORA_OWNER=oracle
case "$1" in
'start')
echo -n "Starting oracle10g: "
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart" &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
touch /var/lock/subsys/oracle10g
echo
;;

'stop')
echo -n "shutting down oracle10g: "
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut" &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
rm -f /var/lock/subsys/oracle10g
echo
;;

'restart')
echo -n "restarting oracle10g: "
$0 stop
$0 start
echo
;;
*)
echo "usage: oracle10g "
exit 1

esac
exit 0

保存文件,退出以后,添加并启动察看服务。
/sbin/chkconfig --add oracle10g
/sbin/chkconfig --list oracle10g

重新启动Linux的时候,如果看到启动项Oracle出现OK,代表Oracle成功随Linux启动了。


linux下oracle 10G启动EM和isqlplus

注:$ORACLE_HOME为oracle的安装路径

1,使用EM(enterprise managment)
1.1启动EM
$ORACLE_HOME/bin/emctl start dbconsole
如果出现下面相关信息,说明服务启动
TZ set to PRC
Oracle Enterprise Manager 10g Database Control Release 10.1.0.3.0
Copyright (c) 1996, 2004 Oracle Corporation. All rights reserved.
http://localhost.localdomain:5500/em/console/aboutApplication
Starting Oracle Enterprise Manager 10g Database Control ................................. started.
1.2使用EM
在浏览器地址中输入如下地址:
http://localhost.localdomain:5500/em/console/
如果不出现登录对话页面,请确保你的数据库服务与监听服务正常启动了

注意:如果监听程序不启动,可以通过sqlplus登录,但在此页面中不能正常显示.

现在你就可以正常使用EM了!
2,使用isqlplus
2.1启动isqlplus
$ORACLE_HOME/bin/isqlplusctl start
如果出现如下信息,说明正常启动.
iSQL*Plus 10.1.0.3.0
Copyright (c) 2004 Oracle. All rights reserved.
Starting iSQL*Plus ...
iSQL*Plus started.
2.2使用isqlplus
在浏览器地址中输入如下地址:
http://localhost.localdomain:5560/isqlplus/
这样就出现了isqlplus的登录界面,就可使用isqlplus了

2009年10月26日下午14:40
我自己配置的oracle10g自动启动文件。
vi /etc/rc.d/init.d/oracle10g
# !/bin/bash
#whoami
# root
# chkconfig: 345 51 49
# description: starts the oracle dabase deamons
#
ORA_HOME=/opt/oracle/product/10.2.0/db_1/
ORA_OWNER=oracle
case "$1" in
'start')
echo -n "Starting oracle10g: "
su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart" &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start" &
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl start dbconsole" &
su - $ORA_OWNER -c "$ORA_HOME/bin/isqlplusctl start"
touch /var/lock/subsys/oracle10g
echo
;;

'stop')
echo -n "shutting down oracle10g: "
su - $ORA_OWNER -c "$ORA_HOME/bin/isqlplusctl stop" &
su - $ORA_OWNER -c "$ORA_HOME/bin/emctl stop dbconsole" &
su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut" &
su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl stop"
rm -f /var/lock/subsys/oracle10g
echo
;;

'restart')
echo -n "restarting oracle10g: "
$0 stop
$0 start
echo
;;
*)
echo "usage: oracle10g "
exit 1

esac
exit 0




设置ORACLE11g随RHEL5自动启动与关闭
最近,ORACLE系统基本调试通过,是时候设置ORACLE随RHEL自动启动与关闭服务的时候了。现在笔者从对这个过程进行了详细的讲解。现在就把我的整个成功设置的过程贴出来,供大家参考,以期大家能少走弯路;另外还是要给其他人一个建议:切莫生硬照搬,断章取义,否则其害大焉!!首先,要在RHEL中设置允许ORACLE系统自动启动,因为默认情况下是设置为不允许的。操作如下:

在root账户下修改/etc/oratab文件:

#vi/etc/oratab

找到orcl=/db/app/oracle/product/11.1.0/db_1:N这一行

改为:

orcl=/db/app/oracle/product/11.1.0/db_1:Y

也就是将最后的N改为Y,意思是将不允许自动启动改为允许自动启动。然后,是修改ORACLE自带的启动与关闭脚本,分别是dbstart和dbshut。执行这两个脚本就可以实现ORACLE脚本的启动与关闭。在oracle账户下修改$ORACLE_HOME/bin/dbstart文件:

#su-ORACLE

$cd$ORACLE_HOME/bin

$vidbstart

找到ORACLE_HOME_LISTNER=$1这一行

改为:

◆ORACLE_HOME_LISTNER=$ORACLE_HOME之所以做这一步,是因为在这个脚本自动生成的时候,也就是ORACLE被安装进RHEL的时候,这个脚本并不知道你的

◆ORACLE_HOME_LISTNER是什么,现在要将这个参数显示的写明,这样就不会在执行这个脚本的时候报

◆ORACLE_HOME_LISTNER没有被指定的错误了。注意:dbstart和dbshut脚本在10g之后就已经将监听器的启动与关闭合并进数

据库实例的启动与关闭脚本里面了。而不再是单独分开的了。同样的方式,我们也要修改dbshut的这个参数。这里就不再详细写出了,他们在同一个目录下。再次,就是写一个脚本,把它注册为一个系统服务,让它在开机与关机的时候运行。它的作用就是调用并执行dbstart和dbshut。这样不就实现了数据库启动与关闭了吗?!这个脚本被放在/etc/init.d目录中,脚本的名字是oracle11

脚本如下:

#!/bin/bash
#chkconfig:23459910
#description:StartupScriptfororacleDatabases
#/etc/rc.d/init.d/oradbstart
exportORACLE_BASE=/db/app/oracle/
exportORACLE_HOME=/db/app/oracle/product/11.1.0/db_1
exportORACLE_SID=orcl
exportPATH=$PATH:$ORACLE_HOME/bin
case"$1"in
start)
echo"-----startuporacle-----">>/var/log/oracle11log
suoracle-c$ORACLE_HOME/bin/dbstart
touch/var/lock/subsys/oracle11
echo"-----startuporaclesuccessful-----">>/var/log/oracle11log
echo"OK"
;;
stop)
echo"-----shutdwnoracle-----">>/var/log/oracle11log
suoracle-c$ORACLE_HOME/bin/dbshut
rm-f/var/lock/subsys/oracle11
echo"-----shutdownoraclesuccessful-----">>/var/log/oracle11log
echo"OK"
;;
*)
echo"Usage:'basename$0'start|stop"
exit1
esac
exit0

保存并退出。

现在,我要对这段脚本做一个关键解释:

第一:#chkconfig:23459910虽是一行注释,但是确实关键的必不可少的一行,除非你不用chkconfig命令来自动生成符号连接文件,而是完全采用手工创建。否则没有这一行,执行chkconfig系统将会报出oracle11没有chkconfig服务权限的错误。

第二:suoracle-c$ORACLE_HOME/bin/dbstart和touch/var/lock/subsys/oracle11这两行的作用是首先执行dbstart脚本启动oracle,然后在服务活动列表目录中创建一个与oracle11这个服

务同名的一个文件,表示这个服务是活动的,也就是被启动的。

而suoracle-c$ORACLE_HOME/bin/dbshut和rm-f/var/lock/subsys/oracle11这两行的作用是首先执行dbshut急哦脚本关闭oracle,然后从服务活动列表目录中删除那个与oracle11同名的那

个文件,表示这个服务不是活动的,也就是已经被关闭。

那么为什么要做touch/var/lock/subsys/oracle11和rm-f/var/lock/subsys/oracle11这两步呢?原因是跟LINUX系统的机制有关的:LINUX的判别一个服务是否被启动的依据是在/var/lock/subsys/目录下是否与服同名的文件,若有则表示这个服务已经被启动了,在系统关闭的时候,LINUX会把这里面列出的服务全部关闭,并删掉与服务同名的文件。若一个服务被启动了,但却在这个目录里没有那个服务的同名文件,则不会关闭那个服务。网上的文章均将这个地方设置错了,所以会发现,ORACLE可以随系统启动了,但却没有随系统关闭。我也是分析了/etc/rc.d/rc.local后才发现这个原理的。经过试验,果然如此。再分析mysql的启动与关闭脚本也是这样做的,最终恍然大悟

原来如此。这个地方请大家注意了。

最后,就是将这个脚本注册成为一个系统服务就可以了,方法有二:

其一:先给脚本分配可以被执行的权限。执行下面命令:

#su-root
chownoracle/etc/init.d/oracle11
chmod775/etc/init.d/oracle11

再创建符号链接文件。

chkconfig--add/etc/init.d/oracle11,执行这个命令就需要你在脚本中写上#chkconfig:23459910了。这样当这个命令被执行的时候,回去oracle11文件中寻找这行注释,并解析这行注释,根据解析结果分别在/etc/rc.d/rc2.d;/etc/rc.d/rc3.d;/etc/rc.d/rc4.d;/etc/rc.d/rc5.d中创建符号连接文件S99oracle11文件,这个文件是系统启动时要执行的,其实这个文件是指向/etc/init.d/oracle11的,启动的时候系统向这个文件发送一个start参数,也就执行了oracle11文件中的start分支了。还会在/etc/rc.d/rc0.d;/etc/rc.d/rc1.d;/etc/rc.d/rc6.d中创建K10oracle11文件,这个文件时系统关闭时要执行的,其实这个文件也是指向/etc/init.d/oracle11的,关闭的时候系统向这个文件发送一个stop参数,也就执行了oracle11文件中的stop分支了。

我想你应该明白#chkconfig:23459910中这些数字的含义了吧:指出2,3,4,5级别启动这个服务,99是在相应的/etc/rc.d/rcN.d(N为前面指定的级别,这里是2345)目录下生成的链接文件的序号(启动优先级别)S99oracle11,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除2345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle11。至于为什么在这些目录中创建文件和文件的命名规则,这就要您对LINUX的系统启动流程有一个熟悉的了解了,在这就不详谈了。

其二:若您想尝试一下手动创建符号连接文件的乐趣,请执行如下命令:

#su-root

ln-s/etc/init.d/oracle11/etc/rc.d/rc2.d/S99oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc3.d/S99oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc4.d/S99oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc5.d/S99oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc0.d/K10oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc1.d/K10oracle11

ln-s/etc/init.d/oracle11/etc/rc.d/rc6.d/K10oracle11

作用效果和执行chkconfig--addoracle11是一样的。

到此,所以得设置过程就结束了,下面进行一下测试吧:

#cd/etc/init.d

shoracle11start

执行后,看看/var/log目录下的oracle11log文件,里面是不是有脚本的启动分支输出信息呢?

shoracle11stop

执行后,看看/var/log目录下的oracle11log文件,里面是不是有脚本的关闭分支输出信息呢?若看到信息,表示您设置成功了。若没有,请再仔细设置一遍,并注意文件的权限问题。LINUX的用户概念是很严格的。毕竟是多用户系统。设置ORACLE11g随RHEL5自动启动与关闭的过程是一个非常复杂的,笔者对这两个过程进行了详细的解释与介绍。

你可能感兴趣的:(oracle)