龙蜥离线部署 Oracle 11g:rpm 包拆解与静默安装避坑指南
简介面向需要在龙蜥Anolis系统上部署Oracle 11g的数据库管理员、运维人员及数据库课程学习者这份安装包提供了一套可用于实验环境搭建与迁移验证的部署素材重点解决系统适配、依赖处理、实例初始化及数据还原等问题。包内共11个文件以7个rpm安装包为主辅以sh自动化安装脚本、conf配置文件、chkconfig服务管理脚本和共享内存相关配置压缩包约334.17MB基本覆盖数据库软件安装与运行环境准备所需组件。配套脚本把环境变量设置、依赖检查、RPM安装、实例创建和监听器配置等环节串联起来并保留DMP文件导入能力便于在数据迁移或恢复场景中减少手工重复操作。已有3020人学习适合希望对照脚本理解Oracle 11g在Anolis上部署要点、排查依赖与权限问题的中级读者参考也可作为测试环境快速复现的素材。1. 龙蜥上装 Oracle 11g先把「rpm 包」这件事说透机房交付一台龙蜥Anolis系统业务侧要求跑一套老库手里只有 oracle11g 数据库安装包具体文件是 oracle11g.rpm外网不通依赖也不能临时拉。这种场景下最危险的动作就是上来rpm -ivh。Oracle 11g 在 Linux 上的传统安装介质是runInstaller那一套rpm 封装通常只解决离线分发、依赖声明、目录预置或预编译二进制中的一部分不是“装完就能连”。先判断它属于“安装器薄封装”还是“ORACLE_HOME 厚封装”后面走静默安装还是只做配置建库路径完全不同。适合内网离线部署、老系统迁移、测试环境快速复现的人不适合不做兼容性验证就直接压生产的人。2. 拆包看结构oracle11g.rpm 里到底装了什么拿到包先别装先看文件清单和安装脚本。rpm 的元数据能告诉你它依赖什么、安装前后会执行什么文件清单能告诉你它是“带安装器的壳”还是“已经把 ORACLE_HOME 铺好了”。这一步花十分钟后面能少熬一晚上。2.1 用 rpm -qpl 和 cpio 看文件清单先看元数据和文件列表重点找runInstaller、response、root.sh、orainstRoot.sh、bin/sqlplus、inventory这些标志物。# 查看 rpm 元数据版本、架构、依赖、安装脚本 rpm -qpi oracle11g.rpm rpm -qp --requires oracle11g.rpm rpm -qp --scripts oracle11g.rpm # 列出包内文件先看有没有 runInstaller、response、root.sh rpm -qpl oracle11g.rpm | sort | head -n 80 # 不安装解包到临时目录做静态检查 mkdir -p /tmp/oracle11g_rpm_view cd /tmp/oracle11g_rpm_view rpm2cpio /path/to/oracle11g.rpm | cpio -idmv find . -maxdepth 4 -type f | sort | head -n 120rpm -qpi看包摘要--requires看依赖--scripts看%pre、%post这些安装脚本。rpm -qpl只列文件不落盘。rpm2cpio把 rpm 转成 cpio 流cpio -idmv里-i是提取-d自动建目录-m保留时间戳-v显示过程。head只是防止刷屏真要看全量就去掉。没有rpm2cpio命令时先从系统镜像或内部源补rpm2cpio包别用rpm2cpio.pl之类的野脚本替代。如果文件清单里只有response、db_install.rsp、orainstRoot.sh、root.sh没有bin/sqlplus大概率是薄封装rpm 只负责铺响应文件和目录真正的软件安装还要runInstaller从同目录的官方介质装。反过来如果能看到product/11.2.0/dbhome_1/bin/sqlplus、lib/libclntsh.so.11.1、rdbms目录说明是厚封装装完包之后重点变成目录权限、动态库、建库和监听。这里有个血泪经验解包目录只用来“看”不要在里面执行root.sh。rpm 包里的脚本可能写死了路径和用户解包目录执行会把权限和清单写乱。2.2 安装包与 runInstaller 介质的关系薄封装和厚封装的区别不在文件名而在“软件根目录是否已经在包里”。用一条 grep 能快速判断rpm -qpl oracle11g.rpm | grep -E runInstaller|response|root.sh|orainstRoot.sh|bin/sqlplus|inventorygrep -E支持多模式匹配。命中runInstaller但没有bin/sqlplus说明安装器在包里、软件还没装命中bin/sqlplus且有lib/libclntsh.so.11.1说明文件已经铺好。这里要注意rpm 包内路径不一定以/开头rpm -qpl输出的是相对根路径看到u01/app/oracle/...是正常的。薄封装的落地流程通常是补依赖 → 建用户和目录 → 解压官方介质 → 改响应文件 →runInstaller -silent→ 跑root.sh→netca→dbca。厚封装的流程短一些装 rpm → 检查oracle用户和oraInst.loc→ 跑root.sh→ 配环境变量 →netca→dbca。但厚封装不等于“零依赖”它仍然依赖libaio、libstdc、ksh这些运行库也仍然要做内核参数和资源限制。判断薄厚之后再决定要不要准备官方 zip。薄封装如果只带响应文件你手上又没有官方介质这个 rpm 是装不完整的这种情况不要硬装先把介质补齐。厚封装如果包内文件时间戳很老先确认它是不是针对某个固定小版本做的预编译别把补丁状态当成最新。2.3 选型rpm 封装安装 vs 官方 runInstaller 的边界维度rpm 封装安装官方 runInstaller部署速度快目录和文件一次铺好慢要过先决条件检查和编译离线依赖依赖声明清楚但兼容库仍要自备依赖要手工补检查更细可追溯性取决于包内脚本和日志安装日志、清单、补丁链完整补丁与升级要看封装方式厚封装可能不便打补丁按官方补丁流程走边界清楚排错入口rpm -qp --scripts、包内日志、root.sh输出oraInventory/logs、make.log、CVU 报告适用场景内网测试、快速复现、固定版本交付生产、需要审计和补丁管理的场景选型上我一般把 rpm 封装当成“交付加速器”不当成“兼容性证明”。测试环境用厚封装能省掉 42% 卡住的编译问题生产环境如果要求补丁可追溯还是走官方runInstallerrpm 只用来分发响应文件和依赖。rpm -ivh --test oracle11g.rpm可以做安装前冲突测试只检查不落盘适合先看文件冲突。--nodeps不要随手加--noscripts更要谨慎它会跳过用户创建、目录权限和清单写入后面会以“找不到 oracle 用户”“没有 oraInst.loc”的形式翻车。3. 龙蜥底座准备依赖、内核参数与资源限制Oracle 11g 对底座的要求比较“老派”共享内存、信号量、文件句柄、异步 IO、兼容库一个都不能少。龙蜥 8 系这类企业级 Linux 兼容底座包管理器和内核都比 11g 当年新直接装容易在依赖和编译环节卡住。先把底座调平再谈安装器。3.1 依赖包与兼容库别让 libaio 卡住第一步# 先确认系统版本和仓库可用 cat /etc/os-release dnf repolist # 基础编译与运行依赖按实际仓库包名微调 dnf install -y libaio libaio-devel libstdc libstdc-devel gcc gcc-c make binutils \ elfutils-libelf elfutils-libelf-devel glibc glibc-devel ksh unzip \ libX11 libXext libXtst libXrender libXi # 11g 常见的 32 位兼容库64 位系统上要确认仓库是否有 dnf install -y compat-libstdc-33 || echo 兼容库需从内部兼容源补齐 # 检查关键 so 是否可解析 ldconfig -p | grep -E libaio|libstdc\\|libclntshdnf install -y自动确认libaio是异步 IO 依赖Oracle 数据文件读写会用到compat-libstdc-33提供老 C ABI11g 的部分二进制和安装器会找libstdc.so.5ksh是安装脚本常用 shelllibX11系列是图形安装器和部分工具依赖。|| echo在缺包时给提示不中断整条命令但看到提示就要去补不要当没看见。ldconfig -p查动态库缓存grep -E里libstdc\\需要转义加号。依赖包作用缺失时的典型现象libaio / libaio-devel异步 IO建库或启动时报 IO 相关错误compat-libstdc-33老 C ABI安装器报libstdc.so.5找不到ksh安装脚本脚本报ksh: not foundgcc / gcc-c / make安装时编译42% 左右 makefile 报错libX11 / libXext图形安装器runInstaller图形界面起不来elfutils-libelf二进制分析先决条件检查缺项这里有个坑Anolis 8 的默认仓库不一定有compat-libstdc-33从旧介质里抽包混装要确认架构和符号版本不要直接把 32 位包丢进 64 位环境就完事。rpm -q libaio compat-libstdc-33 ksh可以快速核对已装包。3.2 内核参数共享内存、信号量、网络端口# 备份原配置 cp /etc/sysctl.conf /etc/sysctl.conf.bak.$(date %F) cat /etc/sysctl.conf EOF fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 1073741824 kernel.shmmax 4398046511104 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 EOF sysctl -pkernel.shmmax是单个共享内存段最大字节数kernel.shmall是共享内存总页数kernel.shmmni是段数上限。上面给的是大内存机器的常见模板小内存机器要按物理内存降不要照抄 4TB 的shmmax。shmall按shmmax / PAGE_SIZE估算getconf PAGE_SIZE通常是 4096。kernel.sem四个值依次是信号量集合数、每集合信号量数、每次操作数、系统级信号量数250 32000 100 128是 Oracle 安装检查常见组合。fs.aio-max-nr控制异步 IO 请求上限fs.file-max是系统级文件句柄上限。ip_local_port_range避开监听和客户端连接常用端口。sysctl -p加载配置报错就看键名是否被内核弃用。参数常用值说明kernel.shmmax物理内存一半或更大单段共享内存上限kernel.shmallshmmax / PAGE_SIZE共享内存总页数kernel.shmmni4096共享内存段数kernel.sem250 32000 100 128信号量四元组fs.file-max6815744系统文件句柄上限fs.aio-max-nr1048576异步 IO 上限net.ipv4.ip_local_port_range9000 65500本地端口范围3.3 用户、组、目录与 ulimit# 创建 Oracle 所需的组和用户uid/gid 按企业规范固定 groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper useradd -u 54321 -g oinstall -G dba,oper -m -s /bin/bash oracle passwd oracle # 目录规划ORACLE_BASE、ORACLE_HOME、oraInventory、数据文件目录 mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 mkdir -p /u01/app/oraInventory mkdir -p /u01/app/oracle/oradata chown -R oracle:oinstall /u01/app chmod -R 775 /u01/app # 资源限制 cat /etc/security/limits.conf EOF oracle soft nproc 16384 oracle hard nproc 16384 oracle soft nofile 65536 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 10240 oracle soft memlock unlimited oracle hard memlock unlimited EOF # 让 limits 在登录时生效 grep -q pam_limits.so /etc/pam.d/login || echo session required pam_limits.so /etc/pam.d/logingroupadd -g固定 giduseradd -u固定 uid-g是主组-G是附加组-m建家目录-s指定 shell。目录权限给 775让oinstall组可写。limits.conf里soft是默认限制hard是上限memlock unlimited让 Oracle 能锁内存。pam_limits.so确保登录会话加载限制grep -q避免重复追加。验证用su - oracle -c ulimit -a看open files、max user processes、stack size是否生效。如果系统用 systemd 服务启动数据库limits.conf不一定对服务生效还要在 unit 里配LimitNOFILE。这一步不做后面可能遇到ORA-27123之类的连接问题。4. 静默安装与建库把响应文件写成可复现的模板静默安装的价值是可重复响应文件进版本库日志进交付记录换一台机器改几个路径就能再跑一遍。Oracle 11g 的响应文件参数多但关键的就那么几个先把ORACLE_HOME、SID、字符集、组名对齐再谈高级参数。4.1 响应文件的关键参数ORACLE_HOME、SID、字符集# /tmp/db_install.rsp 的关键片段按实际介质路径调整 oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/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 SECURITY_UPDATES_VIA_MYORACLESUPPORTfalse DECLINE_SECURITY_UPDATEStrue oracle.installer.autoupdates.optionSKIP_UPDATESINSTALL_DB_SWONLY表示只装软件不建库建库交给dbca这样安装失败和建库失败能分开排查。UNIX_GROUP_NAME是oinstallINVENTORY_LOCATION是中央清单目录要和目录准备一致。SELECTED_LANGUAGES控制安装语言ORACLE_HOME和ORACLE_BASE不要写错层级。InstallEditionEE是企业版如果资源是标准版要改。DBA_GROUP、OPER_GROUP对应前面创建的组BACKUPDBA_GROUP、DGDBA_GROUP、KMDBA_GROUP在 11g 里通常也指向dba。SECURITY_UPDATES...false和DECLINE_SECURITY_UPDATEStrue是离线环境常见组合autoupdatesSKIP_UPDATES跳过自动更新检查。响应文件里不要放明文密码安装阶段一般不需要建库阶段需要密码时用临时文件并chmod 600跑完就删。路径不要带空格不要用软链接指向ORACLE_HOME否则root.sh和清单容易写错。4.2 执行安装与监听配置# 以 oracle 用户执行日志落到可追溯目录 su - oracle export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/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 export NLS_LANGAMERICAN_AMERICA.AL32UTF8 cd /tmp/oracle_install ./runInstaller -silent -responseFile /tmp/db_install.rsp \ -ignorePrereq -waitforcompletion \ -J-Doracle.install.mgdb.computeMarkupfalse # 安装器提示后用 root 执行两个脚本 su - root /u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.shsu - oracle切换用户并加载环境ORACLE_BASE、ORACLE_HOME、ORACLE_SID、PATH、LD_LIBRARY_PATH、NLS_LANG是基础变量。runInstaller -silent静默安装-responseFile指定响应文件-ignorePrereq跳过先决条件检查-waitforcompletion等安装完成-J-D...关闭某些标记计算减少卡顿。-ignorePrereq不是后悔药跳过检查后编译错误还是会来日志里要能看到具体缺项。orainstRoot.sh建清单和权限root.sh建/etc/oraInst.loc和初始化脚本。root.sh的输出要逐行看不要一路回车。监听配置可以用netca静默# 静默配置监听端口默认 1521 netca -silent -responseFile /tmp/netca.rsp lsnrctl status lsnrctl startnetca.rsp里至少确认LISTENER_NUMBER、LISTENER_NAMES、LISTENER_PROTOCOLS、LISTENER_START。如果 rpm 包已经带了监听配置可以先lsnrctl status看有监听就跳过。端口冲突用ss -lntp | grep 1521查别等建库时才发现 1521 被别的进程占了。4.3 建库与验证sqlplus 连上去之后看什么# 静默建库密码用环境变量传入避免留在 history export ORACLE_SIDORCL dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname ORCL \ -sid ORCL \ -sysPassword $DB_SYS_PASS \ -systemPassword $DB_SYS_PASS \ -characterSet AL32UTF8 \ -nationalCharacterSet AL16UTF16 \ -memoryPercentage 40 \ -emConfiguration NONE \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 200 \ -initParams db_block_size8192 # 验证实例和数据库状态 sqlplus -s / as sysdba SQL set pagesize 200 select instance_status from v$instance; select name, open_mode, log_mode from v$database; select tablespace_name, status from dba_tablespaces; SQL # 验证监听和本地连接 lsnrctl status tnsping ORCLdbca -silent -createDatabase静默建库-templateName用通用模板-gdbname全局库名-sid实例名-sysPassword和-systemPassword密码-characterSet字符集-nationalCharacterSet国家字符集-memoryPercentage内存占比-emConfiguration NONE不配 EM-datafileDestination数据文件目录-redoLogFileSize重做日志大小-initParams初始化参数。sqlplus -s静默模式heredoc 里set pagesize控制输出。验证要看实例状态、打开模式、归档模式、表空间。密码复杂度要提前确认11g 默认密码策略可能要求大小写、数字、特殊字符密码太简单会在建库阶段报错。tnsping只验证 TNS 解析和监听可达不验证认证别把它当成连接成功的证据。建库后看告警日志$ORACLE_BASE/diag/rdbms/$ORACLE_SID/$ORACLE_SID/trace/alert_$ORACLE_SID.log里面如果有ORA-开头的错误先处理再交付。5. 避坑与排查龙蜥上最容易翻车的五件事5.1 现象安装到 42% 报 makefile 错误现象是runInstaller走到 42% 左右日志里ins_ctx.mk、ins_emagent.mk报gcc: error或ld: cannot find -l...。原因通常是 11g 的 makefile 面向老编译器龙蜥 8 系的 gcc、glibc、ld 都比当年新链接参数不兼容也可能缺compat-libstdc-33或者ld找不到 32 位库。解决思路是先看日志定位缺什么不要只加-ignorePrereq就以为过了grep -n -E Error|error:|cannot find|undefined reference \ $ORACLE_BASE/oraInventory/logs/installActions*.log | tail -n 50grep -n显示行号-E多模式tail -n 50看最近 50 行。日志路径因版本不同可能略有差异找不到就find $ORACLE_BASE -name installActions*.log。缺兼容库就补缺 32 位库就确认仓库已知 makefile 问题可以按补丁方式改但改之前备份。厚封装 rpm 如果已经绕过编译仍然要在目标机器上验证sqlplus和建库不要把“包安装成功”当成“软件可用”。5.2 现象sqlplus 启动报 libclntsh.so 找不到现象是sqlplus: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file。原因一般是ORACLE_HOME/lib不在动态库缓存oracle用户环境变量没加载或者 rpm 安装后没有执行ldconfig。先查echo $ORACLE_HOME/lib /etc/ld.so.conf.d/or p a hrefhttps://download.csdn.net/download/weixin_43968335/85060551 stylecolor:#ec7500;font-size:14px; 本文还有配套的精品资源点击获取 /a img altmenu-r.4af5f7ec.gif srchttps://csdnimg.cn/release/wenkucmsfe/public/img/menu-r.4af5f7ec.gif stylewidth:16px;margin-left:4px;vertical-align:text-bottom;cursor:text; /p