ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

龙蜥 Anolis 上 RPM 包安装 Oracle 11g 实战指南

龙蜥 Anolis 上 RPM 包安装 Oracle 11g 实战指南 简介这份资源面向需要在龙蜥Anolis操作系统上部署Oracle 11g数据库的运维与DBA人员提供了一套可自动化完成安装与数据恢复的整合包。Anolis OS作为阿里云维护的企业级Linux发行版是承载Oracle数据库的稳定基础环境而手动安装Oracle 11g往往涉及依赖处理、环境变量配置、实例创建与监听器设置等繁琐环节本包通过脚本将这些步骤串联起来降低部署门槛。压缩包共11个文件以7个rpm安装包为主体另含chkconfig、S01shm_load、sh脚本与conf配置文件整体约334.17MB覆盖安装介质、系统参数调优与自动化执行入口。已有3010人学习下载说明其在同类场景中具备一定参考价值。读者可借助install.sh等脚本完成环境变量设置、依赖安装、数据库实例初始化与监听配置并利用包内工具还原dmp备份文件适合希望快速搭建测试环境或迁移恢复数据的工程师参考。1. 龙蜥 Anolis 上装 Oracle 11g为什么 RPM 包比 runInstaller 更值得先试在龙蜥 Anolis OS 上部署 Oracle 11g最劝退新手的不是数据库本身而是官方 runInstaller 那套图形化流程——依赖包版本对不上、内核参数要手改、静默响应文件写错一个字符就卡在 42% 不动。我见过太多人在这上面耗掉一整天最后连监听都没起来。这份「龙蜥 Anolis 系统 Oracle 11g 安装包」走的是另一条路把 Oracle 11g 的安装过程预先打成 RPM 包用系统包管理器直接装省掉图形界面和大部分手工配置。它解决的核心问题是「在国产化操作系统上快速拉起一套可用的 Oracle 11g 实例」适合需要在龙蜥环境里做迁移验证、老系统兼容测试、或者单纯想跳过安装地狱的 DBA 和后端工程师。下面我按实际拆包和部署的顺序把这份资源怎么用、参数怎么设、哪里会翻车讲清楚。2. 拆开这个 RPM 包里面到底装了什么、依赖怎么走拿到一个 Oracle 11g 的 RPM 包第一反应不该是直接rpm -ivh而是先看清楚它把哪些东西塞进了系统。Oracle 官方从来不发 RPM 格式的 11g 安装包所以这类包一定是第三方重新打包的打包方式直接决定了你后面能不能顺利起库。2.1 包结构与文件落点先用rpm -qpl列出包内所有文件这一步能帮你判断它是「完整安装」还是「只装软件不建库」。常见的打包方式有两种一种是把 Oracle Home 整个目录树打进去安装后还需要手动跑dbca建库另一种是连建库脚本一起封装安装完直接有一个可用的实例。两种的排查思路完全不同。# 查看 RPM 包的基本信息和文件清单 rpm -qpi oracle11g-*.rpm # 看包名、版本、依赖声明 rpm -qpl oracle11g-*.rpm # 列出所有将被安装的文件路径 rpm -qpR oracle11g-*.rpm # 查看它声明了哪些依赖-qpi输出里的Requires字段是关键它告诉你这个包在安装前需要系统里已经存在哪些库。Oracle 11g 依赖的底层库在龙蜥上通常不是默认全装的尤其是libaio、libnsl、compat-libstdc这几个。-qpl的输出重点看/u01或/opt/oracle这类路径如果文件全落在/usr/lib/oracle下说明它走的是系统集成路线Oracle Home 位置可能和常规部署习惯不一样。2.2 依赖补齐与内核参数预检龙蜥 Anolis 8 基于较新的内核和 glibcOracle 11g 是 2007 年前后的产品它对老版本库的依赖需要额外处理。安装前先把依赖装齐比装到一半报错再回头补要省事得多。# 龙蜥上补齐 Oracle 11g 常见依赖 dnf install -y libaio libaio-devel libnsl compat-libstdc-33 \ elfutils-libelf-devel gcc gcc-c make sysstat unixODBC # 检查关键内核参数Oracle 11g 对共享内存和信号量有硬要求 sysctl kernel.shmmax kernel.shmall kernel.semkernel.shmmax建议不低于物理内存的一半kernel.shmall按页大小换算kernel.sem的四个值分别对应信号量集的最大数量、系统级最大信号量数、单次操作最大信号量数和系统级最大信号量集数。如果这些值偏小建库阶段会报ORA-27125或直接卡死。我一般会在/etc/sysctl.d/下单独写一个99-oracle.conf把参数固化下来避免重启后失效。提示龙蜥默认的fs.file-max和net.ipv4.ip_local_port_range通常够用但如果这台机器还要跑其他中间件建议一并检查Oracle 对文件描述符的需求比一般服务高不少。2.3 安装用户与目录规划Oracle 不允许用 root 跑数据库进程所以安装前必须建好专用的 OS 用户和组。RPM 包如果自带%pre脚本可能会自动建用户但依赖系统里已有的用户和目录权限更稳妥。# 创建 Oracle 专用用户和组 groupadd -g 54321 oinstall groupadd -g 54322 dba useradd -u 54321 -g oinstall -G dba -m oracle passwd oracle # 规划目录并授权 mkdir -p /u01/app/oracle/product/11.2.0/dbhome_1 chown -R oracle:oinstall /u01 chmod -R 775 /u01用户 ID 和组 ID 用 54321/54322 是社区惯例不是强制要求但保持一致能减少后面脚本里的硬编码冲突。/u01这个路径也是 Oracle 的默认习惯如果 RPM 包在打包时写死了别的路径-qpl那一步就能看出来提前调整挂载点或软链接。3. 静默安装实操从 rpm 到实例起来的完整链路包结构和依赖理清之后真正的安装动作其实很快。这一章把从执行 RPM 到数据库实例可连接的每一步拆开重点在静默安装的响应参数和建库阶段的关键选择。3.1 RPM 安装与安装后脚本执行rpm -ivh时注意看输出如果包带了%post脚本它可能会自动做一些初始化动作比如写环境变量文件或者调用orainstRoot.sh。# 安装 RPM 包保留输出便于排查 rpm -ivh oracle11g-*.rpm 21 | tee /tmp/oracle_rpm_install.log # 如果包声明了依赖但系统里没有用 --nodeps 强装是下策 # 正确做法是先 dnf 补齐再重新执行tee把输出同时写到日志后面如果实例起不来这份日志是第一个要翻的东西。有些打包者会在%post里自动跑root.sh这个脚本负责设置 Oracle 可执行文件的权限和oraInst.loc的位置。如果 RPM 安装完没有自动执行你需要手动到 Oracle Home 下找root.sh跑一遍。3.2 静默安装响应文件的关键参数如果这个 RPM 包只装了软件没建库下一步就是静默建库。Oracle 11g 的dbca支持-silent模式但响应文件里的参数一个都不能错。下面是一个针对龙蜥环境调整过的最小响应文件模板。# 静默建库命令响应文件路径按实际调整 dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -responseFile /home/oracle/dbca.rsp \ -characterSet AL32UTF8 \ -sysPassword Oracle123 -systemPassword Oracle123 \ -datafileDestination /u01/app/oracle/oradata \ -redoLogFileSize 100 \ -emConfiguration NONE-gdbName和-sid在单实例场景下通常设成一样-characterSet选AL32UTF8是现在的主流做法避免后面中文乱码。-emConfiguration NONE关掉 Enterprise Manager因为 11g 的 EM 基于老版本 Java在龙蜥上大概率起不来关掉能省掉一个报错源。-sysPassword和-systemPassword如果不想明文写在命令里可以只写-responseFile把密码放在响应文件的对应字段中。3.3 监听配置与连接验证建库完成后监听不会自动起来。Oracle 11g 的netca也支持静默模式但更直接的办法是手写listener.ora和tnsnames.ora。# 最小 listener.ora LISTENER (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST 0.0.0.0)(PORT 1521)) ) ) # 启动监听 lsnrctl start # 验证实例注册 lsnrctl statusHOST写0.0.0.0让监听在所有网卡上生效如果只写主机名在容器或云主机上可能只绑到回环地址。lsnrctl status输出里要能看到orcl实例的状态是READY如果显示BLOCKED或者根本没列出实例说明local_listener参数没配对需要在数据库里执行alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOST127.0.0.1)(PORT1521));然后alter system register;。# 用 sqlplus 做最终连接测试 sqlplus system/Oracle123//127.0.0.1:1521/orcl能进 SQL 提示符并且select status from v$instance;返回OPEN这套实例就算真正可用了。4. 避坑排查龙蜥上装 Oracle 11g 最容易翻车的五个点这一章是我自己在龙蜥上反复装 Oracle 11g 攒下来的血泪经验每一条都对应一个具体的报错现象和根因。如果你卡在某个环节先对照这里看。4.1 现象rpm 安装报Failed dependencies: libnsl.so.1原因龙蜥 Anolis 8 默认不装libnsl而 Oracle 11g 的二进制文件链接了这个库。解决dnf install -y libnsl如果仓库里没有从龙蜥的 compat 仓库或者对应版本的libnslRPM 单独装。装完用ldd $ORACLE_HOME/bin/oracle | grep not found确认没有其他缺失的库。4.2 现象dbca 建库到 42% 卡住不动日志无报错原因这个位置通常是 Oracle 在创建数据文件卡住多半是kernel.shmmax或kernel.shmall不够导致共享内存段分配失败但没抛到前台。解决停掉 dbca检查ipcs -lm看共享内存限制把kernel.shmmax调到物理内存的一半以上kernel.shmall调到shmmax/4096然后sysctl -p生效后重新建库。4.3 现象监听起来了但lsnrctl status看不到实例原因数据库的local_listener参数指向的地址和监听实际绑定的地址不一致实例注册不上去。解决在数据库里查show parameter local_listener如果为空设置成监听的实际地址然后alter system register;。如果监听绑的是0.0.0.0local_listener写127.0.0.1:1521即可。4.4 现象sqlplus 连接报ORA-12547: TNS:lost contact原因Oracle 可执行文件的权限不对通常是$ORACLE_HOME/bin/oracle没有设置 setuid 位或者root.sh没跑。解决用 root 执行$ORACLE_HOME/root.sh然后确认oracle文件的权限是-rwsr-s--x属主是oracle:oinstall。如果权限被改过chmod 6751 $ORACLE_HOME/bin/oracle修复。4.5 现象建库后中文数据插入报乱码原因建库时字符集选成了WE8ISO8859P1或者ZHS16GBK而客户端NLS_LANG没对齐。解决查select value from nls_database_parameters where parameterNLS_CHARACTERSET;如果是AL32UTF8客户端设export NLS_LANGAMERICAN_AMERICA.AL32UTF8如果数据库字符集已经是 GBK客户端对应设SIMPLIFIED CHINESE_CHINA.ZHS16GBK。字符集在建库后改代价极大建库时选对最省事。5. 装完之后表空间规划与日常巡检的两个硬习惯实例跑起来只是开始Oracle 11g 在龙蜥上长期稳定运行靠的是建库后立刻把表空间和巡检脚本固化下来。这一章说两个我每次装完库都会做的事以及一个验证安装质量的技巧。5.1 新库第一件事建独立表空间和用户不要把所有业务数据塞进SYSTEM或USERS表空间。建库完成后立刻按业务规划创建独立表空间数据文件路径放在/u01/app/oracle/oradata/orcl/下和系统表空间物理隔离。-- 创建业务表空间初始 500M自动扩展每次 100M CREATE TABLESPACE app_data DATAFILE /u01/app/oracle/oradata/orcl/app_data01.dbf SIZE 500M AUTOEXTEND ON NEXT 100M MAXSIZE 20G EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO; -- 创建业务用户并指定默认表空间 CREATE USER appuser IDENTIFIED BY AppPass123 DEFAULT TABLESPACE app_data TEMPORARY TABLESPACE temp QUOTA UNLIMITED ON app_data; GRANT CONNECT, RESOURCE TO appuser;EXTENT MANAGEMENT LOCAL和SEGMENT SPACE MANAGEMENT AUTO是 11g 的推荐配置能减少碎片。MAXSIZE设一个上限避免数据文件把磁盘写满导致实例挂起。QUOTA UNLIMITED只给业务表空间不给SYSTEM这是权限最小化的基本要求。5.2 验证安装质量的三个检查点装完不是能连上就完事我一般会跑三个检查确认这套实例没有暗病。第一select comp_name, version, status from dba_registry;看组件是否都是VALID如果有INVALID的组件后面用 Data Pump 或者 AWR 会出问题。第二select tablespace_name, bytes/1024/1024 as mb from dba_data_files;确认数据文件路径和大小符合预期没有落到/tmp或者根分区。第三跑一次expdp导出测试哪怕只导一个空表验证 Data Pump 目录对象和权限链路是通的。# 创建 Data Pump 目录并测试导出 mkdir -p /u01/app/oracle/dpdump sqlplus / as sysdba EOF CREATE OR REPLACE DIRECTORY dpdir AS /u01/app/oracle/dpdump; GRANT READ, WRITE ON DIRECTORY dpdir TO appuser; EOF expdp appuser/AppPass123 directorydpdir dumpfiletest.dmp logfiletest.logexpdp能跑通说明实例的作业队列、目录权限和字符集都没大问题。这个测试花不了一分钟但能提前暴露很多隐藏配置错误。5.3 一个让下次部署省半小时的习惯从那以后我每次在龙蜥上装完 Oracle 11g都会把这次用到的依赖列表、内核参数、响应文件和建库 SQL 整理成一个deploy_notes.md放在/root下。下次换一台机器直接照着清单走不用再回忆哪个库漏装了、哪个参数调过。这份 RPM 包本身已经把最麻烦的安装步骤压缩了但环境预检和建库后的规划还是得自己来。把这两块固化成自己的 checklist比反复搜「oracle11g 安装教程」要靠谱得多。希望帮到你。本文还有配套的精品资源点击获取
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进