在 Fedora Core 3 下安装 Oracle 9i - 安装 HOWTO

Gaurav Prasad

2005-06-27

修订历史
版本 v1.02005-06-22修订者: MG
为了包含在 TLDP 中: 完成了 XML 文章结构,包含 articleinfo,用于交叉引用的章节 ID;技术、语言、语法和拼写审查。
版本 v1.0-pre12005-04-01修订者: GP
添加了杂项错误章节。
版本 v0.12005-03-25
首次发布。

本教程描述了如何在 Fedora Core 3 或更高版本上安装 Oracle 9i。


目录
1. 1. 介绍
1.1. 您需要了解的内容
1.2. 致谢
1.3. 可用性和反馈
1.4. 许可信息和责任
2. 2. 获取 Oracle 9i
2.1. CD 安装
2.2. 下载
2.3. 安装
3. 3. 准备配置
3.1. 创建用户和组
3.2. 创建目录
4. 4. 设置环境变量
5. 5. 设置内核参数
5.1. 编辑 /etc/sysctl.conf
5.2. 编辑 /etc/security/limits.conf
6. 6. 安装 GCC 2.9 兼容库
6.1. 安装 GCC 2.96 兼容包
6.2. 创建符号链接
7. 7. 运行安装程序
7.1. 应用 libwait.c 补丁
7.2. 配置显示
7.3. 开始安装
7.4. 修复 nodeinfo
8. 8. 创建启动脚本
9. 9. 杂项错误

1. 1. 介绍

1.1. 您需要了解的内容

编写本教程是因为我对在 FC3 上安装 Oracle 9i 感到沮丧。基本上,关于在 RAS 1,2,3 RH 9, FC1, FC2 上安装 9i 的文档相当完善,但在 FC3 上很难找到任何有价值的东西;有些人甚至认为在 FC3 上安装 Oracle 9i 是不可能的。本 HOWTO 尝试将我所有的经验和发现,以及任何 FC3 特有的信息,这些信息以前散落在网络各处,浓缩成一份简洁但有用的文档。

我希望您会发现这个简短的教程很有用。

如果您需要在 FC3 上安装 Oracle 9i,您应该了解以下事实

  1. Fedora 未获得 Oracle 公司的 *官方支持*。

  2. 在 FC3 上安装 Oracle 9i 很困难,但有可能。

  3. Oracle 9i 无法与 gcc 3.4 使用的库链接。在 FC3 上,您需要使用 FC2 GCC 兼容库。

  4. Oracle 10 G 安装方法不适用于 9i。

  5. 本 HOWTO 适用于 RedHat 产品 >= FC3 或更高版本,或 gcc 版本大于 2.9。如果您正在安装任何其他 RedHat 产品,您可能需要查看其他优秀的教程,例如 http://www.puschitz.com/OracleOnLinux.shtmlhttp://oracle-base.com/

另请记住

  1. 本 HOWTO 仅旨在帮助您。这不是 Oracle 官方文档。

  2. 我不是 DBA。请不要就本文档内容以外的事项联系我。我不会帮助您设置数据库。如果您需要这方面的帮助,请查看 Oracle 论坛。

  3. 我的下一步可能是编写一些 Bash 或 Perl 脚本来完全自动化这个乏味、枯燥、令人沮丧的手动过程,但这取决于我是否有空闲时间。欢迎您的想法。


1.2. 致谢

我要感谢 Jean Fran�ois 在最棘手的部分帮助了我。


1.3. 可用性和反馈

最新版本可以在 http://www.pagux.com/oracle9ionfedora3.html 找到。

我依靠您,读者,使本 HOWTO 有用。如果您有任何建议、更正或意见,请发送给我,我会尝试在下一个版本中采纳它们。


1.4. 许可信息和责任

版权 2005 Gaurav Prasad

本 HOWTO 是自由文档;您可以根据自由软件基金会发布的 GNU 通用公共许可证的条款重新分发和/或修改它;许可证的第 2 版,或(您选择的)任何更高版本。许可证的副本可在 https://gnu.ac.cn/copyleft/fdl.html 获取。

本文档的发布是希望它有用,但不作任何担保;甚至没有对适销性或特定用途适用性的暗示保证。对于本文档的内容不承担任何责任。使用文中的概念、示例和信息,风险自负。可能存在错误和不准确之处,可能会对您的系统造成损害。请谨慎操作,尽管发生事故的可能性很小,但作者不承担任何责任。

Linux 是 Linus Torvalds 的注册商标。

