Red Hat安装Oracle封面

引言:那些年我们一起踩过的安装坑

2013 年的企业级开发环境中,Oracle 数据库几乎是”标配”。而 Red Hat Enterprise Linux 则是 Oracle 官方推荐和支持的最佳平台。然而,在 Linux 上手动安装 Oracle 绝不是一件轻松的事情 —— 从系统环境配置到依赖包安装,从内核参数调整到环境变量设置,每一个环节都可能成为绊脚石。

我至今还记得第一次独立在 Red Hat 上安装 Oracle 10g 的场景。整整花了一天的时间,期间遇到了包依赖冲突、内核参数不匹配、监听器启动失败等各种问题。每次以为快要成功的时候,总有一个新的错误跳出来。但也正是这些踩坑的经历,让我对 Linux 系统管理和 Oracle 数据库有了更深的理解。

这篇笔记记录了我在 Red Hat 上安装 Oracle 10g 的完整过程和所有注意事项。如果你也面临着同样的任务,希望这份指南能帮你少走弯路。


第一部分:安装前的环境检查

在正式开始安装之前,全面的环境检查是成功的关键。很多安装失败的原因,其实都可以在这个阶段被发现和解决。

1. 硬件要求

安装 Oracle 10g 对硬件有明确的要求,不满足这些条件可能会导致安装过程出错或数据库运行不稳定:

检查项 最低要求 说明
Swap 分区 不低于 2G 内存不足时系统使用的交换空间
SELinux 状态 disabled 安全增强型 Linux,安装 Oracle 时必须关闭
物理内存 不低于 512M Oracle 数据库运行的基础内存需求

检查命令:

1
2
3
4
5
6
7
8
# 检查 swap 分区
free -m

# 检查 SELinux 状态
getenforce

# 检查物理内存
cat /proc/meminfo | grep MemTotal

2. 系统要求

推荐使用 Red Hat Enterprise Linux 5 默认安装。虽然本文标题写的是 Red Hat 4,但实际验证过程中 RHEL 5 的兼容性更好。


第二部分:数据库软件准备

3.1 软件下载

根据实际环境从 Oracle 官方网站下载相应的数据库安装包:

http://www.oracle.com/technology/software/products/database/index.html

注意:下载时需要选择与操作系统架构(32位/64位)对应的版本。

3.2 解包

1
unzip 10201_database_linux32.zip

解包完成后,将 database 目录拷贝到 /opt 目录下,以便 oracle 用户安装使用:

1
cp -r database /opt/

Oracle安装包准备


第三部分:Red Hat 系统配置(核心环节)

这一部分是整个安装过程中最关键、最容易出错的环节。请严格按照顺序执行每一步。

4.1 安装缺失的依赖包

Oracle 安装需要大量的系统依赖包。首先检查已安装的包:

1
rpm -q gcc make binutils openmotif setarch compat-db compat-gcc compat-gcc-c++ compat-libstdc++ compat-libstdc++-devel

如果采用默认安装方式,通常会提示以下包缺失:

  • openmotif
  • compat-db
  • compat-gcc
  • compat-gcc-c++
  • compat-libstdc++
  • compat-libstdc++-devel

4.1.1 挂载安装光盘

1
2
3
4
5
6
7
8
# 在 /mnt 下创建 cdrom 目录
mkdir -p /mnt/cdrom

# 将光盘放入光驱后执行挂载
mount -t iso9660 /dev/cdrom /mnt/cdrom

# 进入光盘 Server 目录
cd /mnt/cdrom/Server

4.1.2 按顺序安装缺失的包

重要:由于缺失的包之间有严格的依赖关系,必须按照以下顺序安装:

1
2
3
4
5
6
7
8
9
10
11
12
13
rpm -Uvh compat-db-4*
rpm -Uvh libaio-0*
rpm -Uvh compat-libstdc++-33-3*
rpm -Uvh glibc-headers-2.5-12.i386.rpm
rpm -Uvh glibc-devel-2.5-12.i386.rpm
rpm -Uvh compat-gcc-34-3*
rpm -Uvh compat-gcc-34-c++-3*
rpm -Uvh libXp-1*
rpm -Uvh openmotif-2*
rpm -Uvh gcc-4*
rpm -Uvh glibc-2.5-12.i686.rpm
rpm -Uvh libgomp-4.1.1-52.el5.i386.rpm
rpm -Uvh gcc-4.1.1-52.el5.i386.rpm

安装完成后,可能仍然提示以下包没有安装,但这不影响后续使用:

