Linux下让Oracle服务自动启动与停止

    默认地,如果在Windows下安装Oracle的话,会注册相应的服务,并随着操作系统启动而自动启动。但是,在Linux(环境是:RHEL5.2)下却需要进行一些配置才能实现这个功能。具体如下:一、修改Oracle系统配置文件/etc/oratab
  [root@RHEL ~]#gedit /etc/oratab
   /etc/oratab 格式为: SID:ORACLE_HOME:AUTO,把AUTO域设置为Y(大写)。只有这样,oracle 自带的dbstart和dbshut才能够发挥作用。我的环境为:orcl:/usr/app/oracle/product/10.2.0/db_1:Y
二、编写服务脚本
  [root@RHEL ~]#gedit /etc/rc.d/init.d/oracle
   内容为:
#!/bin/bash
#
#################FUNCTION#############
#
# AutoStart Oracle and listener Using dbstart
# AutoStop Oracle and listener Using dbstop
#
#####################################
#
# Edited by LDY 2009-01-04
#ORACLE_HOME=/usr/app/oracle/product/10.2.0/db_1
LOG=$ORACLE_HOME/oracle.logcase “$1” in
start)
echo “Starting Oracle Databases … ”
echo “————————————————-” >> $LOG 2>&1
date +” %T %a %D : Starting Oracle Databasee as part of system up.” >> $LOG 2>&1
su – oracle -c “$ORACLE_HOME/bin/dbstart” >> $LOG 2>&1
echo “Done.”
date +” %T %a %D : Finished.” >> $LOG 2>&1
echo “————————————————-” >> $LOG 2>&1
touch /var/lock/subsys/oracle

;;
stop)
echo “Stopping Oracle Databases … ”
echo “————————————————-” >> $LOG 2>&1
date +” %T %a %D : Stopping Oracle Databases as part of system down.” >> $LOG 2>&1
su – oracle -c “$ORACLE_HOME/bin/dbshut” >> $LOG 2>&1
echo “Done.”
date +” %T %a %D : Finished.” >> $LOG 2>&1
echo “————————————————-” >> $LOG 2>&1
rm -f /var/lock/subsys/oracle

;;
restart)
$0 stop
$0 start

;;
*)
echo “Usage: oracle {start|stop|restart}”
exit 1
esac
   保存后,需要修改一下权限:
  [root@RHEL ~]#chmod 755 /etc/rc.d/init.d/oracle
   关于这部分服务的编写,可以参考/etc/rc.d/init.d下其他服务,比如iptables之类的。
三、建立服务连接
   系统启动时启动数据库,我们需要以下连结∶
  [root@RHEL ~]#ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc2.d/S99oracle
  [root@RHEL ~]#ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc3.d/S99oracle
  [root@RHEL ~]#ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc5.d/S99oracle #rc4.d unused

 
     张义超 2014-04-20
    [root@RHEL ~]# ln -s /etc/rc.d/init.d/oracle10g /etc/rc.d/rc2.d/S99oracle
   [root@RHEL ~]# ln -s /etc/rc.d/init.d/oracle10g /etc/rc.d/rc3.d/S99oracle
   [root@RHEL ~]# ln -s /etc/rc.d/init.d/oracle10g  /etc/rc.d/rc5.d/S99oracle #rc4.d unused
 

    要在重新启动时停止数据库,我们需要以下连结∶
  [root@RHEL ~]#ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc0.d/K01oracle # stop
  [root@RHEL ~]#ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc6.d/K01oracle # restart
 
     张义超 2014-04-20
    [root@RHEL ~]# ln -s /etc/rc.d/init.d/oracle10g /etc/rc.d/rc0.d/K01oracle # stop
   [root@RHEL ~]# ln -s /etc/rc.d/init.d/oracle10g /etc/rc.d/rc6.d/K01oracle # restart

