Oracle 提供了伴随操作系统自动重启的功能,在 Windows 中,可以修改“我的电脑 --> 管理 --> 服务 -->OracleService$ORACLE_SID ”,或直接使用 Win+R 键打开运行窗口,输入 services.msc 即可打开服务,找到相应的 Oracle 服务,然后将其属性中的启动类型修改成自动。一般在 Windows 系统上安装完后会自动设置成自动。
对于 Linux/Unix 操作系统,如果想设置自动重启,那该如何操作呢?对此 Oracle 提供了 dbstart 命令用于启动,可以有 2 种方法来配置。
方法 1 :配置 Linux 的 service 服务
1. 修改 /etc/oratab
1[root@oracle ~]
#vim /etc/oratab
2orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y
#将N改为Y
文件 /etc/oratab 由 root.sh 脚本创建,在用 DBCA 创建实例时也会更新这个文件。当 $ORACLE_SID:$ORACLE_HOME:<N|Y> 设置为 Y 时,允许实例自启动,当设置为 N 时,则不允许自启动。这个文件里的配置仅仅起一个开关的作用,其并不会具体的执行启动和关闭,具体的操作由 $ORACLE_HOME/bin/dbstart 和 dbshut 脚本来实现。这 2 个脚本在执行时会检查 /etc/oratab 文件里的配置,为 Y 时才能继续执行。
2. 修改 $ORACLE_HOME/bin/dbstart 和 $ORACLE_HOME/bin/dbshut
1[root@oracle ~]
#vim $ORACLE_HOME/bin/dbstart
2[root@oracle ~]
#vim $ORACLE_HOME/bin/dbshut
3ORACLE_HOME_listener=$ORACLE_HOME ($1改为$ORACLE_HOME)
ORACLE_HOME_ listener 的位置: Oracle 11g 的 dbstart 在第 80 行, dbshut 文件中在第 50 行。
3. 建立启动脚本
使用 root 用户创建脚本:
[root@oracle ~]#vim /etc/rc.d/init.d/oracle
1
#!/bin/bash
2
# chkconfig: 2345 99 10
3
# description: Startup Script for oracle Databases
4
# /etc/rc.d/init.d/oracle
5
6export ORACLE_BASE=/u01/app/oracle/
7export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
8export PATH=$PATH:$ORACLE_HOME/bin
9export ORACLE_UNQNAME=PROD1
10
11echo " " >> /var/log/oraclelog
12echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog
13
14case "$1" in
15
start)
16echo
"-----startup oracle-----" >> /
var/
log/oraclelog
17su
oracle -c
"$ORACLE_HOME/bin/dbstart"
18su
oracle -c
"$ORACLE_HOME/bin/emctl start dbconsole"
19touch /
var/
lock/subsys/
oracle
20echo
`date +'%Y-%m-%d %H:%M:%S'` >> /
var/
log/oraclelog
21echo
"-----startup oracle successful-----" >> /
var/
log/oraclelog
22echo
"OK"
23;;
24
25
stop)
26echo
"-----shutdown oracle-----" >> /
var/
log/oraclelog
27su
oracle -c
"$ORACLE_HOME/bin/dbshut"
28su
oracle -c
"$ORACLE_HOME/bin/emctl stop dbconsole"
29rm -f /
var/
lock/subsys/
oracle
30echo
`date +'%Y-%m-%d %H:%M:%S'` >> /
var/
log/oraclelogg
31echo
"-----shutdown oracle successful-----" >> /
var/
log/oraclelog
32echo
"OK"
33;;
34
35restart)
36echo "
-----shutdown oracle-----" >> /var/log/oraclelog
37su oracle -c "$ORACLE_HOME/bin/dbshut"
38su oracle -c "$ORACLE_HOME/bin/emctl
stop dbconsole
"
39rm -f /var/lock/subsys/oracle
40echo `date +'%Y-%m-%d %H:%M:%S'` >> /var/log/oraclelog
41echo "
-----shutdown oracle successful-----" >> /var/log/oraclelog
42
43echo
"-----startup oracle-----" >> /
var/
log/oraclelog
44su
oracle -c
"$ORACLE_HOME/bin/dbstart"
45su
oracle -c
"$ORACLE_HOME/bin/emctl start dbconsole"
46touch /
var/
lock/subsys/
oracle
47echo
`date +'%Y-%m-%d %H:%M:%S'` >> /
var/
log/oraclelog
48echo
"-----startup oracle successful-----" >> /
var/
log/oraclelog
49echo
"OK"
50;;
51
52*)
53echo "Usage: 'basename $0'
start|
stop|restart
"
54exit 1
55esac
56exit 0
57
4. 给脚本设置权限
1[root@oracle ~]
# chmod 755 /etc/rc.d/init.d/oracle
5. 建立服务
1[root@oracle ~]
# chkconfig --add oracle
2[root@oracle ~]
# chkconfig oracle on
3[root@oracle ~]
# chkconfig --list oracle
4oracle 0:off 1:off 2:on 3:on 4:on 5:on 6:off
6. 检查是否生效
先使用 root 用户测试服务是否生效:
1[root@edsir4p1 ~]
# service oracle stop
2[root@edsir4p1 ~]
# service oracle start
3[root@edsir4p1 ~]
# service oracle restart
再重启 OS ,验证是否生效。
方法 2 :配置 /etc/rc.d/rc.local 文件
在配置了 /etc/oratab 和修改了 dbstart 、 dbshut 文件后,然后 将以下脚本添加 到 /etc/rc.d/rc.local 或 /etc/rc.local 文件中 (/etc/rc.local 是 /etc/rc.d/rc.local 的软连接文件) :
1export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1
2su oracle -c $ORACLE_HOME/bin/dbstart
3export ORACLE_UNQNAME=PROD1
4su oracle -c "$ORACLE_HOME/bin/emctl
start dbconsole
"
5
若环境中没有创建 EM ,则可以不用添加 ORACLE_UNQNAME ,和 emctl 这 2 行,最后就可以重启OS做测试工作了。
需要注意的是,在CentOS7 中, /etc/rc.d/rc.local 的权限被降低了,所以需要执行如下命令赋予其可执行权限:
1chmod +x /etc/rc.d/rc.local
对于这 2 种方法,需要注意的几个问题:
1. 多个实例都会自动重启。
2. 监听也会自动重启。
3. 重启的详细日志为: $ORACLE_HOME/shutdown.log 和 $ORACLE_HOME/startup.log 。
4. oracle 用户的环境变量可以不用配置。
5. ORACLE_UNQNAME 的作用是设置 EM 的环境变量, emctl 是启动 OEM ,若没有则可以不用设置。
6. ORACLE_HOME 的作用是设置数据库监听的环境变量。
7. 对于ASM 、 RAC 环境,只需要将数据库资源注册的 CRS 中,即可实现开机启动。