1
2
3
4
package compat-gcc is not installed
package compat-gcc-c++ is not installed
package compat-libstdc++ is not installed
package compat-libstdc++-devel is not installed

4.2 配置内核参数

编辑 /etc/sysctl.conf 文件:

1
vi /etc/sysctl.conf

添加或修改以下内容:

1
2
3
4
5
6
7
8
9
10
11
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
# semaphores: semmsl, semmns, semopm, semmni
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_default = 262144
net.core.wmem_max = 262144

使设置立即生效:

1
/sbin/sysctl -p

解读:这些内核参数主要控制共享内存、信号量和网络缓冲区的大小。Oracle 在运行时需要大量的共享内存资源,如果这些参数设置过小,数据库可能无法正常启动。


4.3 配置系统资源限制

编辑 /etc/security/limits.conf 文件:

1
vi /etc/security/limits.conf

添加以下内容:

1
2
3
4
* soft nproc 2047
* hard nproc 16384
* soft nofile 1024
* hard nofile 65536

解读

  • nproc 限制最大进程数
  • nofile 限制最大打开文件数
  • Oracle 在运行时会创建大量进程和打开大量文件,这些限制必须适当放宽

4.4 配置 PAM 限制

编辑 /etc/pam.d/login 文件:

1
vi /etc/pam.d/login

添加以下内容:

1
session required /lib/security/pam_limits.so

这确保上面 limits.conf 中的设置能够生效。


4.5 禁用 SELinux

编辑 /etc/selinux/config 文件:

1
vi /etc/selinux/config

修改为:

1
2
3
4
5
6
7
8
9
10
11
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
#SELINUXTYPE=targeted
SELINUXTYPE=disabled

SELinux配置禁用

为什么必须禁用 SELinux? SELinux 的安全策略会阻止 Oracle 进程访问某些系统资源,导致安装或运行异常。虽然从安全角度来看这不是最佳实践,但在 Oracle 10g 的安装场景中,关闭 SELinux 是官方推荐的做法。


4.6 添加 Oracle 用户和组

1
2
3
4
5
groupadd oinstall
groupadd dba
groupadd oper
useradd -m -g oinstall -G dba oracle
passwd oracle

说明

  • oinstall 组:用于 Oracle 软件的安装
  • dba 组:拥有数据库管理权限
  • oper 组:用于数据库操作权限

4.7 创建安装目录并设置权限

1
2
3
mkdir -p /u01/app/oracle/product/10.2.0/db_1
chown -R oracle:oinstall /u01
chmod -R 775 /u01

4.8 添加 X Window 访问控制

1
xhost + machine-name

Oracle 安装程序基于图形界面,需要通过 X Window 系统显示安装向导。


4.9 设置主机名和 IP 映射(极其重要)

编辑 /etc/hosts 文件:

1
vi /etc/hosts

删除原有内容,添加以下两行:

1
2
127.0.0.1       localhost
<IP地址> <主机名称>

踩坑警告:这是整个安装过程中最容易忽略但也最致命的一步!

如果不添加 127.0.0.1 localhost 这一行,安装后会出现以下严重问题:

  1. 数据库可以打开,但通过 http://ip:1158/em 访问控制台时,发现数据库和监听器均无法启动
  2. 以管理员帐号进入 EM,页面提示 Network Adapter error
  3. 通过命令 lsnrctl start 启动监听器时,会报以下错误:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 17-OCT-2007 15:35:07
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Starting .......
................
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=olivenan)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=olivenan)(PORT=1521)))
TNS-12547: TNS:lost contact
TNS-12560: TNS:protocol adapter error
TNS-00517: Lost contact
Linux Error: 104: Connection reset by peer
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC0)))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
Linux Error: 111: Connection refused

我第一次安装时就因为没有正确配置 hosts 文件,导致监听器无法启动,排查了很久才找到原因。这个教训让我深刻认识到:在 Linux 环境中,网络配置和主机名映射是基础设施中的基础设施。


4.10 修改 Red Hat 版本标识

Oracle 10g 安装程序会检查操作系统版本。如果版本不匹配,安装程序会拒绝继续。因此需要”伪装”系统版本:

1
vi /etc/redhat-release

将:

1
Red Hat Enterprise Linux Server release 5 (Tikanga)

替换为:

1
redhat-4

安装完成后再改回来。


4.11 配置 Oracle 环境变量

切换到 oracle 用户:

1
2
su - oracle
vi ~/.bash_profile