除非另有特别说明,否则所有版权均归其各自所有者所有。本文档中术语的使用不应被视为影响任何商标或服务标记的有效性。特定产品或品牌的命名不应被视为认可。


2. 获取 Oracle 9i

2.1. CD 安装

如果您从 CD 获取了 Oracle 9i,请挂载它

mount-r -o loop=/dev/loop0 ora9id1.iso Disk1/


2.3. 安装

解压所有三个文件

gunzipship_9204_linux_disk1.cpio.gz

cpio-idmv -I ship_9204_linux_disk1.cpio

不要忘记-I选项,否则在解压期间会出错。

此命令会将 cpio 存档解压到Disk1目录。对其余两个存档重复此过程。


3. 准备配置

3.1. 创建用户和组

root 用户身份执行以下命令

# groupadd oinstall
# groupadd dba
# groupadd oper
# groupadd apache
# useradd -g oinstall -G dba oracle
# passwd oracle

设置用户 oracle 的密码。


3.2. 创建目录

软件的最终目标位置将在这里

# mkdir /u01 /u02
# chown oracle.dba /u01 /u02
# chmod 755 /u01 /u02

4. 设置环境变量

oracle 用户身份登录

su- oracle

编辑.bash_profileoracle 的主目录中,并添加以下内容,例如使用 vim

########## Oracle Variables ##########
echo " Welcome to oracle";
ORACLE_BASE=/u01/app/oracle
ORACLE_OWNER=oracle; export ORACLE_OWNER
ORACLE_TERM=xterm; export ORACLE_TERM
ORACLE_HOME=/u01/app/oracle/product/9.2.0.1.0
ORACLE_SID=ORTD
LD_PRELOAD=$HOME/libcwait.so
export DISPLAY=172.28.66.39:0.0
PATH=$PATH:$ORACLE_HOME/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME/network/lib

CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export CLASSPATH

LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL
THREADS_FLAG=native; export THREADS_FLAG
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

export PATH ORACLE_BASE ORACLE_HOME ORACLE_SID LD_LIBRARY_PATH LD_PRELOAD
########## End of Oracle variables ##########

5. 设置内核参数

5.1. 编辑 /etc/sysctl.conf

将以下行添加到/etc/sysctl.conf文件

kernel.shmmax = 2147483648
kernel.shmmni = 128
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000

5.2. 编辑 /etc/security/limits.conf

此外,可以将以下行添加到/etc/security/limits.conf文件

oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384

将行添加到这些文件需要重新启动才能使新设置生效。


6. 安装 GCC 2.9 兼容库

6.1. 安装 GCC 2.96 兼容包

从 Fedora Core TWO

  • compat-libstdc++-7.3-2.96.126.i386.rpm

  • compat-libstdc++-devel-7.3-2.96.126.i386.rpm

  • compat-gcc-7.3-2.96.126.i386.rpm

  • compat-gcc-c++-7.3-2.96.126.i386.rpm

Caution不要覆盖现有软件包
 

确保您保留现有的 GCC 安装,否则您的大部分软件将无法工作或无法再编译。如果您的系统上已经安装了版本号较新的这些软件包,请使用 rpm -i --force 将旧版本与新版本并排安装。

从 Fedora Core THREE 子树中,获取 compat-db 软件包。

如果您不按上述方法安装 GCC 兼容库,您将收到大量的链接错误。


6.2. 创建符号链接

通过创建以下符号链接,将 gcc296 和 g++296 放在您的 $PATH 变量的最前面

# mv /usr/bin/gcc /usr/bin/gcc323
# mv /usr/bin/g++ /usr/bin/g++323
# ln -s /usr/bin/gcc296 /usr/bin/gcc
# ln -s /usr/bin/g++296 /usr/bin/g++

请注意,如果您已经升级了系统,GCC 版本可能会有所不同。


7. 运行安装程序

7.1. 应用 libwait.c 补丁

