Oracle 11g R2 企业版在CentOS 7上安装避坑全记录(附libaio、ksh依赖处理)
2026/6/4 20:32:53 网站建设 项目流程

Oracle 11g R2企业版在CentOS 7上的深度安装指南与疑难解析

在Linux服务器上部署Oracle数据库一直是企业级应用中的关键任务。CentOS 7作为广泛使用的企业级Linux发行版,与Oracle 11g R2的搭配尤为常见。然而,这个组合在安装过程中往往会遇到各种"坑",从基础依赖缺失到编译错误,每一步都可能成为阻碍。本文将从一个有五年Oracle运维经验的DBA视角,分享在CentOS 7上安装Oracle 11g R2企业版的完整流程,特别聚焦那些官方文档未提及的实战技巧和问题解决方案。

1. 环境准备与系统配置

安装Oracle数据库前的准备工作往往决定了整个安装过程的顺利程度。CentOS 7作为Red Hat Enterprise Linux的社区版本,虽然稳定性出色,但默认安装并不完全满足Oracle 11g R2的要求。

1.1 系统硬件与软件要求

Oracle 11g R2对系统资源有明确的最低要求,但在生产环境中,我们建议的配置要远高于此:

  • 内存:至少2GB RAM(生产环境建议8GB以上)
  • 交换空间:RAM 1-2倍(当RAM为8-16GB时)
  • 磁盘空间:企业版安装需要约4.5GB空间
  • 操作系统:CentOS 7.x 64位版本

使用以下命令检查系统资源:

# 检查内存和交换空间 free -h # 检查磁盘空间 df -h

1.2 必要的系统包安装

Oracle 11g R2依赖多个系统包,其中最容易出问题的就是libaioksh。以下是完整的依赖包安装命令:

sudo yum install -y binutils \ compat-libcap1 \ compat-libstdc++-33 \ gcc \ gcc-c++ \ glibc \ glibc-devel \ ksh \ libaio \ libaio-devel \ libgcc \ libstdc++ \ libstdc++-devel \ libXi \ libXtst \ make \ sysstat \ unixODBC \ unixODBC-devel

注意:在CentOS 7中,pdksh已被ksh取代,但Oracle安装程序仍可能检查pdksh。这种情况下,安装ksh即可满足要求。

1.3 内核参数调整

Oracle数据库对Linux内核参数有特定要求。编辑/etc/sysctl.conf文件,添加或修改以下参数:

fs.aio-max-nr = 1048576 fs.file-max = 6815744 kernel.shmall = 2097152 kernel.shmmax = 536870912 kernel.shmmni = 4096 kernel.sem = 250 32000 100 128 net.ipv4.ip_local_port_range = 9000 65500 net.core.rmem_default = 262144 net.core.rmem_max = 4194304 net.core.wmem_default = 262144 net.core.wmem_max = 1048576

应用修改:

sudo sysctl -p

2. Oracle用户与目录配置

合理的用户和目录结构设置是Oracle数据库稳定运行的基础。这一步骤经常被新手忽视,导致后续权限问题。

2.1 创建Oracle用户和组

Oracle推荐使用专门的用户和组来运行数据库软件:

sudo groupadd oinstall sudo groupadd dba sudo useradd -g oinstall -G dba oracle sudo passwd oracle

2.2 创建Oracle安装目录

选择合适的目录结构对后期维护至关重要。以下是推荐的目录布局:

sudo mkdir -p /u01/app/oracle sudo mkdir -p /u01/app/oraInventory sudo chown -R oracle:oinstall /u01/app sudo chmod -R 775 /u01/app

2.3 环境变量配置

为oracle用户设置环境变量,编辑~oracle/.bash_profile文件:

export ORACLE_BASE=/u01/app/oracle export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1 export ORACLE_SID=orcl export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib export NLS_LANG=AMERICAN_AMERICA.AL32UTF8

使配置生效:

source ~oracle/.bash_profile

3. Oracle软件安装过程详解

有了充分的准备后,我们可以开始Oracle软件的安装。这一部分将详细讲解安装过程中的关键选择和技术细节。

3.1 启动安装程序

解压Oracle安装包后,以oracle用户身份运行安装程序:

cd /path/to/database ./runInstaller

安装程序启动后,会遇到几个关键选择界面:

  1. 配置安全更新:建议取消选中"I wish to receive security updates via My Oracle Support"
  2. 安装选项:选择"Install database software only"以获得更大灵活性
  3. 系统类:选择"Single instance database installation"
  4. 语言:保持默认英文或添加所需语言
  5. 数据库版本:选择"Enterprise Edition"

3.2 安装位置设置

在"Specify Installation Location"界面,设置以下路径:

参数
Oracle Base/u01/app/oracle
Software Location/u01/app/oracle/product/11.2.0/dbhome_1

3.3 解决预检查问题

安装程序会进行系统检查,通常会报告以下问题:

  • 缺少的包:虽然我们已经安装了所有必要包,但Oracle检查脚本可能仍会报错,这是因为:
    • 某些包的版本高于检查脚本预期的版本
    • 检查脚本仍寻找已被替代的包(如pdksh)

解决方案:

  1. 确保所有必要包已安装
  2. 勾选右上角的"Ignore All"选项
  3. 点击"Next"继续

4. 常见安装错误与解决方案

即使做了充分准备,安装过程中仍可能遇到各种错误。以下是几个最常见的问题及其解决方案。

