恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

CentOS 8.0安装Oracle 12cR2全流程指南:兼容性处理与高频报错排查

  • 首页
  • 资讯中心
  • /
  • CentOS 8.0安装Oracle 12cR2全流程指南:兼容性处理与高频报错排查

相关资讯

告别AI应用廉价感:5个可落地的设计决策 2026/10/14 5:13:03
数据提取完整实践复盘:从需求拆解到稳定落地全流程 2026/10/14 5:13:03
长活动按声音对齐后片尾漂移,起点通过不代表整段同步 2026/10/14 5:13:03

最新资讯

DSH 桌面客户端装桌宠:插件、Electron 桌面形态与「怎么冒出两只」的排查
SpringBoot洗衣店管理系统:数字化转型实践
CActor v1.1.0 功能特性全解:基于仓颉语言的 Actor 框架核心能力与源码级验证
弱光下MPPT如何稳压高效工作?
上下文模式深度解析:从参数传递到并发隔离的工程实践
配电网辐射状拓扑约束的断线解环建模与MATLAB实现

今日推荐

IBM Verify Identity Access 修复 22 个漏洞:两个 9.8 严重 RCE 无需认证
小区物业管理系统
小型超市仓库管理系统

本周热门

UE动画修改实战:从资产编辑到重定向与蒙太奇驱动
统计随机数生成器攻击下的KLJN安全密钥交换协议Matlab仿真
政务API安全治理:资产测绘、低代码编排与行标对标实践

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

CentOS 8.0安装Oracle 12cR2全流程指南:兼容性处理与高频报错排查

