龙蜥Anolis OS 7.9上静默安装Oracle 11g完整指南

发布时间:2026/9/8 3:33:34
龙蜥Anolis OS 7.9上静默安装Oracle 11g完整指南 简介面向需要在龙蜥AnolisAnolis OS上部署Oracle 11g数据库的DBA与运维人员这份资源提供了一整套自动化安装与数据恢复解决方案。包内包含Oracle 11g的RPM安装包及依赖、环境配置脚本、监听与服务初始化文件可帮助用户快速完成从依赖检查、环境变量设置到数据库实例创建与监听配置的全流程部署并支持通过IMPDP等方式还原dmp备份数据有效简化手动安装流程、减少出错概率。整个压缩包共11个文件以rpm包为主附带sh脚本、conf配置及chkconfig服务文件等总大小约334MB结构清晰便于按需取用。截至目前已有2994人学习下载适合需要在内网或离线环境中批量安装Oracle 11g或希望用脚本自动化解决部署难题的工程师参考。 如果你最近接到一个任务把原来跑在CentOS上的Oracle 11g数据库迁移到龙蜥Anolis OS服务器上你大概率做的第一件事是搜索“oracle11g安装包”。我在帮客户完成这套迁移时发现网上教程几乎都是针对CentOS/RedHat的老路子直接照搬到龙蜥上连依赖包那一关都过不去。原因不复杂龙蜥和RHEL确实是同一个生态但包仓库、安全策略、内核参数都有差异Oracle 11g这种十多年前的老软件在新系统上非常挑剔。这篇文章把我实测过的完整流程整理出来包括安装包怎么选、环境准备要做哪些、静默安装怎么填响应文件、装完以后哪些报错最常见以及对应的排查思路。无论你是刚接手这套老库的运维还是准备在龙蜥上做Oracle 11g的测试环境这篇都能帮你少走弯路。1. 为什么非要在龙蜥上装Oracle 11g以及哪个版本兼容性更好1.1 CentOS停更后谁是Oracle 11g的“新宿主”先说背景。很多企业的核心业务系统是多年以前搭建的数据库用的是Oracle 11g应用层代码也是围绕这个版本写的。数据库升级意味着应用要重新适配、数据要迁移、业务要停机验证成本和风险都不小。于是 CentOS 7 停止维护之后选择一个能继续提供长期更新、又跟RHEL系兼容的替代系统成了刚需龙蜥就是其中一个很热门的选择。这里我想强调一个容易被忽略的点龙蜥虽然和CentOS/RHEL同源但在安装Oracle 11g这件事上它并不等于“换个logo的CentOS”。实际遇到的坑集中在三个地方依赖包名称和可用性不完全一样比如compat-libstdc-33在龙蜥默认源里经常没有。Oracle 11g官方根本没有声明支持这么新的系统OUIOracle Universal Installer的系统版本检查会直接拦截。默认安全策略SELinux、firewalld比老系统更严格不处理就会出现各种诡异的连接失败。所以如果你把CentOS那套操作原封不动搬过来很容易卡在某个莫名奇妙的地方。但你只要理解了原因龙蜥装Oracle 11g是完全可行的生产环境也有大量案例验证过稳定性。1.2 Anolis 7还是Anolis 8选错版本后面全是坑安装之前首先要确定龙蜥的版本。Anolis OS目前主要分成两条线版本系列基础内核与RHEL对应关系Oracle 11g兼容难度Anolis OS 7.93.10内核RHEL 7.x中等需要伪装系统版本补依赖Anolis OS 8.x4.18/4.19内核RHEL 8.x很高动态链接库差异大不建议生产使用我的建议很明确生产环境如果必须装Oracle 11g优先选Anolis OS 7.9。别去追求新版本Oracle 11g R2发行于2009年官方支持的最高系统版本也就是RHEL 6在RHEL 7生态上本身就需要额外配置了到了8代系统上glibc和libstdc的版本变化足以让OUI彻底罢工即使强行装上后续跑起来也不放心。登录服务器后先确认一下系统版本和内核cat /etc/anolis-release uname -r如果输出里看到Anolis OS 7.9继续往下走就有戏。如果已经是8.x下面这套流程可以作为参考但遇到兼容性报错时要做好折腾的心理准备。2. 先别急着点下载安装包选型与介质准备2.1 两种主流的安装包形态搜索“oracle11g安装包”的时候你会发现网上流传的介质五花八门但真正靠谱的只有两种形态第一种是Oracle官方的zip包。这是最标准的方式文件名叫linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip两个包加起来大约2.1GB。下载后解压到同一个目录会得到一个database文件夹里面有runInstaller可执行文件。这两个zip包必须同时下载缺一个解压就会报错。强烈建议下载后校验文件完整性md5sum linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip第二种是RPM包或tar包。有些镜像站会把安装文件重新打包成单个文件看起来是省事了但Oracle 11g的安装不是简单解压就能用的它涉及oracle用户、oinstall组、ORACLE_HOME权限、响应文件配置等一系列东西。RPM包主要解决的是“把文件放到对应目录”这一步后面还是得手工配置反而容易漏步骤。我的建议是直接用官方zip包别贪图方便用来路不明的打包版。另外很多人会搜“离线依赖包”。这是因为目标服务器可能无法直接访问外网yum源。处理思路其实是用一台能联网的同版本龙蜥机器把依赖包提前缓存下来或者搭建本地yum仓库。具体做法我放在下一章环境准备里讲。2.2 桌面类安装和服务器类安装的区别网上热搜里经常出现“oracle11g桌面类安装”这是Oracle 11g安装程序里的一个选项。运行runInstaller进入图形界面后你会看到两种安装类型Desktop Class桌面类面向个人开发、测试环境安装过程简单系统会自动帮你设置ORACLE_BASE、ORACLE_HOME还会默认创建数据库实例。如果你只是想在本地跑个库选这个就行。Server Class服务器类面向生产服务器安装过程可定制程度更高可以只装数据库软件不建实例也可以单独配置ASM、RAC等高级选项。需要说明的是在静默安装silent mode里对应这个选项的参数是oracle.install.db.InstallEdition值可以填EE企业版、SE标准版等同时还有一个oracle.install.db.isCustomInstall参数控制是否自定义。如果你完全不想要图形界面又想省事建议明确选择服务器类并手工指定ORACLE_BASE和ORACLE_HOME这样后面维护时路径清晰不会踩到“桌面类装完不知道东西去哪里了”的坑。2.3 JDK版本这个坑很多人装不上是死在这里另外一个热搜词“jdk17安装包”也值得聊聊。很多人在装Oracle 11g之前会习惯性地先装个新版本JDK实际上完全没必要而且会添乱。Oracle 11g安装程序自带了所需的JRErunInstaller用的是它内部的那一套Java环境跟你系统装了什么JDK没有直接关系。如果你在服务器上已经把JAVA_HOME指向了JDK 17这类新版本启动runInstaller时反而可能报错因为新版JDK对旧的AWT/Swing组件兼容性不好图形界面可能打不开。如果你走静默安装模式这个问题倒是不明显但我依然建议你在执行安装前把JAVA_HOME暂时清掉或者明确指向安装包自带的jdk目录以免干扰。真实操作中我见过有人因为JDK问题反复重装OUI折腾了一整天才发现是新版JDK的锅。所以这里先打好预防针装Oracle 11g不需要你自己准备JDK。3. 环境准备阶段就能劝退一半人的依赖补齐与系统参数3.1 官方预安装包在龙蜥上不存在依赖要手搓在CentOS上装Oracle 11g很多人会偷懒用别人做好的oracle-database-preinstall或oracle-rdbms-server-11gR2-preinstallRPM包一条命令装完一堆依赖。但龙蜥默认仓库里没有这个包所以必须手动一条一条装依赖。依赖列表其实固定Oracle官方文档里写得很清楚。在Anolis OS 7.9上用这条命令把基础依赖全部装齐yum install -y binutils compat-libcap1 compat-libstdc-33 \ compat-libstdc-33.i686 elfutils-libelf-devel gcc gcc-c \ glibc glibc-devel glibc.i686 ksh libaio libaio-devel \ libaio.i686 libgcc libstdc libstdc-devel libstdc.i686 \ make sysstat unixODBC unixODBC-devel这里面比较容易出问题的是compat-libstdc-33。它在老CentOS 6/7的源里存在但龙蜥7的默认源里可能没有装的时候会提示找不到包。解决办法有两个找一个RHEL 7或CentOS 7的兼容源把对应的compat-libstdc-33-3.3.4.4.el7.x86_64.rpm下载下来用rpm -ivh本地安装。如果你用的是离线环境就在能联网的同版本机器上先yum install --downloadonly把RPM包缓存出来再拷贝过去。这个包非常关键Oracle 11g的OUI和数据库运行时某些组件依赖老版本的C标准库缺了它会在链接阶段报各种看不太懂的错。3.2 内核参数、用户与资源限制一次配到位环境准备的第二个大头是内核参数和操作系统用户。这块建议老老实实照着Oracle官方安装文档的标准来不要自行发挥。需要创建的组和用户groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle passwd oracle然后编辑/etc/sysctl.conf追加以下内容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 fs.aio-max-nr 1048576 net.ipv4.ip_local_port_range 9000 65500执行sysctl -p让参数生效。这里重点说下kernel.shmmax它表示单个共享内存段允许的最大字节数。Oracle的SGA会尝试分配共享内存如果这个值小于SGA需求就会出现经典的ORA-27102: out of memory报错。我给的4398046511104对应4TB基本属于“给得足够多但不会影响系统其他程序”的保守值。生产环境可以根据物理内存大小调整但不要小于SGA目标值。接着编辑/etc/security/limits.conf添加oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768很多人装完数据库sqlplus一启动就报ODaniel: error while loading shared libraries或者进程一多就报资源不够大概率就是limits.conf没配置。这里我的建议是nofile文件句柄数给到65536是下限如果并发连接多可以再往上调。3.3 骗过OUI的系统版本检查和SELinux/防火墙环境准备阶段最后一个大坑是Oracle 11g的OUI会检查操作系统版本。它最高只认到RHEL 6在龙蜥7上一检查就会红叉直接不让你继续安装。最简单的处理办法是临时修改/etc/redhat-releasecp /etc/redhat-release /etc/redhat-release.bak echo Red Hat Enterprise Linux Server release 7.9 (Maipo) /etc/redhat-release安装完成后记得改回来。这个操作的本质是让OUI的prereq checker误以为自己在RHEL 7上运行从而跳过系统版本硬校验。注意装完数据库后不还原这个文件会导致系统更新工具行为异常因为很多yum插件和软件包会读取它判断系统版本。我曾经见过有人装完库忘了恢复结果后来装别的软件时老是被误导排查半天才想起来这茬。然后关闭SELinux和防火墙setenforce 0 sed -i s/^SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config systemctl stop firewalld systemctl disable firewalldSELinux对Oracle 11g的影响非常直接监听进程没法绑定端口或者客户端连接后马上被断开。虽然通过配置SELinux策略也能让Oracle正常工作但投入产出比太低生产环境图省心就关掉。防火墙同理如果公司安全要求不能关那就只放行1521端口。最后还有个经常被忽略的环节/etc/hosts主机名解析。确保hostname -i返回的不是127.0.0.1echo 192.168.1.100 anolis-db /etc/hosts hostname anolis-db这一步影响的是监听器注册和数据库实例的本地连接很多“明明装好了却连不上”的案例最后都定位到hosts配置上。4. 静默安装链路响应文件、runInstaller和数据库创建不分开讲4.1 db_install.rsp里哪些参数决定成败在真实的服务器部署场景我通常不会耗在图形界面里而是用静默安装模式。这要求先准备好响应文件。Oracle zip包解压后响应文件模板在database/response/db_install.rsp。关键参数如下oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/opt/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_GROUPdba oracle.install.db.DBSNMP_PASSWORDYourPassword DECLINE_SECURITY_UPDATEStrue有几个参数要特别说明oracle.install.optionINSTALL_DB_SWONLY表示只装数据库软件不建实例。我习惯把建实例的动作留到后面用dbca单独做这样职责清晰也方便在安装失败时定位问题。INVENTORY_LOCATION是Oracle安装清单目录建议放在独立位置/opt/oracle/oraInventory不要放在/u01/app/oracle里面否则卸载重装时容易残留权限问题。DECLINE_SECURITY_UPDATEStrue一定要写不然OUI会强制要求配置“My Oracle Support”账号不配置就卡在原地。DBSNMP_PASSWORD是Oracle的SNMP监控账号密码可以后续再改但这里必须先填一个符合复杂度要求的值避免OUI校验不通过。4.2 运行runInstaller时的细节与看日志的方法接下来切换成oracle用户执行安装su - oracle cd /data/install/database ./runInstaller -silent -responseFile /data/install/database/response/db_install.rsp执行后终端会打印安装进度。如果中途报错日志文件路径通常在这里/u01/app/oraInventory/logs/InstallActions-*.log重点看日志里INFO级别以上的错误信息定位到具体的检查项。比较常见的报错有路径权限错误例如OUI-10035: You have specified an invalid value for the Oracle Home。原因多半是ORACLE_HOME的父目录不是oracle用户所有或者oracle用户对该路径没有写权限。解决办法是先mkdir -p /u01/app/oracle然后chown -R oracle:oinstall /u01/app/oracle。系统版本检查失败这是没改/etc/redhat-release导致的回到上面第3.3节处理。依赖缺失OUI在预检查阶段会提示缺少某个rpm包根据提示回到yum命令补齐。静默安装跑完后安装程序会提示需要用root用户执行两个脚本/opt/oracle/oraInventory/orainstRoot.sh /u01/app/oracle/product/11.2.0/dbhome_1/root.sh这一步千万别跳过。orainstRoot.sh会修改oraInventory目录的属主和权限root.sh会设置/etc/oratab和数据库本地认证相关文件。漏掉这两个脚本后面的监听注册和开机自启都会出问题。4.3 netca、dbca与监听注册装完数据库软件后还需要配置监听器并创建实例su - oracle netca -silent -responsefile /data/install/database/response/netca.rsp dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl -sid orcl \ -sysPassword YourSysPass \ -systemPassword YourSystemPass \ -emConfiguration NONE \ -memoryPercentage 40 \ -datafileDestination /u01/app/oracle/oradatanetca会创建默认的LISTENER监听器并写入listener.ora。dbca会创建名为orcl的实例。这里要注意-sid orcl和-gdbname orcl必须保持一致否则后续连接时就会出现监听器不认识这个SID的问题。如果你希望监听器由tnsnames和客户端连接还需要确认listener.ora里SID_LIST的配置。默认情况下Oracle 11g的监听器会自动通过动态注册识别实例但前提是实例启动时能正常访问listener.ora中的端口和主机名。监听配好后执行lsnrctl status应该能看到类似Service orcl has 1 instance(s)的输出。5. 安装完成后的三座大山ORA-12505、ORA-27102与开机自启5.1 ORA-12505真凶不一定是监听没配好装完后用SQL Developer或者DataGrip连接数据库时最经典的一个报错是ORA-12505: TNS:listener does not currently know of SID chosen in connect descriptor翻译成大白话就是客户端跟服务器的1521端口已经建立了网络连接但监听器翻遍了手里的名单发现没有你填的那个SID。这事的排查链路很有代表性我建议按顺序来第一步用lsnrctl status看监听器是否正常、当前注册了哪些服务。如果输出里没有orcl这个服务说明数据库实例没有动态注册到监听器上。最常见的两个原因一是实例还没启动sqlplus / as sysdba然后startup二是实例启动的时候监听器也还没起来错失了动态注册机会。解决办法是在实例里执行alter system register;手动触发一次注册。第二步确认/etc/hosts里主机名解析正常。如果监听器启动时绑定的是localhost外部连接自然找不到SID。通常建议监听地址直接写服务器IP不要写主机名避免解析歧义。第三步如果客户端程序走的是tnsnames.ora检查连接描述符里的SERVICE_NAME和SID是否填对。SERVICE_NAME对应实例的全局数据库名SID对应实例名两者在单实例环境通常一致但有些工具默认写的连接串可能指向了不存在的SID。5.2 ORA-27102共享内存不足的边界在哪里另一个高频报错是ORA-27102: out of memory Linux-x86_64 Error: 28: No space left on device注意这里“No space left on device”跟磁盘满了没关系而是共享内存分配失败。出现这个报错重点检查两处kernel.shmmax是否小于SGA目标大小。如果你在dbca里把SGA设成了8GB但shmmax还是默认的几百MB分配肯定失败。理论上Oracle可以退而求其次使用多个共享内存段但11g对单个大段的依赖很明显所以直接把shmmax调大最省心。/dev/shm空间是否够大。Oracle在内存管理上会用hugetlb或者/dev/shm文件系统分配内存df -h /dev/shm看一下如果只有64MB这类默认值建议改到物理内存的一半以上。修改方法是在/etc/fstab中给/dev/shm加size参数并重新挂载。物理内存分配的大原则我一般建议这样总内存64GB的机器SGA给24GB-32GBPGA给8GB左右剩下的留给操作系统和文件缓存。小内存机器8GB以下就别硬撑了SGA给2GB-3GB就行否则系统自身会先OOM。5.3 用systemd接管Oracle服务的做法很多老教程让你在/etc/rc.local里写su - oracle -c dbstart来实现开机自启。这在龙蜥上虽然能用但不够干净rc.local本身在systemd生态里已经被边缘化了。我建议直接写一个systemd服务[Unit] DescriptionOracle Database 11g Afternetwork.target [Service] Typeforking Useroracle Groupoinstall Restartno ExecStart/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbstart /u01/app/oracle/product/11.2.0/dbhome_1 ExecStop/u01/app/oracle/product/11.2.0/dbhome_1/bin/dbshut /u01/app/oracle/product/11.2.0/dbhome_1 EnvironmentORACLE_HOME/u01/app/oracle/product/11.2.0/dbhome_1 [Install] WantedBymulti-user.target把这个文件保存为/etc/systemd/system/oracle.service然后systemctl daemon-reload systemctl enable oracle systemctl start oracle用systemd接管的好处是自然支持systemctl status oracle查看日志监控告警接入也方便。需要提醒的是dbstart和dbshut会读取/etc/oratab这个文件中每一行的最后一个字段决定是否允许自动启动。确认orcl:/u01/app/oracle/product/11.2.0/dbhome_1:Y里的N改成了Y否则dbstart不会启动数据库。最后再分享一个经验装完并验证无误后一定要把/etc/redhat-release恢复原样否则后续系统更新和yum安装软件时会被误导安装介质的zip包如果服务器空间紧张安装完就可以删了不影响运行。Oracle 11g毕竟是老软件能用但不代表什么事情都适合它如果业务允许还是要把“未来升级”提上日程至少要让这套环境具备可备份、可重建的能力。本文还有配套的精品资源点击获取