六笨哥
分类: Oracle
2009-11-20 16:12:53
Linux中在Oracle安装完毕以后,如果重新启动Linux ,Oracle是不会自动启动的,你可以通过手动调用dbstart命令来进行启动,不过这样似乎也很繁琐.我们可以通过配置Oracle的自动启动脚本,然后利用Linux的Service来启动Oracle服务器.
关于oracle在linux系统下安装后,如何在系统重启的情况下让服务自动启动起来,网上有很多的教程和现成的脚本,这里只是个人工作中总结的一些经验。(以下操作仅供参考,请勿照本宣科)
本文以 REDHAT AS4.8和oracle10G为例,Oracle安装过程可参考64位Linux环境如何安装ORACLE10G。
Oracle 数据库的自动启动及停止可籍 Oracle 提供的 dbstart 及 dbshut 档达成 。这些文件又耍依靠 /etc/oratab 存在才能使用。想要实现oracle随Linux系统自动启动,有两种方式:
一、设成开机自动启动数据库(用root账号)
1、改/etc/oratab 最后一行
sid:/oracle/product/10.2.0.1:N
=>
sid:/oracle/product/10.2.0.1:Y(其中sid为想要启动的database)
2、改/etc/rc.local
echo "su - oracle -c 'lsnrctl start'" >> /etc/rc.local
echo "su - oracle -c 'dbstart'" >> /etc/rc.local
实际操作中可能会出现不能自动启动oracle数据库的情况!
以oracle编辑$ORACLE_HOME/bin/dbstart,找到其中第88行:ORACLE_HOME_LISTNER=改为你自己的路径,或者可以改成ORACLE_HOME_LISTNER=$ORACLE_HOME,和$ORACLE_HOME/bin/dbshut,找到其中第77行:ORACLE_HOME_LISTNER=改为你自己的路径,或者可以改成ORACLE_HOME_LISTNER=$ORACLE_HOME。
保存脚本,以oracle用户运行dbshut和dbstart看是否能关闭、启动数据库。如果不能,一般是参数设置,根据报错找到对应位置更改。
二、配置Oracle的自动启动脚本
首先在/etc/rc.d/init.d/目录下配置Oracle的服务文件
#touch /etc/rc.d/init.d/oracle
#chmod 755 /etc/rc.d/init.d/oracle
#chown -R /ect/rc.d/init.d/oracle
然后vi编辑oracle文件,将一下脚本输入到oracle中
#! /bin/sh
#description: Oracle auto start-stop script.
# chkconfig: 345 99 10
# Set ORA_HOME to be equivalent to the $ORACLE_HOME
# from which you wish to execute dbstart and dbshut;
#
# Set ORA_OWNER to the user id of the owner of the
# Oracle database in ORA_HOME.
ORA_HOME=/app/oracle/product/10.2.0/db_1
ORA_OWNER=oracle
#
case "$1" in
start)
echo -n "Starting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Starting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Starting Oracle Listeners: "
su - oracle -c "lsnrctl start" >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
stop)
echo -n "Shutting Down Oracle Listeners: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Shutting Down Oracle Databases 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 -n "Shutting Down Oracle Databases: "
su - oracle -c dbshut >> /var/log/oracle
echo "Done."
echo ""
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Finished." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
;;
restart)
echo -n "Restarting Oracle Databases: "
echo "----------------------------------------------------" >> /var/log/oracle
date +"! %T %a %D : Restarting Oracle Databases as part of system up." >> /var/log/oracle
echo "----------------------------------------------------" >> /var/log/oracle
su - oracle -c dbstop >> /var/log/oracle
su - oracle -c dbstart >> /var/log/oracle
echo "Done."
echo -n "Restarting Oracle Listeners: "
su - oracle -c "lsnrctl stop" >> /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
echo "----------------------------------------------------" >> /var/log/oracle
touch /var/lock/subsys/oracle
;;
*)
echo "Usage: oracle {start|stop|restart}"
exit 1
esac
保存文件,退出以后,添加并启动察看服务。
#chkconfig --add oracle
#chkconfig --list oracle
chkconfig --list oracle的运行结果:
oracle 0:off 1:off 2:off 3:on 4:off 5:on 6:off
根据上面的运行结果,当相应的运行级别为on时(例如:5:on),在对应的/etc/rc.d/rcN.d(例如:和5:on对应的是:/etc/rc.d/rc5.d)下面会生成一个文件:S99oracle,使用vi S99oracle打开该文件,可以看到该文件的内容和/etc/rc.d/init.d/oracle内容相同,表示配置成功,其实,S99oracle是一个到/etc/rc.d/init.d/oracle的链接,我们可以使用file命令来查看:
$file /etc/rc.d/rc5.d/S99oracle
S99oracle:symbolic link to '../init.d/oracle
说明一点:
脚本文件中的:# chkconfig: 345 99 10
指出3,4,5级别启动这个服务,99是在相应的/etc/rc.d/rcN.d(N为前面指定的级别,这里是345)目录下生成的链接文件的序号(启动优先级别)S99oracle,10为在除前面指出的级别对应的/etc/rc.d/rcN.d(N为除345之外的级别)目录生成的链接文件的序号(服务停止的优先级别)K10oracle
重启系统,就可以在启动的过程中看到 Starting oracle,因为我们设置的优先级为99,一般是最后启动。[OK]以后就可以了。因为要启动emctl,可能有点慢,等待的时间要稍微长一点。
启动以后可以以root执行oracle start或者oracle stop来启动或停止服务。
注意:
这样的脚本启动一般不会启动实例,如果想让实例也随脚本一起启动的话,就需要修改文件:/etc/oratab
如果这个文件不存在,那么就得运行脚本文件产生它sh /u01/app/oracle/product/10.2.0/root.sh
改/etc/oratab 最后一行
sid:/oracle/product/10.2.0.1:N
=>
sid:/oracle/product/10.2.0.1:Y(其中sid为想要启动的database)
只要在这里设置好后,在配合上面的脚本,即可实现开机自动启动oracle以及实例了.
常用手动控制数据库命令
打开em
emctl start dbconsole
关闭em
emctl stop dbconsole
启动listener
lsnrctl start <监听名>(默认是LISTENER,可省略)
关闭
lsnrctl stop
启动emagent
emctl start agent
关闭
emctl stop agent
启动实例
sqlplus /nolog
conn / as sysdba
startup
关闭
shutdown immediate
测试数据库是否通
tnsping <本地服务名>
========================================
常见问题:
网页界面上的按钮出现“口口”的乱码
解决方案:
1.停止服务,emctl stop dbconsole;
2.把相关目录(RHEL4里面是/etc/java/)下的font.properties用
font.properties.zh_CN.Redhat8.0替换(或font.properties.zh,只要是中文简体就可以。);
3.删除
$ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs中的gif文件
;
4.重起服务(最好是重启服务器) emctl start dbconsole;
/etc/oratab的内容
orcl:/oracle/10.2.0/db_1:Y
=====================================================
以下的 J2EE 应用程序已经配置, 并且可用下面列出的 URL 来访问。
iSQL*Plus URL:
iSQL*Plus DBA URL:
Enterprise Manager 10g Database Control URL:
\==========================================
常用linux命令
df -h
ps -A
top
free
cat /proc/meminfo
uname
grep MemTotal /proc/meminfo
grep SwapTotal /proc/meminfo
hostname