尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

CentOS 8 静默安装 Oracle 11.2.0.1 完整实操指南

CentOS 8 静默安装 Oracle 11.2.0.1 完整实操指南 CentOS 8 上静默安装 Oracle 11.2.0.1这三个词放在一起懂行的人多少能闻到一股硬骨头的气息。Oracle 11g R2 的官方支持矩阵里压根没有 CentOS 8 的位置而 11.2.0.1 这个初始小版本更是连 RHEL 7 都没进过正式支持列表CentOS 8 的内核、glibc、包管理方式和当年完全不是一个世界。可现实偏偏就是这么拧巴大量老业务系统还稳稳跑在 11g 上操作系统因为安全、合规、硬件兼容等原因必须往前升级数据库却不能随便跟着升于是在不被支持的新系统上装老版本数据库就成了不少运维躲不掉的活。这篇文章不讲虚的把我从零到一在 CentOS 8 上完成 Oracle 11.2.0.1 静默安装的完整过程、每个参数为什么这么配、踩过的坑和排查思路全部写出来。静默安装说白了就是通过应答文件response file让 Oracle 安装程序全程无人值守地执行适合三类人看一是被要求在内网服务器上部署老版本 Oracle 的运维工程师二是需要用脚本批量交付数据库环境的自动化方向同学三是想在虚拟机里快速搭一套 11g 环境做学习测试的人。跟着这篇文章一步步走能少熬好几个通宵。1. 为什么是这个组合老库、新系统与静默安装的三方博弈1.1 11.2.0.1 为什么还在服役而且短期内退不了场很多人不理解Oracle 11.2.0.1 是 2009 年发布的版本11gR2 的第一个正式发行版到现在十几年了为什么还有人在装答案不在技术情怀而在业务现实。我接触过的不少企业核心业务系统是从 10g 时代一路开发上来的里面沉淀了大量存储过程、定时任务、报表逻辑这些代码当年就是按 11g 的行为写的依赖隐式转换规则、旧版优化器的执行计划、甚至某些在中后期版本里被废弃的功能。数据库一旦升级SQL 行为变化、执行计划漂移、应用报错牵一发而动全身。很多公司评估过升级成本后选择应用不动、数据库不动、只换操作系统底层这就在客观上造成了 CentOS 8 配 Oracle 11.2.0.1 这种新瓶装老酒的局面。另外还有一块场景是信创和国产化改造前的过渡期新采购的服务器只支持新系统旧库新装的需求自然落到 11g 上。再加上 11.2.0.4 的补丁支持虽然早已走完扩展期但大量存量系统仍在运行运维人员需要在新环境里复现、测试、修复这些问题一套能跑起来的 11g 环境必不可少。1.2 静默安装为什么比图形界面更适合这个场景Oracle 的图形安装器OUI在本地有桌面的开发机上用起来确实舒服但在服务器场景里问题非常现实生产服务器通常没有安装图形桌面你总不能为了装个数据库去给服务器装 GNOME。用 X11 转发在企业内网跨网段操作延迟高、容易断装到一半卡死是常有的事。数据库交付往往不止一台机器测试环境、预发环境、生产环境都要装图形安装每台都要人工点一遍纯属浪费生命。静默安装的本质是用一个预先写好的应答文件替代图形界面里的所有交互选项runInstaller 读取文件后按既定参数执行整个过程的输入全部可控、输出全部可追踪。这意味着同一套应答文件可以在相同规格的服务器上反复使用也可以嵌进自动化运维平台或 Ansible 脚本里实现批量交付。日志输出在文件里出问题可以慢慢查不用盯着一个 xterm 窗口干着急。当然静默安装也有它的反直觉之处图形界面是一步步问你静默是一次把所有答案准备好。任何一个参数写错过程虽然不报错比如安装在错误目录但后续问题会非常难查。所以准备工作比执行过程更重要这也是这篇文章把环境准备放在最前面、写得最细的原因。2. 环境准备才是主战场依赖、用户与系统配置一步不能少2.1 依赖包安装CentOS 8 上没有现成的预安装脚本得手动补齐在 Oracle Linux 上装 11g官方提供了oracle-database-preinstall这种预安装包一条命令把依赖、用户、内核参数全搞定。但在 CentOS 8 上没有这个包所有事情都得自己来这也是为什么网上关于CentOS8 安装需要添加什么依赖的搜索热度一直居高不下。先说我实际执行时的依赖清单基于 Oracle 11.2.0.1 官方文档中 RHEL 6 的依赖列表再结合 CentOS 8 的特点做了增删dnf install -y binutils compat-libcap1 gcc gcc-c glibc glibc-devel \ ksh libaio libaio-devel libgcc libstdc libstdc-devel \ libXext libXtst libX11 libXau libXi make sysstat \ elfutils-libelf elfutils-libelf-devel numactl numactl-devel \ unixODBC unixODBC-devel libnsl libnsl2 readline readline-devel重点说几个容易出问题的地方第一libnsl是必须装的。CentOS 8 的 glibc 已经不再内置老式 NIS 库而 Oracle 11.2.0.1 的二进制里面还在调用这些旧符号不装libnsl安装阶段可能不报错但后续 sqlplus 或监听启动时会出现找不到共享库文件的问题非常隐蔽。第二compat-libstdc-33这个包在 CentOS 8 的默认源里是没有的。Oracle 的 OUI 预检查需要它虽然加了-ignoreSysPrereqs参数可以跳过但为了减少后患建议从 CentOS 7 的软件源里找到对应 RPM文件名类似compat-libstdc-33-3.2.3-69.el7.x86_64.rpm直接dnf install ./compat-libstdc-33-*.rpm本地安装。注意不要盲目加--nodeps除非你确认当前系统已经具备它依赖的库。第三ksh必须装。Oracle 11g 的很多配置脚本用的是 Korn Shell缺了它运行root.sh或者数据库配置工具时会报/usr/bin/ksh: No such file or directory之类的错。另外强烈建议把Development Tools这个组件组也装上虽然上面已经把 gcc 列出来了但组件组里还有一些编译工具链里的辅助工具万一安装时走到 relink 阶段缺了东西补起来更麻烦。dnf groupinstall -y Development Tools如果服务器在内网、没有外网这里就要提前规划好离线仓库。我常用的做法是在能联网的机器上用dnf download把依赖包全部下载好装进内网机器的本地目录再用dnf install ./xxx.rpm逐个安装。还有人会把 CentOS 8 的 ISO 挂载成本地 yum 源这个方法也稳定关键是先把 BaseOS 和 AppStream 两个仓库都配好只配一个的话很多包装不上。2.2 Oracle 用户、目录规划与 release 文件兼容处理依赖装完之后创建 Oracle 安装所需的用户和组。Oracle 11g 的典型规划是三个组、一个用户groupadd oinstall groupadd dba groupadd oper useradd -g oinstall -G dba,oper oracle echo oracle | passwd --stdin oracle主目录和安装目录按 Oracle OFAOptimal Flexible Architecture规范规划mkdir -p /u01/app/oracle mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 mkdir -p /u01/app/oracle/oraInventory mkdir -p /u01/app/oracle/oradata chown -R oracle:oinstall /u01/app/oracle chmod -R 775 /u01/app/oracle很多教程到这一步就急着解压安装包但我建议先处理/etc/redhat-release这个文件这是整个安装过程中最关键的障眼法。Oracle 11.2.0.1 的 OUI 在预检查阶段会读取/etc/redhat-release识别当前操作系统版本。CentOS 8 肯定不在它的支持列表里直接跑安装程序检查必挂。处理方法是临时把该文件改成 RHEL 7 的标识等所有安装和配置完成后再恢复ls -l /etc/redhat-release # 先确认它是普通文件而不是软链接 cp -a /etc/redhat-release /etc/redhat-release.bak echo Red Hat Enterprise Linux Server release 7.6 (Maipo) /etc/redhat-release这里有个细节不只是 runInstaller 会检查系统版本后面的 netca、dbca 也会做类似检查所以这个临时文件要一直保留到数据库实例创建完成最后再恢复成 CentOS 8 的原始内容。别装完软件就急着改回来不然 dbca 建库时要多折腾一轮。2.3 内核参数与资源限制给 11g 一个稳定的家Oracle 11g 对共享内存、信号量、文件句柄都有明确要求。CentOS 8 默认值在部分参数上是够用的但还有几个必须手工调否则后面会遇到 ORA-27125 或启动失败。在/etc/sysctl.d/99-oracle.conf写入以下内容然后sysctl --system使其生效fs.file-max 6815744 fs.aio-max-nr 1048576 kernel.sem 250 32000 100 128 kernel.shmmni 4096 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重点解释两个参数kernel.shmmax表示单个共享内存段的最大值。在 11g 的 AMM自动内存管理架构下Oracle 会把 SGA 映射到共享内存段里如果这个值设的比 SGA 还小数据库启动时会报 ORA-27102: out of memory。现在的服务器内存动不动 64G、128G我习惯直接设一个非常大的值比如 4TB 这个量级让数据库自己决定怎么用省得来回调。kernel.sem的四个值分别对应信号量最大值、系统范围最大值、每个信号集的操作数和系统范围最大信号集数Oracle 11g 要求至少是250 32000 100 128照着设就行。资源限制方面编辑/etc/security/limits.conforacle soft nofile 1024 oracle hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft stack 10240 oracle hard stack 10240nofile是文件句柄数数据库持有大量数据文件、日志文件时默认 1024 根本不够nproc控制进程数11g 的 RAC 或高并发场景下 2048 起步stack设成 10240 KB 是为了匹配 Oracle 官方的建议值防止某些工具运行时栈空间不足导致段错误。SELinux 方面Oracle 官方推荐设为 permissive 或 disabled。生产环境如果安全策略强制要求 SELinux那至少要把 Oracle 相关的端口和目录加进去但过程很繁琐。我个人的建议是测试环境直接设成permissive生产环境走合规流程再定别因为 SELinux 拦截导致监听起不来、连接被拒这种异常排查起来极其浪费时间。防火墙也要提前放行 1521 端口firewall-cmd --permanent --add-port1521/tcp firewall-cmd --reload最后是/etc/hosts这个文件最容易被人忽略却是 Oracle 网络层的地基。主机名解析不了监听直接起不来127.0.0.1 localhost localhost.localdomain 192.168.1.10 oracledbhostname输出的主机名必须能在/etc/hosts里找到对应行不然lsnrctl start会报TNS-01150: The address of the specified listener name is incorrect之类的错误。3. 核心实操应答文件、runInstaller 与 root 脚本三步完成静默安装3.1 应答文件详解每一个字段都不是摆设一切准备就绪后把安装包解压。Oracle 11.2.0.1 for Linux x64 通常包含两个 zip 包linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip顺序解压到同一个目录即可。安装包自带的应答文件模板在database/response/db_install.rsp但我不建议直接改官方模板而是复制一份出来再编辑保留原始文件方便对比。我用的应答文件核心内容如下oracle.install.optionINSTALL_DB_SWONLY ORACLE_HOSTNAMEoracledb UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oracle/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.DBA_GROUPdba oracle.install.db.OPER_GROUPoper oracle.install.db.BACKUPDBA_GROUPdba oracle.install.db.DGDBA_GROUPdba oracle.install.db.KMDBA_GROUPdba oracle.install.db.CLUSTER_NODES oracle.install.db.isRACOneInstallfalse oracle.install.db.ConfigureASMfalse oracle.installer.autoupdates.optionSKIP_UPDATES DECLINE_SECURITY_UPDATEStrue逐个说说几个容易配错的字段oracle.install.optionINSTALL_DB_SWONLY表示只安装数据库软件不创建实例。为什么选这个而不是 INSTALL_DB_AND_CONFIG因为建库这个动作在静默安装里最好拆出来单独用 dbca 做软件安装和建库分开可以降低排查问题的复杂度——软件装失败了不必重复建库建库失败也不用重装软件。在 11.2.0.1 这个老版本上一次做完的失败率并不低拆分操作能让每一步的日志边界都清晰。INVENTORY_LOCATION指定中央清单目录也就是 oraInventory 的路径。Oracle 通过它来记录所有已安装的 Oracle 产品后续打补丁、增删组件都依赖这个清单。两台机器如果共享了这个目录路径比如 NFS可能导致识别到对方的安装信息所以每台机器的 oraInventory 要独立。SELECTED_LANGUAGESen,zh_CN建议至少包含英文需要中文字符集和工具界面再加zh_CN。如果只选中文某些英文环境的工具会出现显示问题英文字符集至少加进去保底。最后两个参数比较特殊。oracle.installer.autoupdates.optionSKIP_UPDATES是跳过自动更新DECLINE_SECURITY_UPDATEStrue是拒绝安全更新订阅如果不设为 trueOUI 会固执地要你填邮箱地址静默模式下这就变成卡死在那里的交互提示。3.2 执行 runInstaller关键参数与日志观察方法确认应答文件属主是 oracle然后切换到 oracle 用户执行安装。注意安装程序必须以 oracle 用户运行不能直接用 root否则很多文件的属主会乱掉。su - oracle cd /path/to/database ./runInstaller -silent \ -responseFile /home/oracle/etc/db_install.rsp \ -ignoreSysPrereqs \ -ignorePrereq-ignoreSysPrereqs很直白跳过系统预检查-ignorePrereq则是忽略检查失败的报错继续执行。既然我们已经手动把依赖和系统参数都配好了这里加不加其实都能过但加上可以让安装过程不再纠结于系统版本不支持之类的提示直接往下走。执行之后屏幕会输出一段日志路径通常是/tmp/oraInstall2025-xx-xx_xx-xx-xx.log。静默安装没有任何进度条判断装没装好只能靠日志所以这个文件就是接下来几小时的伴读。安装过程中可以开另一个会话观察进程状态ps -ef | grep java tail -f /tmp/oraInstall*.logOracle 11.2.0.1 安装在 CentOS 8 上最常出现的坑是在 make 阶段报链接错误。日志里如果出现Error in invoking target all_no_orcl of makefile这类记录通常是因为新版 GCC 生成的目标文件和 11g 的链接参数不兼容。我在实际环境中遇见这类问题首选方案是确认 gcc、binutils、glibc-devel 这几个包都装了同一套版本体系都是 CentOS 8 默认的就可以然后在日志里找到具体失败的 make target单独进入$ORACLE_HOME/rdbms/lib等目录尝试手工 relink比盲目重装快得多。如果手工 relink 也不行退一步的办法是换 CentOS 7 容器编译环境或者直接改用 11.2.0.4 的安装包同一套库结构兼容性好了一大截。3.3 root 脚本整个安装过程唯一需要 root 的环节安装日志显示 100% 完成且出现Successfully Setup Software字样时接下来要执行两个 root 脚本这是 Oracle 安装流程里唯一必须用 root 身份做的事。su - root /u01/app/oracle/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.shorainstRoot.sh主要做两件事修改 oraInventory 目录的属主和权限把 oinstall 组设为可写以便组内用户后续能维护清单同时生成或更新/etc/oraInst.loc文件这个文件记录了中央清单位置后续所有 Oracle 工具的安装升级都会读它。root.sh的内容更敏感它会配置/etc/oratab、设置动态链接库缓存、复制一些可执行文件到系统路径过程中会弹出两个交互提问第一个是确认本地 bin 目录默认/usr/local/bin直接回车第二个是确认是否把oracle用户的 ORACLE_HOME 写进 oratab同样默认回车。要自动化处理这两个提问可以这样echo -e \n\n | sh /u01/app/oracle/product/11.2.0/dbhome_1/root.sh执行完 root 脚本软件安装阶段就算彻底结束了。此时可以先给 oracle 用户配置好环境变量写入/home/oracle/.bash_profileexport ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/11.2.0/dbhome_1 export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.AL32UTF8NLS_LANG这个变量我很想多说两句。它的格式是语言_地区.字符集很多人在这一步直接抄一个值结果后来导入 dmp 文件、导出报表时出现乱码。上面的AL32UTF8是 Oracle 的标准 Unicode 字符集建议新库统一用它如果业务系统主要面对中文且历史数据是ZHS16GBK编码则应该改设为AMERICAN_AMERICA.ZHS16GBK。字符集一旦建库就极难修改这个决策值得多花五分钟想清楚。4. 静默建库与监听netca 和 dbca 一条龙跑通4.1 netca 静默创建监听为什么先配监听再建库软件装完后第一个要配的是网络层。Oracle 的通信依赖监听器listener它就像数据库的前台接待客户端的所有连接请求都先打到它这里它再转给对应的实例。11g 的安装包里自带一个 netca 用的应答文件模板$ORACLE_HOME/network/install/netca_typ.rsp直接用它就能完成默认配置。su - oracle $ORACLE_HOME/bin/netca /silent /responsefile $ORACLE_HOME/network/install/netca_typ.rsp执行完查看监听状态lsnrctl status正常情况应该看到类似Listening on: (DESCRIPTION(ADDRESS(PROTOCOLtcp)(HOSToracledb)(PORT1521)))的输出以及The command completed successfully的结尾。热点搜索里oracle 监听服务无法启动是高频问题绝大多数原因出在 hosts 解析和端口占用上。如果在 netca 阶段就报错先检查lsnrctl start的详细输出再确认/etc/hosts里主机名对应的 IP 是否是本机实际 IP。虚拟机环境经常出现主机名解析到 127.0.0.1导致监听绑定到 loopback 地址外部客户端当然连不上。另一个常见原因是 1521 端口被别的进程占用用ss -lntp | grep 1521查一下就知道。4.2 dbca 静默建库用命令行拼出完整实例监听就绪后用 dbca 以静默模式创建数据库实例。dbca 支持两种静默方式应答文件或者命令行参数。命令行方式更直观我习惯直接用参数。dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl \ -sid orcl \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/fast_recovery_area \ -characterSet AL32UTF8 \ -memoryPercentage 40参数含义拆开说-templateName General_Purpose.dbc是建库模板11g 内置了通用、数据仓库、事务处理几类模板通用模板最适合大多数业务场景。-gdbname是全局数据库名-sid是实例名常规单机部署这两个保持一致即可。-sysPassword和-systemPassword是 DBA 管理账户的密码生产环境务必用强密码长度至少 8 位且包含大小写字母和数字否则报 ORA-00922 之类的密码复杂度错误。-emConfiguration NONE表示不配置 Enterprise Manager老版本配 EM 容易出各种幺蛾子用到再说。-datafileDestination是数据文件目录对应规划好的 oradata。-characterset AL32UTF8再次强调字符集这里定的是真正写入数据库的字符集和上面环境变量的NLS_LANG要一致。-memoryPercentage 40表示把物理内存的 40% 分配给 Oracle 内存区具体数值根据机器规格调整跑测试的话 20% 就够。dbca 执行时间取决于磁盘速度和资源量一般 10 到 30 分钟不等日志输出在$ORACLE_BASE/cfgtoollogs/dbca/orcl下。执行完毕出现类似Database creation complete.的消息时数据库就建好了。4.3 建库后的基本验证与第一波业务测试实例建好后做一轮基础验证确认整个链路没有问题。sqlplus / as sysdba SQL select name, open_mode from v$database; SQL select instance_name, status from v$instance;v$database返回READ WRITE、v$instance返回OPEN就说明数据库正常。再用 tnsping 验证网络层tnsping orcl看到OK (0 msec)表示监听和实例名解析都正常。很多项目在安装完数据库后紧接着就是导入 dmp 文件和测试存量存储过程。这里提醒一句dmp 导入失败的头号杀手就是字符集不一致。导入前先用select userenv(language) from dual;确认两边字符集必要时指定IMPDP的REMAP_CHARACTERSET参数处理。至于存储过程、分页查询这类业务功能11g 和 8g/10g 的习惯差异不大但如果应用是从 12c 迁移过来的SQL 里用了FETCH FIRST这种新语法在 11g 上就要改成ROWNUM封装这些属于应用适配范畴开发同学最好提前介入。5. 高频问题排查实录从监听失败到依赖兼容性5.1 监听无法启动与 ORA-28547 的完整排查路径oracle 监听服务无法启动和 ORA-28547 这两个热搜词放在一起看基本勾勒出了 11g 部署最常见的两段式故障先是监听起不来然后是监听起来但连接报错。监听起不来的排查顺序我建议固定下来效率最高先看lsnrctl status完整输出错误码本身就说明了问题方向。确认 hosts 文件主机名必须解析到本机实际 IP这是被我验证过的头号原因。确认 1521 端口没被占用ss -lntp | grep 1521。往上看$ORACLE_HOME/network/admin/listener.ora11g 默认配置一般不会错但如果你动过它注意地址、协议、端口三层是否完整。ORA-28547 的完整错误是connection to server failed, probable Oracle Net admin error在 11g 刚装完的环境里出现这个错误往往和外部过程external procedure的默认配置有关。Oracle 11g 的listener.ora里有一段默认的 EXTPROC 配置如果系统里 extproc 环境不完整客户端连接时就会绕到这段错误配置上。最简单的处理是把 listener.ora 里 EXTPROC 相关的 DESCRIPTION 直接注释掉只保留正常 TCP 监听地址然后lsnrctl reload。如果你确实要用存储过程调用 C 语言外部库再去专门配置 extproc 的监听路径。5.2 版本检查不通过与资源共享冲突的处理思路遇到 OUI 预检查不通过除了前面说的修改/etc/redhat-release再补充一个经验-ignoreSysPrereqs不是万能药。11.2.0.1 的 OUI 在某些检查项失败时即使加了参数也可能中止所以更稳妥的做法是改版本文件 加参数双保险。之前机器上装过其他 Oracle 版本的场景热搜词12c 删除不干净就是典型的后面目。如果系统里残留着旧版本的信息新安装时会检测到性命冲突报product-specific prerequisite check失败。这时候要去三个地方清残留/etc/oratab、/etc/oraInst.loc、$ORACLE_BASE下的旧目录。我就遇到过一台机器装过 10g 后没清干净11g 安装时把 inventory 指向了旧的位置结果软件装完 orainstRoot.sh 找不到目录折腾了大半天。依赖库的报错也是 11g 在 CentOS 8 上的高发区。sqlplus 启动时如果报缺少libclntsh.so或libaio.so.1多半是LD_LIBRARY_PATH没配或者 libaio 没装报缺少libnsl.so.1就去装libnsl报缺少libstdc.so.5就装 compat-libstdc-33。原则上官方依赖清单里的包尽量装全别想着缺什么再补因为安装阶段的 make 过程会一次性调用大量库缺一个就断一个环节补一个重跑一次时间成本远大于提前装好。5.3 共享内存与内存参数导致的启动故障Oracle 11g 在启动时如果遇到ORA-27125: unable to create shared memory segment基本可以锁定是 HugePages 或共享内存配置的问题。CentOS 8 默认启用了透明大页Transparent Huge PagesOracle 11g 的 AMM 和透明大页在部分内核版本上有兼容性问题。处理方式有两个方向一是临时关闭透明大页echo never /sys/kernel/mm/transparent_hugepage/enabled把这个命令写进 rc.local 或 systemd 服务实现持久化。二是在/etc/sysctl.conf里设置vm.hugetlb_shm_group为 dba 组的 GID允许数据库用户使用大页内存。实际部署中我通常优先采用第一种简单直接对业务影响最小。内存参数还有另一个坑如果物理机内存不再支持 11g 自动内存管理的memory_target设置启动时会报ORA-00845: MEMORY_TARGET not supported on this system。这是因为内存目标大小超过了/dev/shm的容量。解决方法是调小memory_target或者扩大/dev/shm在 fstab 里改tmpfs的大小。容器和轻量虚拟化环境里这种问题尤其多建库前检查一下df -h /dev/shm少于 2G 的话建议先扩容。5.4 安装日志是最好的老师最后分享一个我自己受用多年的排查习惯不管报什么错第一件事不是猜而是去翻日志。Oracle 11g 静默安装涉及三类日志OUI 安装日志在/tmp/oraInstall*.log配置助手netca、dbca的日志在$ORACLE_BASE/cfgtoollogs下数据库运行日志alert log在$ORACLE_BASE/diag/rdbms/dbname/sid/trace/alert_sid.log11.2 之后的 ADR 结构。日志里藏着全部答案。OUI 日志里搜索INFO、WARNING、ERROR关键字能快速定位到具体是哪一步失败、哪个 makefile、哪个库文件缺失alert log 里搜索ORA-错误码配合systemstate dump或event 10046 trace name context forever, level 12这类常规诊断手段基本没有解不了的问题。实际工作中我发现很多运维同学宁可反复重装系统也不愿意先看两分钟日志这个习惯改过来效率至少翻一倍。在整个安装过程中我个人最深的体会是老版本 Oracle 在现代 Linux 上部署成败往往不取决于你多熟悉 SQL而取决于你多了解操作系统的底层差异——库、内核参数、内存模型、网络解析每一样都是地基。把准备工作做到位静默安装其实非常省心反过来准备工作偷懒它就让你在日志里熬通宵。另外如果你的业务允许选择版本强烈建议至少用 11.2.0.4相比 11.2.0.1它在新内核上的兼容性和稳定性都有质的提升如果只能装 11.2.0.1装完记得评估补丁需求别让一个十多年前的初始版裸奔在生产环境里。最后再提一句把整理好的应答文件和依赖脚本存到自己的知识库里下次遇到同样需求半小时就能交付一台库这才是静默安装最值钱的地方。
返回列表