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