简介本资源是一份面向Linux系统管理员与Oracle数据库初学者的实战安装指南聚焦在CentOS/Red Hat等主流Linux发行版上部署Oracle 11g Release 2单机环境的全流程图解。内容覆盖从系统环境准备如gcc、glibc-devel等依赖包安装、Oracle用户与组创建、环境变量配置到runInstaller启动、Inventory目录设置、监听器netca配置及DBCA建库等关键环节并特别说明虚拟机分辨率调整、错误忽略策略、字符集UTF-8选择等易错点。资源为1个1.73MB的Word文档.doc图文结合、步骤编号清晰含20个实操截图与对应操作注释便于边看边练。目前已有132人学习下载适合需快速落地Oracle数据库、掌握Linux下企业级数据库部署逻辑的中级运维与DBA入门者。1. 为什么在 CentOS 6.5 上装 Oracle 11g R2 是个“玄学现场”不是配环境是在和内核、库版本、权限链打持久战你不是在安装一个数据库而是在复现一段被时间封印的兼容性契约——Oracle 11g R211.2.0.4官方支持的最后一代 Linux 发行版是RHEL 6 / CentOS 6且明确要求内核 ≥ 2.6.32-71.el6.x86_64glibc ≥ 2.12libaio ≥ 0.3.107。但现实是你拿到一台刚装好的 CentOS 6.5 最小化镜像uname -r显示2.6.32-431.el6.x86_64glibc --version是2.12看起来全达标别急rpm -q libaio返回package libaio is not installedulimit -n默认 1024而 Oracle 要求至少 65536/etc/security/limits.conf里没配oracle soft nofile 65536更致命的是/tmp分区只有 1GB而解压linux.x64_11gR2_database_1of2.zip就要占 1.8GB 临时空间……这不是安装失败是系统在用沉默告诉你“你漏掉了 7 个必须手动补全的契约条款”。本文不讲“点下一步”只拆解CentOS 6.5 环境下 Oracle 11g R2 安装的完整契约清单从内核参数硬编码到用户组嵌套权限从静默安装响应文件到监听器启动黑匣子排查。适合正在运维老系统、接手遗留 ERP 或做等保三级测评的工程师——你不需要最新版你需要100% 可复现、可审计、可写进运维手册的最小可行安装路径。2. 准备阶段不是装包是重建 Oracle 认证的 Linux 运行时契约Oracle 11g R2 对 Linux 环境的要求不是“建议”而是安装程序启动前就硬校验的准入门槛。跳过这步直接解压99% 会在runInstaller启动瞬间报Error in invoking target install of makefile /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/lib/ins_rdbms.mk并退出。下面每一步都对应一个runInstaller的校验点缺一不可。2.1 创建专用用户与组绕过 root 权限陷阱的唯一正解Oracle 强制要求非 root 用户安装root用户运行runInstaller会直接拒绝。但该用户必须属于特定组且组间关系有严格嵌套# 创建组顺序不能错 groupadd oinstall groupadd dba groupadd oper # 创建 oracle 用户主组为 oinstall附加组为 dba 和 oper useradd -g oinstall -G dba,oper -d /home/oracle oracle # 设置密码生产环境请用强密码策略 echo oracle:Orac1e2024 | chpasswd # 创建 Oracle 安装目录并赋权 mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 chown -R oracle:oinstall /u01 chmod -R 775 /u01逻辑说明oinstall是 Oracle Inventory 组所有 Oracle 产品共享dba是数据库管理员组拥有 SYSDBA 权限oper是操作员组用于启动/关闭实例。useradd -g指定主组-G指定附加组顺序无关但成员必须全在。若漏掉oper后续sqlplus / as sysoper会报ORA-01031: insufficient privileges。2.2 内核参数与资源限制让系统“同意” Oracle 占用内存和句柄Oracle 安装脚本会读取/proc/sys/下的内核参数并检查/etc/security/limits.conf。以下参数必须写入/etc/sysctl.conf并生效# 编辑 /etc/sysctl.conf追加以下内容注意不要覆盖原有内容 echo # Oracle 11g R2 required kernel parameters 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 4194304 /etc/sysctl.conf # 立即加载不重启生效 sysctl -p # 验证是否生效应返回具体数值非报错 sysctl fs.aio-max-nr sysctl kernel.shmmax参数说明fs.aio-max-nr异步 I/O 请求最大数影响 LGWR 写日志性能kernel.shmmax单个共享内存段最大字节数必须 ≥SGA_MAX_SIZE默认 4GB此处设 512MB 是保守值实际按物理内存 40% 设net.ipv4.ip_local_port_rangeOracle 监听器绑定端口范围避免与应用端口冲突net.core.*TCP 缓冲区大小防止高并发连接时丢包。2.3 用户资源限制ulimit 不是命令是 Oracle 的“呼吸许可”/etc/security/limits.conf必须为oracle用户显式声明软硬限制否则runInstaller会因open files不足直接终止# 追加到 /etc/security/limits.conf echo oracle soft nofile 65536 oracle hard nofile 65536 oracle soft nproc 16384 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 32768 oracle soft memlock 32768 oracle hard memlock 32768 /etc/security/limits.conf # 同时确保 /etc/pam.d/login 包含这一行CentOS 6 默认已存在但需确认 echo session required pam_limits.so /etc/pam.d/login # 使 limits 生效必须重新登录 oracle 用户或执行 su - oracle -c ulimit -a关键验证su - oracle -c ulimit -n必须输出65536ulimit -u输出16384。若仍为1024说明 PAM 未生效或用户未重新登录——这是最常翻车的环节。3. 依赖库安装不是 yum install是精准匹配 Oracle 的 ABI 版本Oracle 11g R2 的二进制文件是用gcc 4.3 glibc 2.12编译的CentOS 6.5 自带glibc-2.12-1.149.el6_6.9.x86_64看似兼容但libaio、libXtst等包若版本不对runInstaller会静默失败。必须用rpm -ivh强制安装指定版本。3.1 基础依赖包清单一个都不能少# 安装 Oracle 官方文档明确要求的 RPM 包CentOS 6.5 x86_64 yum install -y binutils \ compat-libcap1 \ compat-libstdc-33 \ gcc \ gcc-c \ glibc \ glibc-devel \ ksh \ libgcc \ libstdc \ libstdc-devel \ libaio \ libaio-devel \ libXext \ libXtst \ make \ sysstat \ unixODBC \ unixODBC-devel \ pdksh # 验证关键库是否存在且版本正确 rpm -q libaio libaio-devel libXtst # 正确输出示例 # libaio-0.3.107-10.el6.x86_64 # libaio-devel-0.3.107-10.el6.x86_64 # libXtst-1.2.2-2.1.el6.x86_64为什么不用 yum groupinstall Development Tools因为pdkshPublic Domain Korn Shell在 CentOS 6 的默认源中已被移除必须手动下载安装。compat-libstdc-33是 Oracle 二进制依赖的旧版 C 库新版libstdc不向下兼容。漏装libXtst会导致图形界面安装时DISPLAY错误即使静默安装也会在链接阶段失败。3.2 手动安装 pdkshOracle Installer 的隐藏依赖# CentOS 6 默认无 pdksh需从 EPEL 或手动安装 wget http://vault.centos.org/6.10/os/x86_64/Packages/pdksh-5.2.14-37.el6.x86_64.rpm rpm -ivh pdksh-5.2.14-37.el6.x86_64.rpm # 验证 rpm -q pdksh # 输出pdksh-5.2.14-37.el6.x86_64血泪经验pdksh缺失时runInstaller会卡在 “Checking monitor” 步骤日志/tmp/OraInstalltimestamp/installActionstimestamp.log中出现Exception in thread main java.lang.UnsatisfiedLinkError: /tmp/OraInstall.../jre/1.4.2/lib/i386/libawt.so: libXtst.so.6: cannot open shared object file: No such file or directory—— 实际是pdksh未提供ksh符号链接导致 Java AWT 初始化失败。3.3 创建符号链接修复 libXtst.so.6 的 ABI 断层Oracle 11g R2 安装程序查找libXtst.so.6但 CentOS 6.5 提供的是libXtst.so.6.1# 查找实际文件位置 find /usr -name libXtst.so* 2/dev/null # 典型输出/usr/lib64/libXtst.so.6.1 # 创建指向 .so.6 的符号链接必须是绝对路径 ln -sf /usr/lib64/libXtst.so.6.1 /usr/lib64/libXtst.so.6 # 验证 ls -l /usr/lib64/libXtst.so.6 # 输出lrwxrwxrwx. 1 root root 21 ... /usr/lib64/libXtst.so.6 - libXtst.so.6.1为什么必须做runInstaller的 Java 进程通过dlopen(libXtst.so.6)加载库找不到则抛出UnsatisfiedLinkError并退出。yum install libXtst已安装但版本号后缀不匹配——这是典型的 ABI 兼容性断层必须手动桥接。4. 静默安装甩开图形界面用响应文件把安装变成可审计的流水线图形界面安装./runInstaller在服务器环境不可靠DISPLAY配置复杂、X11 转发易超时且无法复现。Oracle 提供静默模式-silent-responseFile这才是生产环境唯一合规路径。4.1 准备响应文件不是模板是必须填满的契约条款Oracle 安装包自带db_install.rsp模板但默认值几乎全部无效。必须修改以下 12 项其他保持默认# 复制模板并编辑路径database/response/db_install.rsp cp database/response/db_install.rsp /tmp/oracle_install.rsp vim /tmp/oracle_install.rsp必须修改的关键字段逐行对照参数名必填值说明oracle.install.optionINSTALL_DB_AND_CONFIG安装数据库软件并建库ORACLE_HOSTNAMElocalhost.localdomain主机名必须与hostname命令输出一致UNIX_GROUP_NAMEoinstallOracle Inventory 组名INVENTORY_LOCATION/u01/app/oraInventoryInventory 目录必须存在且 oracle 可写SELECTED_LANGUAGESen,zh_CN支持中文避免乱码ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1与创建目录一致ORACLE_BASE/u01/app/oracleBase 目录必须存在oracle.install.db.InstallEditionEE企业版SE 需 License Keyoracle.install.db.isCustomInstallfalse使用默认组件避免自定义失败oracle.install.db.DBA_GROUPdbaDBA 组名oracle.install.db.OPER_GROUPoperOper 组名oracle.install.db.config.starterdb.typeGENERAL_PURPOSE通用用途数据库注意INVENTORY_LOCATION必须是全新路径不能复用旧 InventoryORACLE_HOME和ORACLE_BASE必须提前chown oracle:oinstallSELECTED_LANGUAGES若不加zh_CN建库后sqlplus中文提示为?。4.2 执行静默安装三步命令链失败立即停# 切换到 oracle 用户重要root 运行会失败 su - oracle # 进入解压后的 database 目录假设在 /home/oracle/database cd /home/oracle/database # 执行静默安装输出日志到 /tmp/install.log ./runInstaller -silent -force -responseFile /tmp/oracle_install.rsp /tmp/install.log 21 # 检查是否成功grep Successfully Setup Software. grep Successfully Setup Software. /tmp/install.log # 若输出该行则软件安装成功否则查看 /tmp/install.log 定位错误失败排查重点ERROR: [FATAL] [INS-32012]Inventory 目录权限不对检查chown oracle:oinstall /u01/app/oraInventoryERROR: [FATAL] [INS-32055]ORACLE_HOME已存在文件必须清空或换路径日志末尾出现The installation of Oracle Database 11g was successful.即成功。4.3 运行 root.sh不是脚本是 Oracle 与内核的握手仪式安装完成后runInstaller会提示你以 root 身份运行/u01/app/oraInventory/orainstRoot.sh和/u01/app/oracle/product/11.2.0/dbhome_1/root.sh。这两步必须执行否则监听器无法启动# 以 root 执行注意必须先运行 orainstRoot.sh再运行 root.sh sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/11.2.0/dbhome_1/root.sh # 验证 root.sh 输出包含 # Creating /etc/oratab file... # Entries will be added to the /etc/oratab file as needed by Database Configuration Assistant when a database is created为什么必须 root 执行orainstRoot.sh创建/etc/oraInst.loc记录 Inventory 位置root.sh创建/etc/oratab注册 Oracle 实例并设置oradim服务Windows 类似服务管理器。漏掉root.shlsnrctl start会报TNS-12537: TNS:connection closed。5. 避坑安装失败的 5 个高频黑匣子现象→原因→解决5.1 现象runInstaller启动后立即退出日志无有效错误原因/tmp空间不足Oracle 解压需要 ≥2GB 临时空间或oracle用户ulimit -v虚拟内存限制过低默认 1024KB。解决# 清理 /tmp 或挂载大容量 tmpfs mount -t tmpfs -o size4G tmpfs /tmp # 或临时扩 /tmp需 root dd if/dev/zero of/tmp/swap bs1M count2048 mkswap /tmp/swap swapon /tmp/swap # 设置 ulimit -v 无限制在 /etc/security/limits.conf 中加oracle hard as unlimited5.2 现象静默安装卡在[WARNING] [INS-32055]提示The home location already exists原因ORACLE_HOME目录非空且包含隐藏文件如.oraclesocket 文件残留。解决# 彻底清空 ORACLE_HOME保留父目录权限 rm -rf /u01/app/oracle/product/11.2.0/dbhome_1/* # 删除隐藏文件尤其 .oracle find /u01/app/oracle/product/11.2.0/dbhome_1 -name .* -delete 2/dev/null # 重新 chown chown -R oracle:oinstall /u01/app/oracle/product/11.2.0/dbhome_15.3 现象lsnrctl start报TNS-12547: TNS:lost contactnetstat -tlnp | grep 1521无监听原因/etc/hosts中127.0.0.1解析的 hostname 与ORACLE_HOSTNAME不一致。解决# 查看当前 hostname hostname # 输出myserver.localdomain # 编辑 /etc/hosts确保第一行是 # 127.0.0.1 myserver.localdomain localhost localhost.localdomain # 重启网络服务或 reboot service network restart5.4 现象sqlplus / as sysdba报ORA-01034: ORACLE not availableps -ef | grep pmon无进程原因监听器未启动或ORACLE_SID环境变量未设置。解决# 切换到 oracle 用户设置环境变量写入 ~/.bash_profile echo export ORACLE_BASE/u01/app/oracle export ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 export ORACLE_SIDorcl export PATH\$ORACLE_HOME/bin:\$PATH export LD_LIBRARY_PATH\$ORACLE_HOME/lib:\$LD_LIBRARY_PATH /home/oracle/.bash_profile source /home/oracle/.bash_profile # 启动监听器 lsnrctl start # 启动数据库实例 sqlplus / as sysdba EOF startup exit EOF5.5 现象emctl start dbconsole报EM Configuration failedhttps://localhost:1158/em打不开原因Oracle Enterprise Manager 11g 在 CentOS 6.5 上默认使用 JDK 1.5但系统自带 OpenJDK 1.7 不兼容。解决# 下载并安装 Oracle JDK 1.5jdk-1_5_0_22-linux-amd64.bin chmod x jdk-1_5_0_22-linux-amd64.bin ./jdk-1_5_0_22-linux-amd64.bin -noregister mv jdk1.5.0_22 /u01/app/oracle/product/11.2.0/dbhome_1/jdk # 修改 emctl 使用的 JDK 路径 sed -i s#\$ORACLE_HOME/jdk#\$ORACLE_HOME/jdk1.5.0_22#g $ORACLE_HOME/bin/emctl # 重启 EM emctl stop dbconsole emctl start dbconsole6. 验证与收尾用三个命令确认这不是“假安装”而是可交付的生产基线安装完成不等于可用。必须通过连通性、功能性、可观测性三层验证才能写进运维手册。以下命令全部在oracle用户下执行结果必须 100% 符合预期。6.1 连通性验证从监听器到实例的端到端链路# 1. 检查监听器状态必须显示 STATUS READY lsnrctl status # 2. 检查数据库实例进程必须有 pmon, smon, dbw0 等核心进程 ps -ef | grep ora_ | grep -v grep | wc -l # 正常输出≥ 15 个进程 # 3. 测试本地 SQL*Plus 连通必须能登录并查出实例名 sqlplus / as sysdba EOF set pagesize 0 select instance_name from v\$instance; exit EOF # 输出orcl或你设置的 ORACLE_SID # 4. 测试远程 TNS 连通需配置 tnsnames.ora此处用 EZCONNECT sqlplus system/Orac1e//localhost:1521/orcl EOF select name from v\$database; exit EOF # 输出ORCL数据库名为什么用v\$instance而不是v\$databasev\$instance检查实例是否启动SGA/PGA 分配成功v\$database检查数据库是否 MOUNTED。前者失败说明实例未启动后者失败说明控制文件损坏——这是分层诊断的起点。6.2 功能性验证跑通一个真实业务场景的最小闭环ERP 系统最常调用DBMS_OUTPUT.PUT_LINE和序列用以下脚本验证 PL/SQL 执行能力# 创建测试用户并授权 sqlplus / as sysdba EOF create user testuser identified by Test123; grant connect, resource to testuser; grant unlimited tablespace to testuser; exit EOF # 执行 PL/SQL 块启用 DBMS_OUTPUT sqlplus testuser/Test123 EOF set serveroutput on declare v_seq number; begin select test_seq.nextval into v_seq from dual; dbms_output.put_line(Sequence value: || v_seq); end; / exit EOF # 输出Sequence value: 1说明序列、PL/SQL、输出缓冲区全正常关键点set serveroutput on是必须的否则dbms_output不显示test_seq需提前创建create sequence test_seq;此处省略但验证时必须存在。6.3 可观测性验证把 Oracle 变成 Linux 可管理的“公民”Oracle 不能游离于系统监控之外。必须将其进程纳入systemdCentOS 6 用chkconfig并暴露关键指标# 1. 创建 Oracle 启动脚本/etc/init.d/oracle cat /etc/init.d/oracle EOF #!/bin/bash # chkconfig: 35 99 10 # description: Oracle auto start-stop script. # processname: oracle ORACLE_OWNERoracle ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_SIDorcl case $1 in start) echo -n Starting Oracle: su - $ORACLE_OWNER -c $ORACLE_HOME/bin/lsnrctl start su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbstart $ORACLE_HOME echo OK ;; stop) echo -n Shutting down Oracle: su - $ORACLE_OWNER -c $ORACLE_HOME/bin/dbshut $ORACLE_HOME su - $ORACLE_OWNER -c $ORACLE_HOME/bin/lsnrctl stop echo OK ;; *) echo Usage: $0 {start|stop} exit 1 esac EOF # 2. 设置权限并注册服务 chmod x /etc/init.d/oracle chkconfig --add oracle chkconfig oracle on # 3. 验证服务状态 service oracle status # 输出LSNRCTL for Linux: Version 11.2.0.4.0 - Production且显示 started我自己的习惯每次部署完我会在/u01/app/oracle/diag/rdbms/orcl/orcl/trace/下tail -f alert_orcl.log5 分钟确认无ORA-错误刷屏再用crontab -e加一行0 2 * * * /u01/app/oracle/product/11.2.0/dbhome_1/bin/rman target / cmdfile /u01/app/oracle/scripts/backup.rman把备份变成自动任务——安装结束不是终点是运维生命周期的起点。希望帮到你。本文还有配套的精品资源点击获取