发布时间:2026/10/14 5:13:03
CentOS 8.0安装Oracle 12cR2全流程指南:兼容性处理与高频报错排查 CentOS 8.0 和 Oracle 12c Release 2 天生就有个时间差12.2.0.1 发布时还是 Red Hat 7 的时代CentOS 8 的发行说明里根本没有它的一席之地。我最初以为无非是装几个依赖包的事结果真正动手时才发现光是缺少 compat-libstdc-33 这类旧库、OS 版本校验的红叉、以及 /dev/shm 太小导致的 ORA-00845就能让新朋友折腾一整天。这篇指南就是把我自己在 CentOS 8.0 上完整装一遍 Oracle 12cR2 的过程、每次卡住的节点和对应的处理方式整理出来适合需要在没图形界面的服务器上快速搭一套 12c 学习或测试环境的人参考。1. 版本兼容性先说清楚CentOS 8 与 12cR2 的适配关系1.1 为什么第一关就是 OS 版本校验Oracle 12c Release 2 的完整编号是 12.2.0.1发布时间对应 Red Hat 7 那一代系统。Oracle 官方的认证矩阵里12.2.0.1 支持 Red Hat 7不支持 Red Hat 8CentOS 8 自然不在认证列表里。installer 会读取/etc/os-release和内核版本然后直接给出一个红色的 OS Kernel Version 检查失败项。这个红叉本质上不是装不了而是官方没承诺过一定能稳定跑。很多教程会绕开这个检查直接装我自己实际跑下来的感受是只要内核参数、共享内存和依赖库到位数据库本体是可以正常起停和连接访问的。1.2 官方认证与实验环境的取舍所以先给建议如果是要长期跑生产不要用 CentOS 8 12cR2 的组合哪怕装上了也别宣传已认证可以考虑换成 Oracle Linux或者把版本升到 19c/21c。如果只是学习、做功能验证、迁移演练或者给老业务做兼容性测试CentOS 8 12cR2 这套组合完全够用成本也最低。这篇指南默认的就是后者。1.3 环境规格与磁盘规划我使用的环境是 2 核 4GB 内存、40GB 系统盘的虚拟机安装的是 CentOS 8.0 最小化系统。Oracle 12cR2 的安装包解压后大约 3GB安装之后的 ORACLE_HOME 大约 5GB再加上建库的数据文件建议给 /u01 单独分区预留 20GB 以上。交换分区方面4GB 内存的机器我给了 8GB swap实际安装过程比较平稳dbca 建库也没有报内存不足。一个小提醒如果你的虚拟机内存很小比如只有 1GB安装会慢且容易在 make 阶段卡死最低建议 2GB 内存起步。安装包是 oracle 用户的不要用 root 去解压目录权限后面会专门说。2. 依赖包、内核参数和基础环境CentOS 8 特有的三个坑2.1 缺哪些包一条命令装完Oracle 12cR2 官方对 Red Hat 7 给出的依赖包清单里很多包在 CentOS 8 的默认源中已经改名或消失。下面是我在 CentOS 8.0 最小化安装上实测可用的依赖集合dnf install -y bc binutils elfutils-libelf elfutils-libelf-devel \ fontconfig-devel glibc glibc-devel ksh libaio libaio-devel \ libnsl libX11 libXau libXi libXtst libXrender libgcc libstdc \ libstdc-devel libxcb make net-tools nfs-utils smartmontools \ sysstat unixODBC unixODBC-devel其中libnsl是 12c 的二进制程序非常依赖的库在 CentOS 8 里不会自动装。如果你安装之后跑sqlplus遇到libnsl.so.1: cannot open shared object file的报错就是少了它。nfs-utils和smartmontools这类包主要是过 installer 的开机预检查用缺了也无大碍但既然检查项列在那里一次性补全不费事。2.2 两个老兼容包的补法compat-libcap1和compat-libstdc-33在 CentOS 8 的默认仓库里基本找不到。compat-libcap1可以通过启用 PowerTools 仓库获得先把dnf-plugins-core装好再执行dnf install -y dnf-plugins-core dnf config-manager --set-enabled powertools dnf install -y compat-libcap1compat-libstdc-33这个包连 PowerTools 里都没有我当时的做法是从旧版源里下载了对应的 RPM用dnf localinstall本地安装。如果身边实在拿不到也可以先跳过只把其他依赖准备好安装器检查项里它红叉选择忽略后对后续数据库运行影响并不明显。这个包主要负责兼容老编译器生成的 C 程序Oracle 12c 本体的许多组件已经不依赖它了。2.3 内核参数与用户、目录规划安装数据库前需要把共享内存相关的内核参数写到/etc/sysctl.conf。这几个参数决定了 Oracle 能否顺利分配 SGA 和创建信号量cat /etc/sysctl.conf EOF fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.sem 250 32000 100 128 kernel.shmall 1073741824 kernel.shmmax 4398046511104 net.core.rmem_default 262144 net.core.rmem_max 4194304 net.core.wmem_default 262144 net.core.wmem_max 1048576 net.ipv4.ip_local_port_range 9000 65500 vm.swappiness 10 EOF sysctl -p参数写完后创建安装用户和组。我按最常见的规范来oracle用户从属于oinstall和dba两个组groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle目录规划上ORACLE_BASE 用/u01/app/oracle安装介质放在/u01/install。建好目录后把属主改成 oracle避免后面所有步骤都要 sudomkdir -p /u01/app/oracle /u01/install chown -R oracle:oinstall /u01/app /u01/install chmod -R 775 /u01/app /u01/install还需要设置 oracle 用户的资源限制写入/etc/security/limits.conforacle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 10240 oracle soft memlock unlimited oracle hard memlock unlimited2.4 SELinux、firewalld 与 /etc/hostsCentOS 8 默认开着 SELinux为了少踩几层权限坑我把它调成 permissive修改/etc/selinux/config后重启或临时执行setenforce 0。防火墙如果实验环境直接关了也行但更妥善的做法是只开放数据库端口firewall-cmd --permanent --add-port1521/tcp firewall-cmd --permanent --add-port5500/tcp firewall-cmd --reload最后还有一个经常被忽略的点Oracle 的监听器会反查主机名如果/etc/hosts里没有主机名的解析后续连接和注册会异常。我给虚拟机配了固定 IP并在 hosts 中写上IP 主机名一行。虚拟机重启后使用的主机名变化也要同步更新这一行。3. 安装阶段静默响应文件一次跑通 runInstaller3.1 解压安装包与响应文件准备CentOS 8 最小化系统默认没有 unzip先补上dnf install -y unzip。安装包是linuxx64_12201_database.zip解压后会出现database目录里面就是 runInstaller 和 stage 目录。因为服务器环境没有 X 桌面我直接走静默安装。需要用到一个响应文件Oracle 的模板在解压包的database/response/db_install.rsp里把它复制出来改下面几个关键项oracle.install.responseFileVersion/oracle/install/rspfmt_dbinstall_response_schema_v12.2.0 oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory ORACLE_BASE/u01/app/oracle ORACLE_HOME/u01/app/oracle/product/12.2.0/dbhome_1 oracle.install.db.InstallEditionEE oracle.install.db.OSDBA_GROUPdba oracle.install.db.OSOPER_GROUPoper oracle.install.db.OSBACKUPDBA_GROUPdba oracle.install.db.OSDGDBA_GROUPdba oracle.install.db.OSKMDBA_GROUPdba oracle.install.db.OSRACDBA_GROUPdba SECURITY_UPDATES_VIA_MYORACLESUPPORTfalse DECLINE_SECURITY_UPDATEStrueINSTALL_DB_SWONLY表示只装软件不创建数据库这样把安装阶段和建库阶段拆开排查问题更清晰。后面那几个OS*_GROUP是 12.2 才有的分组统一填 dba 就够。3.2 执行安装并处理 root 脚本用 oracle 用户执行su - oracle cd /u01/install/database ./runInstaller -silent -responseFile /u01/install/db_install.rsp -ignoreSysPrereqs-ignoreSysPrereqs的作用就是跳过 OS 版本这类系统级预检查让 12cR2 能在 CentOS 8 上继续走流程。如果不用这个参数installer 可能直接停在版本检测红叉上。整个安装耗时大约 20 到 40 分钟取决于机器性能。安装结束后安装器会提示两个脚本需要在 root 下执行一个是/u01/app/oraInventory/orainstRoot.sh另一个是$ORACLE_HOME/root.sh。另开一个 root 终端执行完这两个脚本再回到安装终端按回车让安装流程收尾。这里有个容易踩的细节root.sh执行时会根据当前环境做一些符号链接和权限修正如果直接用sudo ./root.sh因为环境变量和 PATH 不一致偶尔会报奇怪错误。我一般直接用su - root -c /u01/app/oracle/product/12.2.0/dbhome_1/root.sh这种方式让它在一个干净的 root 登录环境里跑。3.3 环境变量与安装后自检装完之后把 ORACLE_HOME 写进 oracle 用户的.bash_profileexport ORACLE_BASE/u01/app/oracle export ORACLE_HOME/u01/app/oracle/product/12.2.0/dbhome_1 export ORACLE_SIDorcl export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:$LD_LIBRARY_PATH export NLS_LANGAMERICAN_AMERICA.AL32UTF8为什么安装时我建议环境变量先不写全如果 OUI 从环境里读到一个 ORACLE_HOME 变量在某些版本上会把它当成默认目录导致响应文件里的路径不生效。装完再写就没有这个困扰。自检方式很简单只要ls $ORACLE_HOME/bin能看到sqlplus、dbca、netca就说明二进制安装完成再跑一下$ORACLE_HOME/bin/sqlplus /nolog如果这里能进到 SQL 提示符还能顺便验证libnsl之类的动态库没有缺。4. 监听与实例创建netca dbca 的组合拳4.1 用模板文件静默配置监听监听器用netca创建。我最省事而且不容易出错的方式是把安装好的$ORACLE_HOME/network/install/netca.rsp模板复制出来改好监听名、主机名和端口[GENERAL] RESPONSEFILE_VERSION12.2 CREATE_TYPECUSTOM SHOW_GUIfalse [LISTENERS_GLOBAL] NAMELISTENER [LISTENER_ORACLE] NAMELISTENER PROTOCOLTCP HOSTdbhost PORT1521执行netca -silent -responsefile /u01/install/netca.rsp看到成功信息后用lsnrctl status确认监听在 1521 端口运行。这里出现失败大多是/etc/hosts没配好或者主机名解析不到。如果临时只想验证不写 hosts 的 IP 解析直接用 localhost 也可能起来但后面建库注册时会很有风险所以我强烈建议先把 hosts 配好再动监听。4.2 dbca 静默建库的参数取舍建库这一步我推荐用dbca -silent参数比图形界面更透明也方便以后复制到别的机器dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl \ -sid orcl \ -characterSet AL32UTF8 \ -memoryPercentage 25 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/fra \ -sysPassword StrongSys_123 \ -systemPassword StrongSystem_123 \ -sampleSchema false我把emConfiguration设成 NONE省掉 Enterprise Manager 相关配置对学习环境没影响关键是建库速度快很多。memoryPercentage按物理内存 25% 来4GB 机器就是大约 1GB不会把宿主机吃满。字符集用 AL32UTF8这是我最想强调的现在还有不少人建库时按习惯用 ZHS16GBK一旦要处理 Unicode 数据就会遇到编码转换问题新库直接上 UTF8 准没错。数据文件位置我单独放到/u01/app/oracle/oradata不要默认塞在 ORACLE_HOME 下面。建库过程中如果出现ORA-00845: MEMORY_TARGET not supported on this system十有八九是/dev/shm太小。2GB 以上内存的机器建议把/dev/shm扩到 2GBmount -o remount,size2G /dev/shm持久化则要改/etc/fstab在 tmpfs 那一行加上size2G。这个坑在虚拟机上极其常见因为默认 /dev/shm 往往只有系统内存的一半甚至更少。4.3 建库完成后的登录与连通性检查dbca 结束会输出实例状态这时切到 oracle 用户先做本地登录sqlplus / as sysdba select instance_name, status, database_role from v$instance;能看到实例和 OPEN 状态就说明建库成功。接着测试监听服务用lsnrctl status看注册的服务名是否出现orcl。远程连不上的常见原因是监听已启动但实例没有注册可以检查$ORACLE_HOME/network/admin/tnsnames.ora也可以重启一次监听让动态注册立即生效。关于密码我用了StrongSys_123和StrongSystem_123这种实际可用的强度避免 Oracle 的密码复杂度校验直接拒绝弱密码。sys 和 system 最好设两个不同的密码后面做备份、调参数时能区分身份。5. 开机自启和服务管理从 oratab 到 systemd5.1 修改 oratab 开启 dbstart 通道dbca 建库后会在/etc/oratab写入类似的一行orcl:/u01/app/oracle/product/12.2.0/dbhome_1:N末尾的 N 表示不自动随系统启动。要让它能通过dbstart管理把 N 改成 Yorcl:/u01/app/oracle/product/12.2.0/dbhome_1:Y然后手动验证一下dbstart和dbshut能否控制整个实例。Oracle 用户下执行dbstart $ORACLE_HOME正常会依次启动监听和实例。如果只有实例起来而监听没起来多半是没设 ORACLE_HOME_LISTNER 环境变量在 oracle 用户环境里加一行export ORACLE_HOME_LISTNER$ORACLE_HOME5.2 systemd 单元文件的写法CentOS 8 用 systemd 管理服务我给这套数据库写了一个简单的单元文件路径/etc/systemd/system/oracle.service[Unit] DescriptionOracle 12c R2 Database Service Afternetwork.target [Service] Typeforking Useroracle Groupoinstall Restartno ExecStart/bin/su -l oracle -c /u01/app/oracle/product/12.2.0/dbhome_1/bin/dbstart /u01/app/oracle/product/12.2.0/dbhome_1 ExecStop/bin/su -l oracle -c /u01/app/oracle/product/12.2.0/dbhome_1/bin/dbshut /u01/app/oracle/product/12.2.0/dbhome_1 [Install] WantedBymulti-user.target写完执行systemctl daemon-reload再用systemctl enable oracle设为开机启动。我实际测试下来Typeforking必须保留因为dbstart自身会 fork 进程并立即返回设成simple反而会被 systemd 误判为启动失败。另外Restartno是主动设置的避免数据库实例在人为维护中被自动拉起做到以你手动操作为准。5.3 启动后必查的状态项我的习惯是每次机器重启后不开一堆面板只跑三条命令确认数据库可用lsnrctl status sqlplus / as sysdba EOF select open_mode from v\$database; EOF df -h /dev/shm第一条看监听第二条看数据库读写状态是否 READ WRITE第三条确认共享内存足够。如果这三条都正常就可以放心把连接字符串给业务方了。做这批检查时建议把 ORACLE_SID 带上省得出现连错实例的乌龙。6. 安装过程中最常遇到的报错和我的处理记录6.1 报错现场与处理对照下面这个表格里的内容是我在这台 CentOS 8.0 机器上和帮朋友远程处理时真实遇到过的按出现频率排序报错现场原因我的处理方式OUI 阶段报 OS Kernel Version 失败12cR2 官方不支持 CentOS 8使用-ignoreSysPrereqs跳过继续安装dbca 阶段报 ORA-00845/dev/shm 空间不足扩大 /dev/shm 到 2GB 并写入 fstabsqlplus 报 libnsl.so.1 找不到缺少 libnsl 库dnf install -y libnsl监听起来了实例注册不上/etc/hosts 主机名解析异常或注册延迟检查 hosts重启监听等 30 秒再看root.sh 执行时报环境变量缺失root 环境没有 ORACLE_BASE用su - root -c直接执行脚本建库时提示字符集转换问题用了 ZHS16GBK重新建库并使用 AL32UTF86.2 几个值得长期记住的教训第一个教训不要装完系统就急着全量dnf update。我第二次重装时先跑了全量更新再装数据库结果 glibc 和 openssl 的版本变化让 12c 的客户端组件多出几个奇怪的兼容问题。稳妥的顺序是装最小化系统、配好 hosts、设置固定 IP直接开始装数据库等全部验证通过后再决定要不要补系统补丁并且补丁前做好虚拟机快照。第二个教训安装和建库是两个阶段不要合在一起做。软件安装时报错和建库时报错定位范围完全不同。我见过有人为了省事在响应文件里加oracle.install.db.config.starterdb.typeGENERAL_PURPOSE想一把梭一旦中途失败日志里全是相互叠加的错误排查很痛苦。先确认sqlplus /nolog能进再创建监听最后建库每步都可验证反而更快。第三个教训密码复杂度校验不能忽略。Oracle 12c 默认打开了密码校验像oracle、123456这种密码会在建库时直接拒绝。我一开始用短密码dbca 报错后改用一个带大小写和数字的组合才通过。这个报错容易让人误以为是建库参数写错实际上完全是密码复杂度问题。最后说一点我反复踩坑后养成的操作习惯每次动手前先给系统做一个快照这比任何安装教程都管用。数据库安装过程中最折磨人的往往不是某一步不会而是做到第 30 步才发现第 5 步的依赖漏了不得不从头再来。有快照在手回退只需要一分钟。安装完成后把环境变量、响应文件、安装日志都备份到一个单独目录下次搭同样环境时直接把响应文件改个路径就能复用省下的时间远超整理这些文件所花的时间。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号