4.1 ins_emagent.mk编译错误

这是Oracle 11g R2在较新Linux系统上安装时的典型问题。错误信息通常为:

Error in invoking target 'agent nmhs' of makefile '/opt/oracle/product/11.2.0/dbhome_1/sysman/lib/ins_emagent.mk'

解决方案

  1. 使用文本编辑器打开问题文件:
vim $ORACLE_HOME/sysman/lib/ins_emagent.mk
  1. 找到约176行,修改为:
$(MK_EMAGENT_NMECTL) -lnnz11
  1. 保存文件后,在安装界面点击"Retry"

4.2 缺少libaio的问题

虽然我们已经安装了libaio,但有时安装程序仍会报错。这是因为:

  • 32位和64位库都需要安装
  • 开发包(devel包)也必须安装

验证libaio是否安装正确:

# 检查64位版本 ls -l /usr/lib64/libaio.so.1 # 检查32位版本(即使系统是64位也可能需要) ls -l /usr/lib/libaio.so.1

如果缺少32位版本,安装:

sudo yum install -y libaio.i686

4.3 执行root脚本

安装接近完成时,会提示需要以root身份执行两个脚本:

  1. orainstRoot.sh- 设置清单目录权限
  2. root.sh- 执行Oracle产品的root操作

执行顺序:

sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/11.2.0/dbhome_1/root.sh

在执行root.sh时,会提示输入本地bin目录路径,通常保持默认/usr/local/bin即可。

5. 安装后配置与验证

成功安装Oracle软件后,还需要进行一些必要的配置和验证,确保数据库可以正常创建和运行。

5.1 创建数据库

使用Database Configuration Assistant(DBCA)创建数据库:

dbca

在DBCA中,建议选择"Custom Database"以获得最大灵活性。关键参数包括:

  • 数据库名称:如orcl
  • 字符集:推荐AL32UTF8以支持多语言
  • 内存分配:根据系统资源合理分配SGA和PGA
  • 管理选项:选择"Configure Enterprise Manager"

5.2 验证数据库状态

数据库创建完成后,验证其状态:

sqlplus / as sysdba SQL> SELECT status FROM v$instance; SQL> SELECT * FROM v$version;

5.3 配置自动启动

配置Oracle数据库随系统自动启动:

  1. 编辑/etc/oratab文件,将最后的N改为Y
orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y
  1. 创建启动脚本:
sudo cp $ORACLE_HOME/bin/dbstart /etc/init.d/oracle sudo chmod +x /etc/init.d/oracle
  1. 配置systemd服务(CentOS 7使用systemd):
sudo systemctl enable oracle

6. 性能优化与日常维护

成功安装并运行Oracle数据库后,还需要进行一些优化配置,确保数据库性能最佳。

6.1 内存配置调整

Oracle 11g R2的自动内存管理(AMM)在Linux上可能不如自动共享内存管理(ASMM)稳定。建议修改:

ALTER SYSTEM SET memory_target=0 SCOPE=SPFILE; ALTER SYSTEM SET sga_target=2G SCOPE=SPFILE; ALTER SYSTEM SET pga_aggregate_target=1G SCOPE=SPFILE;

6.2 表空间配置

合理的表空间布局对性能至关重要。建议至少创建以下表空间:

表空间用途初始大小
USERS用户数据500M
TEMP临时表空间1G
UNDOTBS1撤销表空间1G
INDEXES索引500M

创建命令示例:

CREATE TABLESPACE users DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf' SIZE 500M AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;

6.3 监控与维护脚本

设置定期维护任务,如统计信息收集:

BEGIN DBMS_AUTO_TASK_ADMIN.ENABLE( client_name => 'auto optimizer stats collection', operation => NULL, window_name => NULL); END; /

对于需要更精细控制的环境,可以创建自定义脚本:

#!/bin/bash # 每日维护脚本 export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export PATH=$PATH:$ORACLE_HOME/bin sqlplus / as sysdba <<EOF EXEC DBMS_STATS.GATHER_SCHEMA_STATS('SCOTT'); EXEC DBMS_STATS.GATHER_DATABASE_STATS; EOF

7. 安全加固与备份策略

生产环境中的Oracle数据库必须进行适当的安全加固和备份配置。

7.1 基本安全措施

  1. 修改默认密码:
ALTER USER sys IDENTIFIED BY 新密码; ALTER USER system IDENTIFIED BY 新密码;
  1. 启用密码策略:
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LIFE_TIME 90 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 10;

7.2 备份配置

配置RMAN自动备份:

CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; CONFIGURE CONTROLFILE AUTOBACKUP ON; CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/oracle/%F';

创建备份脚本:

#!/bin/bash export ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1 export PATH=$PATH:$ORACLE_HOME/bin rman target / <<EOF RUN { BACKUP DATABASE PLUS ARCHIVELOG; DELETE NOPROMPT OBSOLETE; } EOF

7.3 网络安全配置

编辑$ORACLE_HOME/network/admin/sqlnet.ora,添加:

SQLNET.AUTHENTICATION_SERVICES=(NONE) TCP.VALIDNODE_CHECKING=YES TCP.INVITED_NODES=(localhost, 192.168.1.100) TCP.EXCLUDED_NODES=(192.168.1.200)

这些配置将限制只有特定IP可以访问数据库,并禁用操作系统认证。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询