添加以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR
ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=orcl
export ORACLE_SID
ORACLE_TERM=xterm
export ORACLE_TERM
PATH=/usr/sbin:$PATH
PATH=$ORACLE_HOME/bin:$PATH
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
export LD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export CLASSPATH
#LD_ASSUME_KERNEL=2.4.1; export LD_ASSUME_KERNEL

if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi

export LANG=en_US.utf8
export LANGUAGE=en_US.utf8
export NLS_LANG="Simplified Chinese_China.UTF8"
export LC_ALL=en_US.utf8

使环境变量生效:

1
source ~/.bash_profile

Oracle环境变量配置


第四部分:执行安装

4.13 启动安装程序

以 oracle 用户登录系统,打开终端,将当前位置定位到 database 目录中:

1
2
unset LANG
./runInstaller.sh

注意:使用 unset LANG 是为了避免中文乱码导致安装界面显示异常。

如果之前的依赖包都按要求安装完成,安装过程应该会很顺利。如果安装进度在 63% 左右出现错误(如提示遇到问题需要重试、忽略等),一般就是系统要求的包没有安装完全。此时需要仔细检查第 4.1 步中的所有包是否都已正确安装。


第五部分:安装后的启动与维护

启动数据库

安装完成后重启机器,登录 oracle 用户,打开终端:

1
2
3
4
5
6
7
8
9
10
11
# 登录数据库
sqlplus '/as sysdba'

# 启动数据库实例
startup

# 启动控制台
emctl start dbconsole

# 启动监听器
lsnrctl start

访问控制台:http://ip:1158/em

4.14 恢复 Red Hat 版本标识

1
vi /etc/redhat-release

将内容改回原来的:

1
Red Hat Enterprise Linux Server release 5 (Tikanga)

4.15 设置开机自动启动

编辑 /etc/oratab 文件:

1
vi /etc/oratab

将最后一行的 N 改为 Y

1
orcl:/u01/app/oracle/product/10.2.0/db_1:Y

常见问题排查手册

问题 1:网络检查不通过

解决方案:修改 /etc/hosts 文件,确保第一行是 127.0.0.1 localhost

问题 2:依赖包缺失

按顺序安装以下包:

1
2
3
4
5
6
7
libXp-1.0.0-8.i386.rpm
openmotif22-2.2.3-18.i386.rpm
compat-db-4.2.52-5.1.i386.rpm
compat-gcc-34-3.4.6-4.i386.rpm
compat-gcc-34-c++-3.4.6-4.i386.rpm
compat-libstdc++-33-3.2.3-61.i386.rpm
libaio-0.3.106-3.2.i386.rpm

问题 3:中文乱码

解决方案:设置英文环境进行安装:

1
export LC_ALL=en_US

在安装过程中选择高级安装,并将数据库语言选为中文,字符集选择 GBK。

问题 4:数据库关闭后无法重新启动

原因:安装之后启动方式使用的是 spfile,关闭后启动时利用的是 init<SID>.ora 参数文件。

解决方案

ORACLE_HOME/admin/数据库实例名/ 目录下找到类似 init.ora2009xxxx 的文件,重命名后放到 ORACLE_HOME/dbs/ 目录下。

可以不安装的包

1
2
3
4
package compat-gcc is not installed
package compat-gcc-c++ is not installed
package compat-libstdc++ is not installed
package compat-libstdc++-devel is not installed

必须安装的包

1
2
3
4
5
6
gcc-3.4.6-9
make-3.80-6.EL4
binutils-2.15.92.0.2-24
openmotif-2.2.3-10.1.el4
setarch-1.6-1
compat-db-4.1.25-9

写在最后:从安装过程中学到的

回顾整个 Oracle 安装过程,我最大的感受是:企业级软件的安装不仅仅是”下一步、下一步、完成”那么简单。每一个参数、每一个配置项的背后,都有其存在的原因和意义。

  • 内核参数控制着系统资源的分配上限
  • 依赖包提供了 Oracle 运行所需的底层库函数
  • hosts 配置影响着网络通信的正常与否
  • 环境变量决定了 Oracle 进程的运行路径和行为方式

理解了这些”为什么”,以后再遇到安装问题时,就不再是盲目地搜索和试错,而是能够有针对性地分析和解决。

这篇笔记记录于 2013 年 11 月,是我在 Red Hat 上安装 Oracle 10g 的完整总结。虽然这些技术在今天看来已经有些”古老”,但其中体现的系统管理思想和排错方法论,至今仍然适用。技术在变,但解决问题的思维方式是永恒的。