menu

开发进行时...

crazy coder

Avatar

oracle自启动

#!/bin/sh
echo "begin to start oracle"
su - oracle -c "lsnrctl start"
su - oracle -c "agentctl start"
su - oracle -c "sqlplus /nolog" <
connect /as sysdba
startup open
exit

##以下部分为自动停止

#!/bin/sh
su - oracle -c "lsnrctl stop"
su - oracle -c "agentctl stop"
su - oracle -c "sqlplus /nolog" <
connect /as sysdba
shutdown immediate

exit

##另附Oracle常见启动方式:

1、startup nomount
  非安装启动,这种方式启动下可执行:重建控制文件、重建数据库读取init.ora文件,启动instance,即启动SGA和后台进程,这种启动只需要init.ora文件。
  
2、startup mount dbname
  安装启动,这种方式启动下可执行:
  数据库日志归档、
  数据库介质恢复、
  使数据文件联机或脱机,
  重新定位数据文件、重做日志文件。
  执行“nomount”,然后打开控制文件,确认数据文件和联机日志文件的位置,但此时不对数据文件和日志文件进行校验检查。

3、startup open dbname
  先执行“nomount”,然后执行“mount”,再打开包括Redo log文件在内的所有数据库文件,这种方式下可访问数据库中的数据。

4、startup,等于以下三个命令
  startup nomount
  alter database mount
  alter database open
5、startup restrict
  约束方式启动
  这种方式能够启动数据库,但只允许具有一定特权的用户访问非特权用户访问时,会出现以下提示:
  ERROR:
  ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用

6、startup force
  强制启动方式
  当不能关闭数据库时,可以用startup force来完成数据库的关闭
  先关闭数据库,再执行正常启动数据库命令

7、startup pfile=参数文件名
  带初始化参数文件的启动方式
  先读取参数文件,再按参数文件中的设置启动数据库
  例:startup pfile=E:Oracleadminoradbpfileinit.ora

8、startup EXCLUSIVE
  以独占方式打开数据库(只能运行一个实例,默认方式)

9、STARTUP PARALLEL
  并行方式打开数据库

oracle自启动脚本
首先编辑脚本
vi /etc/oratab
SID:ORACLE_HOME:Y

自动启动脚本/etc/rc.d/init.d/oracle
case "$1" in
start)
echo "Starting Oracle Database..."
echo "-------------------------------" >> /var/log/oracle
date +"%T %a %D :Starting Oracle Database 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
touch /var/lock/subsys/oracle

;;
stop)
echo "Stoping Oracle Listener ... "
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 : Finsthed." >> /var/log/oracle
echo "------------------------------------" >> /var/log/oracle

;;
restart)
$0 stop
$0 start

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

chmod 755 /etc/rc.d/init.d/oracle

ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc2.d/S99oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc3.d/S99oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc5.d/S99oracle

ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc0.d/K01oracle
ln -s /etc/rc.d/init.d/oracle /etc/rc.d/rc6.d/K01oracle

在 Linux 系统下安装完数据库之后,会在$ORACLE_HOME/bin 下生成 dbstart 和 dnshut 脚
本,这两个脚本可以简便地实现启动和关闭数据库。
这两个脚本运行时会读取/etc/oratab 文件,在这个文件里指定了需要启动和关闭的 SID(相应 SID 那行的最后一个字符是 Y 而不是 N)

Linux下oracle启动脚本DBSTART和DBSHUT需要修改的地方
DBSHUT 的问题:
默认是执行 shutdown 而不是 shutdown immediate,这样当有别的 client 连着的时候,数
据库不会 shutdown,可以把该脚本执行 shutdown 的部分改成 shutdown immediate,当
然是不是需要这样强行切断用户连接,rollback 所有未 commit 的 transaction,还需要看自
己的需求了。

DBSTART 问题:
执行时会检查在$ORACLE_HOME/dbs 中有没有 initSID.ora 文件,如果没有则报错退出。但
是安装 9i 的时候通常会使用 spfile,所以在此目录下是不会存在 initSID.ora 文件的。修改的
方法有两个:
一是改脚本,在 else 后面加判是否存在 spfile,如果有继续,没有再报错,但是此方法比较麻

二是创建一个 pfile,用 create pfile=pfilepath from spfile=spfilepath 就可以了,此命令
在数据库 instance 没有启动的情况下也可以执行。
感觉这是 Oracle 的一个遗留问题,因为可以看到即使是检查了 pfile,Oracle 的启动仍然使用
了 spfile。

同时需要在/etc/rc.d/init.d/oracle的开头加入如下代码才支持自启动
#!/bin/sh
#chkconfig 235 99 01
#description oracle 11g server
同时就可以使用chkconfig --list oracle查看状态

评论已关闭