四、修改dbstart和dbshut
   尽管在服务脚本中,用到了dbstart和dbshut,但是还不知道里面有些什么。其实,还是需要简单地修改一下这两个文件,以便正确启动oracle 监听服务。
  [oracle@RHEL ~]$ gedit $ORACLE_HOME/bin/dbstart
   可以在内容中找到:
# Set this to bring up Oracle Net Listener
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”
else
LOG=$ORACLE_HOME_LISTNER/listener.log # Start Oracle Net Listener
if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
   echo “$0: Starting Oracle Net Listener” >> $LOG 2>&1
   $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`
else
   echo “Failed to auto-start Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr”
fi
fi
   这部分内容是启动Oracle监听服务,但是它指定的路径却是:/ade/vikrkuma_new/oracle。需要修改一下,变成我们自己的安装路径:
  ORACLE_HOME_LISTNER=/usr/app/oracle/product/10.2.0/db_1
   需要说明的是,如果监听(Listener)的名字不是标准的,那么还需要修改:$ORACLE_HOME_LISTNER/bin/lsnrctl start 为
$ORACLE_HOME_LISTNER/bin/lsnrctl start [监听名]。
  [oracle@RHEL ~]$ gedit $ORACLE_HOME/bin/dbshut
   找遍内容,却没有发现有关于停止监听服务的内容。为了于dbstart对应,在文件中添加如下内容(其中着色部分是添加的内容):
……………………………………………….
# Save LD_LIBRARY_PATH
SAVE_LLP=$LD_LIBRARY_PATH# Added by ldy 2009-01-04
# Set this to stop Oracle Net Listener
ORACLE_HOME_LISTNER=/usr/app/oracle/product/10.2.0/db_1
if [ ! $ORACLE_HOME_LISTNER ] ; then
echo “ORACLE_HOME_LISTNER is not SET, unable to auto-stop Oracle Net Listener”
else
LOG=$ORACLE_HOME_LISTNER/listener.log # Stop Oracle Net Listener
if [ -f $ORACLE_HOME_LISTNER/bin/tnslsnr ] ; then
   echo “$0: Stopping Oracle Net Listener” >> $LOG 2>&1
   $ORACLE_HOME_LISTNER/bin/lsnrctl stop >> $LOG 2>&1 &
   export VER10LIST=`$ORACLE_HOME_LISTNER/bin/lsnrctl version | grep “LSNRCTL for ” | cut -d’ ‘ -f5 | cut -d’.’ -f1`
else
   echo “Failed to auto-stop Oracle Net Listene using $ORACLE_HOME_LISTNER/bin/tnslsnr”
fi
fi
# End Added# Set this in accordance with the platform
ORATAB=/etc/oratab
……………………………………………….
五、验证服务
   最简单的办法,就是重启电脑,查看效果。重启之后:
[oracle@RHEL ~]$sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 – Production on Sun Jan 4 18:41:37 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options

SQL> select instance_name,status from v$instance;

INSTANCE_NAME    STATUS
—————- ————
orcl             OPEN

[oracle@RHEL ~]$lsnrctl status

LSNRCTL for Linux: Version 10.2.0.1.0 – Production on 04-JAN-2009 18:42:25

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=RHEL.smnpc.com)(PORT=1521)))
STATUS of the LISTENER
————————
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 – Production
Start Date                04-JAN-2009 15:16:45
Uptime                    0 days 3 hr. 25 min. 40 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /usr/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /usr/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary…
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=RHEL.smnpc.com)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Services Summary…
Service “PLSExtProc” has 1 instance(s).
Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service…
Service “orcl” has 1 instance(s).
Instance “orcl”, status READY, has 1 handler(s) for this service…
Service “orclXDB” has 1 instance(s).
Instance “orcl”, status READY, has 1 handler(s) for this service…
Service “orcl_XPT” has 1 instance(s).
Instance “orcl”, status READY, has 1 handler(s) for this service…
The command completed successfully

   当然,也可以手动启动/关闭/重启服务:
  [root@RHEL ~]#sercice oracle start
  [root@RHEL ~]#sercice oracle stop
  [root@RHEL ~]#sercice oracle restart

 

    如果在oracle用户下,那么直接用dbstart或者dbshut就可以了。此外,如果想启动数据库服务时也启动管理器或者isqlplus,那么还需要修改一下dbstart和dbshut脚本,或者在服务脚本中进行编写。增加:emctl start dbconsole和isqlplusctl start。

linux5.3 64位平台下 Oracle10g 安装详解

 安装步骤和32 基本一样,在一些参数上有些变化

安装操作系统

 建议使用英文的。 这样避免以后出现乱码的问题。

  1. 检查相关安装包     redhat 5下需要如下包, 这些包在安装操作系统的时候基本都安装了,不过要确认一下。 包的版本也有差别, 只要安装了就可以了。

 

binutils-2.17.50.0.6-9.el5.x86_64.rpm

compat-db-4.2.52-5.1.x86_64.rpm

compat-gcc-34-3.4.6-4.x86_64.rpm

compat-gcc-34-c++-3.4.6-4.x86_64.rpm

compat-libstdc++-33-3.2.3-61.x86_64.rpm

compat-libstdc++-33-3.2.3-61.i386.rpm

compat-libstdc++-296-2.96-138.i386.rpm

gcc-4.1.2-44.el5.x86_64.rpm

gcc-c++-4.1.2-44.el5.x86_64.rpm

glibc-2.5-34.x86_64.rpm

glibc-2.5-34.i686.rpm

glibc-common-2.5-34.x86_64.rpm

glibc-devel-2.5-34.x86_64.rpm

glibc-devel-2.5-34.i386.rpm

glibc-headers-2.5-34.x86_64.rpm

libgcc-4.1.2-44.el5.i386.rpm

libXp-1.0.0-8.1.el5.i386.rpm

libXt-1.0.2-3.1.fc6.i386.rpm

libXtst-1.0.1-3.1.i386.rpm

libaio-0.3.106-3.2.x86_64.rpm

libaio-devel-0.3.106-3.2.x86_64.rpm

libgcc-4.1.2-44.el5.x86_64.rpm

libstdc++-4.1.2-44.el5.x86_64.rpm

libstdc++-devel-4.1.2-44.el5.x86_64.rpm

libgomp-4.3.2-7.el5.x86_64.rpm

make-3.81-3.el5.x86_64.rpm

numactl-devel-0.9.8-7.el5.x86_64.rpm

sysstat-7.0.2-3.el5.x86_64.rpm 

这里要注意的是libXp sysstat 包。 2个包我装了好多次,都没有安装。

  1. 设置Shell Limits

编辑vi /etc/security/limits.conf 文件,

oracle soft    nproc   2047

oracle hard    nproc   16384

oracle soft    nofile  1024

oracle hard    nofile  65536    

  1. 修改vi /etc/pam.d/login 文件     在该文件添加如下内容:Session required /lib/security/pam_limits.so
  2. 配置Kernel Parameters    

编辑vi /etc/sysctl.conf 文件添加如下参数:

# Controls the maximum shared segment size, in bytes —物理内存的一般

kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296  —物理内存除以pagesize

— 以上2个参数,都已经存在, 只需要调整一下参数大小

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 327679  

net.core.rmem_default = 1048576

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

net.ipv4.ip_local_port_range = 9000 6550  — 这个端口从9000开始

  1.  添加用户组和用户,并为oracle用户设置密码

#groupadd oinstall

#groupadd dba

#groupadd oper

#useradd -g oinstall -G dba oracle

#passwd oracle

 

  1. 创建Oracle安装文件夹

mkdir -p /oracle/product/10.2.0/db_1
chown -R oracle.oinstall /oracle
chmod -R 777 /oracle

 

  1.  设置oracle用户的环境变量

#vi /home/oracle/.bash_profile

将如下代码添加到.bash_profile文件中:

# Oracle Settings

TMP=/tmp; export TMP

TMPDIR=$TMP; export TMPDIR

ORACLE_BASE=/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1; export ORACLE_HOME

ORACLE_SID=jhemr; export ORACLE_SID

ORACLE_TERM=xterm; export ORACLE_TERM

PATH=/usr/sbin:$PATH; export PATH

PATH=$ORACLE_HOME/bin:$PATH; export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib; export LD_LIBRARY_PATH

CLASSPATH=$ORACLE_HOME/jre:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; export CLASSPATH

if [ $USER = “oracle” ]; then

if [ $SHELL = “/bin/ksh” ]; then

ulimit -p 16384

ulimit -n 65536

else

ulimit -u 16384 -n 65536

fi

fi

 

  1.  更改# vi /etc/redhat-release

  Red Hat Enterprise Linux Server release 5.3 (Tikanga)    改为  redhat-4

  1.  开始安装
  2. root 执行
  3.  

             解决:#xhost

####如果启动页面出现乱码问题http://blog.csdn.net/wushuang5566110/article/details/6590877

exportNLS_LANG=AMERICAN_AMERICA.UTF8
export LC_ALL=C

  ####Xlib: connection to “:0.0” refused by server的解决方法

       用平时用的账户登录( root),然后在终端输入以下命令,就可以搞定了!
xhost 192.168.1.101:oracle non-network192.168.1.101 connections being added to access control list

   http://blog.csdn.net/wushuang5566110/article/details/6594867

    1. 进入如oracle安装 /runInstaller
    2. 有时候会出现libXp的问题直接安装libXp rpm就行。  
    3. 在安装之后会让运行连个脚本文件直接用root运行即可
    4. 更改# vi /etc/redhat-release
  1.  添加oracle自启动服务
  2. RHEL5配置Oracle10g服务和实例自动启动
    Linux
    中在Oracle安装完毕以后,如果重新启动Linux ,Oracle是不会自动启动的,你可以通过手动进行启动,也可以通过配置Oracle的自动启动脚本,然后利用LinuxService来启动Oracle服务器.
    首先在/etc/init.d/目录下配置Oracle的服务文件  Linux中在Oracle安装完毕以后,如果重新启动Linux Oracle是不会自动启动的,你可以通过手动调用dbstart命令来进行启动,不过这样似乎也很繁琐。我们可以通过配置Oracle的自动启动脚本,然后利用LinuxService来启动Oracle服务器。 首先在/etc/rc.d/init.d/目录下配置Oracle的服务文件。touch oracle10g
    chmod a+x oracle10g
  3. #!/bin/bash
    # whoami
    # root
    # chkconfig: 345 51 49
    # /etc/init.d/oracle10g
    # description: starts the oracle dabase deamons
    #
    ORA_HOME=/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”
    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”
    su – $ORA_OWNER -c “$ORA_HOME/bin/emctl stop dbconsole”
    rm -f /var/lock/subsys/oracle10g
    echo
    ;;
    restart)
    echo -n “restarting oracle10g: ”
    $0 stop
    $0 start
    echo
    ;;
    *)
    echo “Usage: `basename $0` start|stop|restart”
    exit 1
    esac
    exit 0

保存后退出 

  1.  

检查开机启动项
保存文件,退出以后,添加并启动察看服务。
/sbin/chkconfig –add oracle10g
/sbin/chkconfig –list oracle10g


  1. 重新启动Linux的时候,如果看到启动项Oracle出现OK,代表Oracle成功随Linux启动了.
    注意:
    这样的脚本启动一般不会启动实例,如果想让实例也随脚本一起启动的话,就需要修改文件:/etc/oratab
    如果这个文件不存在,那么就得运行脚本文件产生它, ~/oracle/product/10.1.0/db_1/root.sh(以root身份运行)
    比如我的oratab代码如下:
    oracl:/oracle /app/oracle/product/10.2.0/db_1:Y
    看设置,可以看出实例 gzgi 是自动启动的(表识是Y),orcl的表识是N,则不启动.只要在这里设置好后,在配合上面的脚本,即可实现开机自动启动oracle以及实例了.