FAQ on Oracle8i Release 2 on RedHat 6.0
Jesus M. Salvo Jr., jmsalvo@ihug.com.au [yanzi 编译]
Last Updated: $Date: 2000/05/28 12:44:54 $
Oracle 8i Release 2 (8.1.6) for Linux解决了Oracle 8i (8.1.5) for Linux遇到的大多数安装问题。实际上,它已经是在官方发布之前就打上补丁。通过在发行中包括一个已经用安装测试过的JRE 1.1.8,已经解决了大多数安装问题。
正如上面说的,但仍然有几个你可能要注意的问题,不使用用在 "Installing Oracle8i on RedHat 6.0"中的按部就班方式,而本文是用FAQ风格,因为无论如何你安装Oracle8i Release 2 将不会再有那么多问题了。
I am not an employee of Oracle Corporation. Copyright ?2000 Jesus M. Salvo Jr. Licensed under the OPL.
数据库启动和关闭
dbstart不工作
自动化数据库启动和关闭
其他
Load indicator not supported by OS!
数据库启动和关闭
dbstart不工作
dbstart所做的部分是指出你有哪个Oracle版本。它通过检查某些执行文件如sqldba和svrmgrl的存在与否并用执行文件并使用awk从文件的输出寻找版本号。dbstart脚本不工作的原因是因为下列行:
# Figure out if this is a V5, V6, or V7 database. Do we really need V5?
if [ -f $ORACLE_HOME/bin/sqldba ] ; then
VERSION=` $ORACLE_HOME/bin/sqldba command=exit | awk '
/SQL\*DBA: (Release|Version)/ {split( $3, V, ".") ;
print V[1]}'`
else
if test -f $ORACLE_HOME/bin/svrmgrl; then
VERSION=` $ORACLE_HOME/bin/svrmgrl command=exit | awk '
/PL\/SQL (Release|Version)/ {substr( $3,1,3) ;
print substr( $3,1,3)}'`
else
VERSION="8.2"
fi
fi
(看上去Oracle 8.2好像不再有svrmgrl了)。
在执行svrmgrl时,它寻找"PL/SQL Release" 或 "PL/SQL Version"这样的词句并在这些字后得出版本号。问题是,这两个词都不是svrmgrl'的输出部分,如下所示:
Oracle Server Manager Release 3.1.6.0.0 - Production
Copyright (c) 1997, 1999, Oracle Corporation. All Rights Reserved.
Oracle8i Enterprise Edition Release 8.1.6.1.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
SVRMGR>
所以很容易修正它。我做的是搜索"Edition Release",所以我将前面的脚本部分改成如下的样子:
# Figure out if this is a V5, V6, or V7 database. Do we really need V5?
if [ -f $ORACLE_HOME/bin/sqldba ] ; then
VERSION=` $ORACLE_HOME/bin/sqldba command=exit | awk '
/SQL\*DBA: (Release|Version)/ {split( $3, V, ".") ;
print V[1]}'`
else
if test -f $ORACLE_HOME/bin/svrmgrl; then
VERSION=` $ORACLE_HOME/bin/svrmgrl command=exit | awk '
/Edition Release/ {substr( $5,1,3) ;
print substr( $5,1,3)}'`
else
VERSION="8.2"
fi
fi
自动数据库的启动和关闭
对于Oracle8i,Oracle在安装指南中提供的rc脚本不工作而且不能关闭Oracle。下面的文字拷贝自"Installing Oracle8i on RedHat 6.0"文档的"Automating Database Startup and Shutdown",除了我修改了某些部分,用8.1.6代替8.1.5。
步骤包括:
su成为root。
修改/etc/oratab中的具有ORACLE_SID:ORACLE_HOME:{Y|N}形式的行,用你的环境变量值ORACLE_SID和ORACLE_HOME: ORCL:/home/oracle/app/oracle/product/8.1.6:Y
行末的Y将指出你是否想要数据库自动启动和关闭。
在/etc/rc.d/init.d中创建一个脚本,名为oracle8i,并输入写列代码,它是Oracle 8i安装指南中提供的脚本的修改版本。注意Oracle 8i安装指南中的脚本有一个bug,它禁止关闭Oracle 8i数据库。这在下面说明。 #!/bin/sh
# 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=/home/oracle/app/oracle/product/8.1.6
ORA_OWNER=oracle
case " $1" in
'start')
# Start the Oracle databases:
# The following command assumes that the oracle login will not prompt the
# user for any values
echo -n "Starting Oracle8i Release 2: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle8i
echo
;;
'stop')
# Stop the Oracle databases:
# The following command assumes that the oracle login will not prompt the
# user for any values
echo -n "Shutting down Oracle8i Release 2: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle8i
echo
;;
'restart')
# Restart the Oracle databases:
echo -n "Retarting Oracle8i Release 2: "
$0 stop
$0 start
echo
;;
*)
echo "Usage: oracle8i { start | stop | restart }"
exit 1
esac
exit 0
确保用你的ORACLE_HOME环境变量的值替代ORA_HOME的值。关于该修改脚本,有几点有指出:
上面的修改脚本在/var/lock/subsys创建一个脚本以指出子系统或进程正在运行,而缺省的脚本不是这样。脚本/etc/rc.d/rc作为一个背景进程,当杀死进程将执行对以K打头的运行级别的所有脚本时,它也通过在/var/lock/subsys中检查一个文件的存在性来检查子系统是否在运行,这些文件的名字必须类似。所以,如果你使用缺省脚本,它将不能关闭Oracle 8i数据库,因为在/var/lock/subsys中没有文件。对RedHat 6.0是这样,我不能肯定RedHat 6.1或其他Linux分发的/etc/rc.d/rc是否相同。
作为上述的一个推论,如果你为上述脚本起名不是oracle8i,修改所有行: touch /var/lock/subsys/oracle8i
rm /var/lock/subsys/oracle8i
并用脚本名替代oracle8i。例如,如果你命名脚本为dbora,你应该有:
touch /var/lock/subsys/dbora
rm /var/lock/subsys/dbora
使脚本可执行: chmod +x /etc/rc.d/init.d/oracle8i
手工测试脚本确实工作,试下列: ./oracle8i stop
./oracle8i start
./oracle8i restart
./oracle8i invalid-parameter
创建一个到你刚刚创建以自动化数据库关闭的脚本的链接。Runlevel 0 是HALT,而runlevel 6是REBOOT: ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc0.d/K10oracle8i
ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc6.d/K10oracle8i
无论何时系统改变到运行级别0或6,脚本执行,在你分别发出/sbin/shutdown -h now 和/sbin/shutdown -r now时发生。
可选地,创建一个到你刚刚创建以自动化数据库启动的脚本的链接,我选择运行级别3作为RedHat 6.0的缺省运行级别。 ln -s /etc/rc.d/init.d/oracle8i /etc/rc.d/rc3.d/S99oracle8i
其他
Load indicator not supported by OS!
该问题已经在Oracle8i for Linux使用Multi-Threaded Server(MTS)是发生过,然而,有一个改进,即消息不再每20秒左右记录到pmon跟踪文件中。现在只在每次实例启动时,在警告文件和pmon跟踪文件中记录一次。
对于更多的信息,见"I get lots of "Load Indicator not Supported by OS!" both in my alert log and my pmon trace file."
$Header: /cvsrepository/master/homepage/linux/oracle8ir2.html,v 1.2 2000/05/28 12:44:54 john Exp $
Author: Jesus M. Salvo Jr.