在运行安装程序之前,请执行以下操作以克服一些奇怪的错误

  • /home/oracle中,创建一个名为libwait.c的文件,并按照如下所述编译它

    Ceate a file called libcwait.c in the
    oracle
    user's home directory to avoid getting
    an error when running the Oracle installer. The libcwait.c file should contain the
    following text:
    /*
    gcc -O2 -shared -o $HOME/libcwait.so -fpic $HOME/libcwait.c
    */
    #include
    #include
    #include
    Deploying Oracle 9i on Red Hat Enterprise Linux AS 3
    Page 11
    #include
    pid_t
    __libc_wait (int *status)
    {
    int res;
    asm volatile ("pushl %%ebx\n\t"
    "movl %2, %%ebx\n\t"
    "movl %1, %%eax\n\t"
    "int $0x80\n\t"
    "popl %%ebx"
    : "=a" (res)
    : "i" (__NR_wait4), "0" (WAIT_ANY), "c" (status), "d" (0), "S" (0));
    return res;
    }
    Next, compile this file in the
    oracle
    user's home directory by executing the
    following command:
    gcc -02 -shared -o $HOME/libcwait.so -fpic $HOME/libwait.c
    

    gcc-shared -o libcwait.so libcwait.c -fpic -O

  • 然后将此库添加到数据库用户的环境

    exportLD_PRELOAD=/home/oracle/libcwait.so

    之前,我们在.bash_profile.


7.2. 配置显示

以 oracle 用户身份执行以下命令

oracle@9iserver ~> xhost +localhost
oracle@9iserver ~> export DISPLAY=localhost:0.0

您现在可以连接到您的桌面,或者选择远程运行安装,例如使用 VNC。例如,从您的 Windows 桌面运行安装程序


7.3. 开始安装

启动图形安装应用程序

/path/to/oracle/Disk1/runInstaller

现在继续进行图形设置(如果您不确定,请选择标准数据库)。从这里开始,其余的安装过程显而易见。


7.4. 修复 nodeinfo

现在安装应该可以顺利进行,而不会出现任何链接错误,但最后会出现一个错误

Parameter "nodeinfo" = NO_VALUE
Agent Service Failed

为了修复此错误,请运行以下命令以在设置完成后启动向导

netca &

现在更改到$ORACLE_HOME并运行 ./lsnrctl start

检查进程是否正在运行

psafx| grepLISTEN


8. 创建启动脚本

为了使 Oracle 服务器在系统启动时自动启动,请创建文件/etc/init.d/oracle像这样

#!/bin/bash
#
# Run-level Startup script for the Oracle Instance and Listener
#
# chkconfig: 345 91 19
# description: Startup/Shutdown Oracle listener and instance

ORA_HOME="/u01/app/oracle/product/9.2.0.1.0"
ORA_OWNR="oracle"

# if the executables do not exist -- display error

if [ ! -f $ORA_HOME/bin/dbstart -o ! -d $ORA_HOME ]
then
        echo "Oracle startup: cannot start"
        exit 1
fi

# depending on parameter -- startup, shutdown, restart 
# of the instance and listener or usage display 

case "$1" in
    start)
        # Oracle listener and instance startup
        echo -n "Starting Oracle: "
        su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl start"
        su - $ORA_OWNR -c $ORA_HOME/bin/dbstart
        touch /var/lock/subsys/oracle
        echo "OK"
        ;;
    stop)
 	# Oracle listener and instance shutdown
        echo -n "Shutdown Oracle: "
        su - $ORA_OWNR -c "$ORA_HOME/bin/lsnrctl stop"
        su - $ORA_OWNR -c $ORA_HOME/bin/dbshut
        rm -f /var/lock/subsys/oracle
        echo "OK"
        ;;
    reload|restart)
        $0 stop
        $0 start
        ;;
    *)
        echo "Usage: $0 start|stop|restart|reload"
        exit 1
esac
exit 0

现在运行 chkconfig oracle 以更新运行级别信息。

尝试 service oracle start|stop|restart 以检查一切是否按预期工作。

如果您没有错误地到达此步骤:恭喜您。否则,请查看 第 9 节 以获取故障排除建议。


9. 杂项错误

错误

ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux Error: 2: No such file or directory 

当您重新启动并尝试登录时,会发生此错误。当数据库实例未自动挂载/启动时,您将收到大量错误。

解决方案

  1. 检查/etc/oratab并确保*:/opt/oracle/OraHome1ordb:/opt/oracle/OraHome1设置为 "Y" (YES)。

  2. 尝试初始化数据库:$ORACLE_HOME/bin/dbstart

错误

No start entry for SID * at /opt/oracle/OraHome1 in /etc/oratab

这可能是由 dbstart 脚本中的错误引起的,该错误在错误的位置搜索 sid 文件。

解决方案

  1. cp$ORACLE_BASE/admin/$ORACLE_SID/pfile/init_*.ora \

    $ORACLE_HOME/dbs/init$ORACLE_SID.ora

  2. oracle 用户身份

    $ sqlplus
    SQL> create pfile from spfile;
    SQL> exit
    
  3. 运行dbstart脚本: $ORACLE_HOME/bin/dbstart