最近突然发现我们的数据库启动比较麻烦,因为我们的Oracle有好几个数据库实例,每次重启的时候都需要修改ORACLE_SID(不知道有没有别的好办法,我暂时只会这样做),然后用Sqlplus连接,然后启动或者关闭,导致每次启动或者关闭都需要很多时间,而且麻烦,最近突然想到应该写一个脚本来实现,于是就开始动手做了。<o:p></o:p>
1、启动脚本<o:p></o:p>
关于Oracle的启动脚本,Oracle自己就有,所以我就用了Oracle自带的。<o:p></o:p>
具体步骤如下:<o:p></o:p>
a、 $cd $ORACLE_HOME<o:p></o:p>
b、 $cd bin<o:p></o:p>
c、 将Oracle自带的启动和关闭脚本复制一份,我们之后修改复制品就好了。<o:p></o:p>
具体复制:dbstart和dbshut这两个文件,复制之后重新命名。<o:p></o:p>
我复制了两份,分别是dbstartDB1,dbstartDB2,dbshutDB1,dbshutDB2<o:p></o:p>
2、Oratab修改<o:p></o:p>
用root用户登录,然后切换到/etc目录,然后复制oratab这个文件,复制之后重新命名。<o:p></o:p>
我复制了两份,分别是oratabDB1,oratabDB2<o:p></o:p>
然后修改这两个复制品:<o:p></o:p>
a、修改oratabDB1<o:p></o:p>
将SIDofDB1:/opt/oracle/product/9.2.0:N 修改成 SIDofDB1:/opt/oracle/product/9.2.0:Y<o:p></o:p>
b、修改oratabDB2<o:p></o:p>
将SIDofDB1:/opt/oracle/product/9.2.0:N 修改成 SIDofDB2:/opt/oracle/product/9.2.0:Y<o:p></o:p>
3、修改启动和关闭脚本<o:p></o:p>
a、修改dbstartDB1<o:p></o:p>
将ORATAB=/etc/oratab 修改成 ORATAB=/etc/oratabDB1<o:p></o:p>
b、修改dbshutDB1<o:p></o:p>
将ORATAB=/etc/oratab 修改成 ORATAB=/etc/oratabDB1<o:p></o:p>
c、修改dbstartDB2<o:p></o:p>
将ORATAB=/etc/oratab 修改成 ORATAB=/etc/oratabDB2<o:p></o:p>
d、修改dbshutDB2<o:p></o:p>
将ORATAB=/etc/oratab 修改成 ORATAB=/etc/oratabDB2<o:p></o:p>
这样修改之后,发觉已经可以打开和关闭数据库了,但是有时候关闭数据库非常缓慢,原来是关闭脚本有点问题。<o:p></o:p>
于是我修改了dbshutDB1,编辑dbshutDB1,在shutdown后添加了一个参数immediate, 这样就可以很快地关闭数据库了。<o:p></o:p>
同样也修改了dbshutDB2,不过这样修改有点不是很好,还是原来的比较安全。<o:p></o:p>
4、结果<o:p></o:p>
前面已经作好了所有的准备工作,于是,就开始针对自己的数据库制作启动脚本了。<o:p></o:p>
a、编写DB1.sh<o:p></o:p>
内容如下:<o:p></o:p>
#!/bin/sh<o:p></o:p>
#Created by yaogao 2006-12-07<o:p></o:p>
#Mail: [email protected]<o:p></o:p>
ORACLE_HOME=/opt/oracle/product/9.2.0<o:p></o:p>
export ORACLE_SID=DB1<o:p></o:p>
case $1 in<o:p></o:p>
start)<o:p></o:p>
echo "Start DB1.................."<o:p></o:p>
. $ORACLE_HOME/bin/dbstartDB1 &<o:p></o:p>
lsnrctl start DB1 &<o:p></o:p>
;;<o:p></o:p>
stop)<o:p></o:p>
echo "Stop DB1..................."<o:p></o:p>
. $ORACLE_HOME/bin/dbshutDB1 &<o:p></o:p>
lsnrctl stop DB1 &<o:p></o:p>
esac<o:p></o:p>
echo "Operation terminated.........."<o:p></o:p>
b、编写DB2.sh<o:p></o:p>
内容如下:<o:p></o:p>
#!/bin/sh<o:p></o:p>
#Created by yaogao 2006-12-07<o:p></o:p>
#Mail: [email protected]<o:p></o:p>
ORACLE_HOME=/opt/oracle/product/9.2.0<o:p></o:p>
export ORACLE_SID= DB2<o:p></o:p>
case $1 in<o:p></o:p>
start)<o:p></o:p>
echo "Start DB2.................."<o:p></o:p>
. $ORACLE_HOME/bin/ dbstartDB2 &<o:p></o:p>
;;<o:p></o:p>
stop)<o:p></o:p>
echo "Stop DB2..................."<o:p></o:p>
. $ORACLE_HOME/bin/ dbshutDB2 &<o:p></o:p>
esac<o:p></o:p>
echo "Operation terminated.........."<o:p></o:p>
c、编写启动和关闭脚本<o:p></o:p>
启动脚本:<o:p></o:p>
#!/bin/sh<o:p></o:p>
#Created by yaogao 2006-12-07<o:p></o:p>
#Mail: [email protected]<o:p></o:p>
./db1.sh start<o:p></o:p>
./db2.sh start<o:p></o:p>
关闭脚本:<o:p></o:p>
#!/bin/sh<o:p></o:p>
#Created by yaogao 2006-12-07<o:p></o:p>
#Mail: [email protected]<o:p></o:p>
./db1.sh stop<o:p></o:p>
./db2.sh stop<o:p></o:p>
<o:p> </o:p>
这样就大功告成了,如果还有DB3,用同样的方法处理就可以了。<o:p></o:p>
5、关于系统环境<o:p></o:p>
Oracle9i,Redhat9<o:p></o:p>