ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

龙蜥Anolis OS上Oracle 11g安装包部署:依赖兼容与静默安装

2026/9/25 12:28:30 拓冰建站 浏览量
龙蜥Anolis OS上Oracle 11g安装包部署:依赖兼容与静默安装 简介面向龙蜥Anolis操作系统部署Oracle 11g数据库的完整安装包主要解决企业级环境下数据库安装步骤繁琐、依赖配置复杂以及数据恢复耗时等问题适合需要快速搭建Oracle环境的运维人员与DBA参考使用。压缩包共11个文件包含7个RPM包、chkconfig服务配置、S01shm_load共享内存加载脚本、install.sh安装脚本及conf配置文件整体体积334.17MB可直接用于自动化安装与系统环境调整。安装脚本覆盖环境变量设置、依赖处理、RPM包解压安装、数据库实例创建、监听器配置等环节大幅降低手动操作出错率同时支持通过IMPDP等方式还原dmp备份文件便于完成数据库迁移或恢复。已有3006人学习下载适合希望借助脚本化方式在龙蜥平台上标准化部署Oracle 11g并处理常见故障的技术人员。1. 龙蜥anolis系统oracle11g安装包为什么官方安装包在龙蜥上总要先“改造”才能跑接手过CentOS停服后迁移到龙蜥Anolis OS的朋友多半会撞上同一个尴尬系统换新了业务还想继续用Oracle 11g结果把从原环境备份下来的oracle11g安装包解压到龙蜥上runInstaller一启动就报缺库或者干脆闪退。这不是你下载的安装包损坏而是Oracle 11g从诞生到官方认证支持的Linux发行版范围都停留在十年前的RedHat 5/6/7那一代龙蜥8/9使用的内核与glibc版本比老库新太多安装包里的OUIOracle Universal Installer和后续的数据库link脚本并没有跟着新系统更新。但这不意味着没救恰恰相反只要把安装包选对、依赖补齐、安装方式从图形界面换成静默龙蜥上跑通11g是完全可以做到的。这篇文章要解决的就是四件事什么样的安装包能用在龙蜥上、系统环境需要预装什么、怎么让runInstaller顺利装完、装完以后哪些坑必须绕开。2. 先分清手上是哪种oracle11g安装包数据库、客户端还是补丁包2.1 安装包的类型与命名规律Oracle 11g R211.2.0.x的Linux x86-64安装包常见的有三大类别混用。第一类是数据库服务器安装包文件名通常含有“database”字样下载下来是两个zip压缩包linux.x64_11gR2_database_1of2.zip和linux.x64_11gR2_database_2of2.zip。这两个包必须都解压到同一个目录再安装第一包内含runInstaller可执行文件、OUI组件和response模板第二包内含大量预编译的库和数据库模板。第二类是客户端安装包文件名带“client”用于给应用服务器提供sqlplus、exp/imp等工具它不需要起实例体积也小得多。第三类是补丁包通常以p数字命名例如某个PSU补丁用于在数据库安装完成后修复Bug。如果你在龙蜥上只是想让应用能连上远程的Oracle数据库装客户端包就够了如果需要自己在龙蜥上建库那么“database”两个zip必须齐整。有一个容易被忽略的判断安装包的平台标识。Oracle 11g的Linux包分32位和64位龙蜥目前服务器环境几乎全是x86_64所以应当选择“linux x64”而不是“linux x86”的版本。一旦拿错runInstaller会在检查阶段直接拒装那个报错看起来像权限问题实际是架构不匹配。2.2 下载安装包时值得先做的两件事从Oracle官方渠道获取安装包一般是登录Oracle Software Delivery Cloudedelivery搜索“Oracle Database 11g Release 2”选择Linux x86-64后下载也可以去Oracle技术网的Archive页面找历史版本。这两个渠道都需要Oracle账号没有就注册一个属于正规流程。真正要注意的是下载后的完整性校验。大zip文件在传输过程中经常损坏而OUI对解压后文件的完整性很敏感缺一个字节都可能在安装到中途时报错。# 对两个zip做SHA1校验和Oracle官网给出的哈希值对比 sha1sum linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip # 如果网站给的是SHA256改用 sha256sum linux.x64_11gR2_database_1of2.zip linux.x64_11gR2_database_2of2.zip这段命令的逻辑是先计算本机文件的指纹再和官网页面显示的指纹比对。如果一致说明zip没坏如果不一致重新下载。之前遇到过一次奇怪问题两个zip都显示校验通过解压后runInstaller却启动不了最后排查发现是zip文件权限被改成了非root可读解压时某些文件带了错误权限位。所以我一般在解压后还会做一次find检查unzip linux.x64_11gR2_database_1of2.zip -d /data/install unzip linux.x64_11gR2_database_2of2.zip -d /data/install find /data/install -name *.sh -o -name runInstaller | xargs ls -l参数说明-d指定解压目录两个包解到同一个目录后OUI会自动合并文件树。find只筛出可执行脚本看它们是否带x权限位。如果runInstaller没有执行权限直接chmod x补上不要用root跑整个安装流程。2.3 安装包和龙蜥版本的兼容基线龙蜥Anolis OS有7、8、9几个大版本。Oracle 11g官方认证的Linux是RedHat 5/6/7但实际从业人员普遍在RHEL 8兼容层上跑11gAnolis 8与RHEL 8保持用户态兼容所以我们的经验在龙蜥8上同样适用。Anolis 7因为glibc是2.17和RHEL 7一致安装过程中的坑少一些Anolis 8的glibc版本是2.28需要手工补两个兼容库Anolis 9的glibc更接近2.34补起来更费劲不推荐在生产环境直接硬上除非你有足够时间打补丁。安装前先确认版本这是决定后面所有步骤的基础cat /etc/os-release uname -r ldd --version | head -n 1# 输出示例不同机器有差异 NAMEAnolis OS VERSION8.8 kernel: 5.10.134-16.1.an8.x86_64 ldd (GNU libc) 2.28说明/etc/os-release决定你是哪个大版本uname -r看内核龙蜥8的内核虽然带“an8”标识但通常不会成为安装Oracle的门槛ldd版本直接决定你缺哪些老符号。判断逻辑很简单glibc版本越新Oracle 11g安装包里自带的库就越容易冲突因为你用的系统库版本和Oracle预编译时的库版本对不上。2.4 安装包里的几个关键文件解压后的database目录结构值得先看清楚再动手。database/runInstaller是安装入口database/stage/fixup目录存放OUI的修复脚本database/response目录里放着db_install.rsp、dbca.rsp等应答文件这些是静默安装的核心database/install目录则是OUI自己的运行环境。很多人一上来就双击runInstaller忽略了response目录结果图形界面卡死以后完全没退路。正确做法是先cd到database目录下执行./runInstaller -help确认当前安装包支持哪些参数再决定是图形装还是静默装。这里额外提醒一点安装包解压路径不要有空格和中文OUI的老脚本对特殊字符的容错极差放到/root或/home目录下都可能因为父目录权限问题中断。我习惯建立独立的目录/data/install并保证oracle用户有读权限。3. 龙蜥系统预改造让oracle11g安装包的依赖库、用户权限和内核参数全部对齐3.1 把OUI要用的共享库一次性装齐Oracle 11g安装包在link阶段会调用大量的系统共享库龙蜥8默认安装并不包含这些。最常见的缺失库有libaio、libnsl、libncurses、libXtst、libXp等。这里用dnf直接装dnf install -y libaio libaio-devel libnsl2 libnsl2-devel \ libncurses5 libncurses5-devel libXtst libXp libXrender \ compat-libcap1 compat-libstdc-33 elfutils-libelf-devel \ gcc gcc-c make binutils unzip命令逻辑说明libaio是Oracle数据库的异步IO基础不装会直接导致数据库无法启动libnsl2是龙蜥8提供的兼容库它同时包含libnsl.so.2而Oracle 11g要的是libnsl.so.1所以装完还要做符号链接libncurses5提供老版curses接口OUI和sqlplus的界面都依赖它compat-libcap1和compat-libstdc-33是为了让老版本Oracle编译的二进制能找到旧运行库gcc/glibc-devel在安装包link阶段必须存在即使你不编译任何代码。“libncurses5”这个包在龙蜥8的AppStream里不一定有如果dnf报错找不到包可以装ncurses-compat-libsdnf install -y ncurses-compat-libs ls -l /usr/lib64/libtinfo.so* /usr/lib64/libncurses.so*这条命令的逻辑是先装compat包再检查是否生成了老版本符号链接。Oracle 11g的sqlplus和OUI会请求libncurses.so.5而ncurses-compat-libs恰好提供这个名称。装完以后再检查libnsl的链接情况# 如果libnsl.so.1不存在手动建立软链接 ln -s /usr/lib64/libnsl.so.2 /usr/lib64/libnsl.so.1注意这个软链接操作适用于glibc 2.28的龙蜥8在Anolis 8的更新版本里libnsl2包安装后可能已经把libnsl.so.1放在/usr/lib64/libnsl.so.1那就跳过软链。判断方式很简单先ls存在就不用ln。3.2 用ldd验证安装包里的二进制是否缺符号装完依赖库后不要急着跑OUI先拿安装包里的oracle二进制做一次ldd检查。安装包虽然还没正式安装但database/stage/ext/bin目录下的部分二进制可以用。或者更直接的办法在装完数据库后立即对$ORACLE_HOME/bin/oracle执行ldd但那种检查只能事后发现。我一般会在解压目录里找类似elf文件先做一个快速检查find /data/install/database -name oracle -type f -exec ldd {} \; 2/dev/null | grep not found输出如果为空说明依赖库基本齐了如果有“not found”行按缺失的库名回到dnf搜索安装即可。注意这个find命令可能搜不到oracle二进制因为安装包里的主程序要等link阶段才生成。更实用的验证方式是在正式安装前跑OUI的prereq检查cd /data/install/database ./runInstaller -prereqchecker -silent -responseFile /data/install/database/response/db_install.rsp这个命令会走一遍安装前的环境检查把缺的包、内核参数、用户组权限一次性列出来。虽然龙蜥不在官方支持列表里prereqchecker会报“操作系统版本不满足”但你可以从输出里区分哪些是致命错误、哪些只是警告。致命错误一般是缺包或权限问题警告可以忽略。3.3 创建oracle用户和目录结构Oracle安装不允许用root直接跑必须建立专用账户。以下是我在龙蜥8上常用的创建步骤groupadd oinstall groupadd dba useradd -g oinstall -G dba -s /bin/bash oracle mkdir -p /u01/app/oracle chown -R oracle:oinstall /u01/app chmod -R 775 /u01/app这段命令的逻辑是先把oinstall作为软件安装主组dba作为管理组oracle用户同时属于两个组。目录规划上/u01/app是Oracle Base的上级后续ORACLE_BASE指向/u01/app/oracleORACLE_HOME则指向其下的product/11.2.0/dbhome_1。目录权限必须oracle可写否则OUI在安装中途会报“Permission denied”并回滚那种回滚非常费时。3.4 内核参数共享内存、信号量和文件句柄Oracle 11g对SysV共享内存有硬性要求龙蜥8默认配置通常达不到数据库安装的最低标准。编辑/etc/sysctl.conf追加以下内容fs.file-max 6815744 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 fs.aio-max-nr 1048576然后执行sysctl -p使其生效。参数含义kernel.shmmax控制单个共享内存段的最大字节数4TB是对64位系统的常见保守设置kernel.shmall控制在不上调swap的情况下系统可用的共享页总数kernel.sem四个值分别表示信号量集合最大数、系统最大信号量数、每个集合的唤醒数、信号量集合最大数量。如果设置过低dbca建库时大概率报ORA-27102“out of memory”。再改资源限制编辑/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用户能打开足够多的文件句柄并拥有足够的线程数。不使用ulimit也可以但Oracle的sqlplus和监听进程在并发高时会突然报“Cant connect to server”一类问题事后排查容易绕弯不如一开始就设好。3.5 关闭SELinux与防火墙实验环境建议生产环境如果安全策略强制开启SELinuxOracle 11g的很多文件操作会被拦截最常见的现象是oracle用户明明有权限数据库实例却起不来检查/var/log/audit/audit.log會看到一堆avc denied。实验环境我建议直接关闭setenforce 0 sed -i s/^SELINUX.*/SELINUXpermissive/ /etc/selinux/config systemctl stop firewalld systemctl disable firewalld这里setenforce 0只临时生效重启后回到配置状态所以要用sed把/etc/selinux/config改成permissive或disabled。注意如果生产环境只能permissive那也可以跑但要把和Oracle相关的路径加入白名单工作量不小。开放给应用访问时还需要放行1521端口既然防火墙已经关了本机测试阶段就不用单独处理真正上线时再按网络策略配置。3.6 给oracle用户配置环境变量用oracle用户登录后编辑.bash_profile写死一套环境变量避免每次都要手输。这是安装成功与否的关键一环因为很多安装中断其实是HOME路径不对导致的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:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.ZHS16GBK说明ORACLE_SID建库时会用到先写成计划中的实例名LD_LIBRARY_PATH填补Oracle链接时找不到老库的坑NLS_LANG控制字符集显示如果应用端是GBK这里别设UTF8否则查出来乱码。4. 动手安装用response文件和runInstaller把oracle11g安装包装进龙蜥4.1 为什么我不用OUI图形界面龙蜥8服务器普遍没有桌面环境即使装了X Window通过SSH转发DISPLAY也容易因为延迟或字体缺失导致乱码界面按钮点不动安装到一半卡死。Oracle 11g的OUI从设计之初就没有把中文字体考虑进去龙蜥上最有名的一个坑是OUI弹出“正在检查操作系统版本”对话框后直接消失日志里只有一行“libXext.so.6 not found”。这些都指向一个问题图形安装太脆弱。静默安装虽然看起来不直观但只要你把response文件写对它至少能稳定跑完错误也会明确写到日志里。对需要批量部署的工程师来说静默安装也是唯一能复用的方案。response文件是Oracle安装包的官方接口安装包里已经提供了模板。database/response/db_install.rsp就是给数据库服务器安装用的复制一份再改参数比从零创建要可靠得多cp /data/install/database/response/db_install.rsp /tmp/db_install_orcl.rsp chown oracle:oinstall /tmp/db_install_orcl.rsp编辑/tmp/db_install_orcl.rsp重点改这些字段以下是核心片段省略掉不需要动的注释内容oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen 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 DECLINE_SECURITY_UPDATEStrue参数说明INSTALL_DB_SWONLY表示只安装数据库软件不建库建库留给dbcaINVENTORY_LOCATION是OUI记录安装清单的目录未来卸载工具deinstall要读它SELECTED_LANGUAGES至少保留en再需要中文就加zh_CN但语言列表越短OUI越不容易在字体上出问题InstallEditionEE是企业版如果你只有标准版许可就写SEDECLINE_SECURITY_UPDATES必须为true否则OUI会在默认没有配置Oracle账号的情况下要求联网收更新导致安装卡在最后一步。4.2 用runInstaller执行静默安装接下来进入安装阶段。用oracle用户执行不要切root。命令如下su - oracle cd /data/install/database ./runInstaller -silent -ignorePrereq -force \ -responseFile /tmp/db_install_orcl.rsp安装过程会在终端滚动大量日志最终停在一个提示上告诉你需要另开一个root终端执行两个脚本/u01/app/oraInventory/orainstRoot.sh和/u01/app/oracle/product/11.2.0/dbhome_1/root.sh。注意这时候安装进程其实还没结束必须先执行两个root脚本再回到当前终端按回车确认安装才会收尾。这条命令里-ignorePrereq的含义是跳过操作系统版本检查因为龙蜥不在Oracle官方认证的发行版列表里不加这个参数就会在检查阶段直接退出-force则是让OUI忽略一些非致命警告比如包版本不匹配。这两个参数就是龙蜥安装能不能继续的关键但也要明白它们是双刃剑如果真缺了核心依赖跳过检查后会在link阶段爆出来所以之前3.1节里dnf装包那一顿不能省。两个root脚本执行逻辑sudo /u01/app/oraInventory/orainstRoot.sh sudo /u01/app/oracle/product/11.2.0/dbhome_1/root.shorainstRoot.sh改动oraInventory目录的属主和权限root.sh则会更新/etc/oratab并设置本地bin链接。root.sh执行过程中会问你是否把oracle目录加入本地bin默认“n”跳过就行不会影响数据库运行。4.3 配置监听netca静默创建listener数据库软件装完后下一步是监听。用netca的静默模式一条命令建出默认监听器$ORACLE_HOME/bin/netca -silent \ -responseFile $ORACLE_HOME/network/response/netca.rsp这条命令会读取自带的netca响应模板在$ORACLE_HOME/network/admin下生成listener.ora和sqlnet.ora。默认监听端口是1521协议TCP主机名取机器自己的hostname。这里有个坑龙茜安装的主机名如果带横线或点listener.ora里的主机名解析可能失败表现为lsnrctl start成功但远程连接时用主机名连不上。遇到这种情况直接改listener.ora里的HOST为127.0.0.1或者服务器静态IP再重启监听即可。监听启动验证lsnrctl start lsnrctl statusstatus输出中看到“Service registered”代表监听已接管实例服务。如果还没有建库status只显示监听器自身状态不显示Service这没问题。4.4 建库dbca静默建出第一个实例监听就绪后用dbca建库。dbca的静默参数比netca多但核心就是以下一段$ORACLE_HOME/bin/dbca -silent \ -createDatabase \ -templateName General_Purpose.dbc \ -gdbname orcl \ -sid orcl \ -sysPassword Oracle123 \ -systemPassword Oracle123 \ -datafileDestination /u01/app/oracle/oradata \ -recoveryAreaDestination /u01/app/oracle/flash_recovery_area \ -characterset ZHS16GBK \ -nationalCharacterSet AL16UTF16 \ -memoryPercentage 40 \ -emConfiguration NONE \ -redoLogFileSize 100参数说明模板General_Purpose.dbc是通用业务库模板sysPassword和systemPassword必须满足Oracle密码复杂度至少8位含数字字母否则dbca会拒绝characterset选ZHS16GBK对应绝大多数中文业务emConfiguration NONE关闭Enterprise Manager龙蜥上跑EM会额外占资源还容易报错memoryPercentage给数据库分配物理内存的40%具体比例按你的内存大小调整内存只有8G的机器可以降到30。dbca执行时间通常在10到20分钟期间日志写在$ORACLE_BASE/cfgtoollogs/dbca/orcl。看到“Database creation complete”表示成功。此时马上做一个最小验证sqlplus / as sysdba SQL select name, open_mode from v$database;能查出一行记录说明实例已经open。再试监听lsnrctl services如果看到“orcl”服务说明监听已经自动注册了实例整个安装链路宣告打通。4.5 安装完成后立刻要做的收尾检查第一件事检查oracle用户的环境变量是否和生产需求一致尤其是ORACLE_HOME路径。第二件事把数据库设置为开机自启。Oracle 11g自带的dbstart依赖/etc/oratab文件root.sh执行时会在该文件写入一行“orcl:/u01/app/oracle/product/11.2.0/dbhome_1:N”。把最后的N改成Y然后编辑/etc/rc.d/rc.local加入启动命令。这是老派的启动方式如果你的环境有systemd更推荐后文第6章的service文件方式。第三件事查看$ORACLE_BASE/diag/rdbms/orcl/orcl/trace/alert_orcl.log确认没有“ORA-”开头的异常记录。5. 龙蜥上oracle11g安装包最容易翻车的6个现场现象、原因、处理5.1 runInstaller启动即退报“libnsl.so.1: cannot open shared object file”现象在龙茜8上执行./runInstaller终端没有任何输出就回到提示符检查安装日志/tmp/oraInstall*.log发现OUI启动阶段加载libnsl失败。原因龙茜8的glibc默认提供libnsl.so.2没有.so.1版本的符号Oracle 11g的OUI是多年前编译的动态链接写死在libnsl.so.1上。解决执行第3章的软链命令先确认libnsl2已安装然后ln -s生成libnsl.so.1。这步做完再跑runInstallerOUI就能正常起来。需要注意软链对libncurses同样适用如果报的是libncurses.so.5先把ncurses-compat-libs装好再做软链。5.2 静默安装进度到80%时报“Error in invoking target libclntsh.so of makefile”现象runInstaller的静默日志里出现“ins_rdbms.mk”相关错误提示无法链接libclntsh.so安装过程中止。原因常见两种情况。一是ORACLE_HOME路径没有写权限oracle用户实际无法在该目录下创建临时文件二是缺了gcc或libaio-devel导致make过程中依赖的头文件找不到。解决先检查目录属主ls -ld $ORACLE_HOME确认是oracle:oinstall再执行dnf install -y gcc gcc-c libaio-devel之后不要直接重跑runInstaller先清理重新安装要么删除整个ORACLE_HOME目录后再次执行runInstaller要么使用OUI的“重跑修复”选项。最保险的做法是把相关makefile里的报错行去搜索引擎搜一下确认具体缺的符号再针对性补包不要盲目重来。5.3 建库阶段dbca报ORA-12547: TNS lost contact现象dbca执行到“Creating and starting Oracle instance”时日志里写ORA-12547实例进程启动后立刻断联。原因一半是缺了libaio一半是oracle二进制权限不对。Oracle的oracle进程在启动时会进行异步IO初始化如果libaio没装或者版本过老进程直接abort。另外bin/oracle文件的权限必须是6751即“-rwsr-s--x”否则sqlplus连上来也会触发同样的错。解决保持libaio和libaio-devel已安装然后执行chmod 6751 $ORACLE_HOME/bin/oracle。如果之前是从旧系统直接拷贝安装包而不是解压安装权限位极容易丢失这条命令对拷贝安装特别重要。改完权限再重启数据库srvctl stop database -d orcl如果你配了集群或直接用sqlplus执行shutdown immediate再startup。5.4 远程连接正常但本地sqlplus慢且卡死在“SQL*Plus: Release”现象sqlplus登录后要等10秒以上才出现SQL提示符监听日志里全是“WARNING: inbound connection timed out”这类字样。原因通常和DNS反解析有关。Oracle在取得客户端连接后会做一次主机名解析回调龙茜8如果配了残废的/etc/hosts内容解析会超时。解决把/etc/hosts的hostname行补全格式要包含本机IP和完整主机名。例如“192.168.1.10 db-server db-server.localdomain”。另外在$ORACLE_HOME/network/admin/sqlnet.ora里加上一句SQLNET.INBOUND_CONNECT_TIMEOUT10这会让监听在10秒内放弃无效连接避免被恶意或错误的客户端拖死。5.5 OUI图形界面中文乱码字体全是方块现象用X11转发跑runInstaller界面能打开但文字全乱码点按钮时还容易错位。原因龙茜8的默认字体库里没有Oracle OUI需要的中文字体而且OUI用的AWT组件对字体名匹配严格要求。解决一套有效的做法是给系统装中文字体和字体配置文件dnf install -y fontconfig dejavu-sans-fonts wqy-zenhei-fonts fc-cache -fv如果你不追求中文界面更省事的方案是在执行runInstaller前把LANG设为英文export LANGen_US.UTF-8这样绕开字体问题OUI的英文界面在龙茜下呈现没有问题。这个选英文界面的操作对静默安装其实也一样重要——response文件里的语言列表只写en能避免OUI在后续link阶段执着于加载中文语言包。5.6 数据库启动时告警日志疯狂刷“ORA-27102: out of memory”现象执行startup后实例无法openalert日志里ORA-27102后面跟着“Linux-x86_64 Error: 12: Cannot allocate memory”。原因和内核参数有关。Oracle在启动时按SGA目标申请共享内存如果kernel.shmall设置不对即使物理内存充足系统也会拒绝分配这么大的共享段。解决看第3.4节里的kernel.shmall按1073741824设置它代表共享内存页最大数乘以默认页大小4KB是4TB。改成这个值后执行sysctl -p再重启数据库。这个坑在低版本内核上一踩一个准龙茜内核通常没这个问题但你如果把旧环境的内核参数直接带过来数值小了就会中招。6. 把一次成功的安装包部署变成可复用的“后悔药”装完一个实例只是开始生产环境还会面临扩容、补丁、卸载重装。要做到这一步我建议在第一次安装成功后马上做三件事。第一件把这次所有操作固化成一个脚本至少包含三部分dnf依赖安装列表、sysctl/limits配置、自定义的response文件。这样下一次在同版本龙茜上装Oracle时不用再对着日志猜缺什么。第二件使用Oracle自带的deinstall工具验证卸载流程。在ORACLE_HOME目录下执行$ORACLE_HOME/bin/deinstall -silent \ -checkonly \ -configFile /u01/app/oraInventory/oraInst.loc如果checkonly能顺利列出所有配置信息说明安装结构完整可运维如果它都找不全文件那说明你之前手动改坏了目录结构。第三件为数据库实例写一个systemd service替代老旧的rc.local自启。在/etc/systemd/system/oracle-orcl.service里写[Unit] DescriptionOracle 11g instance for orcl Afternetwork.target [Service] Useroracle Groupoinstall Typeforking 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 RemainAfterExityes [Install] WantedBymulti-user.target配置说明dbstart/dbshut都是Oracle自带脚本但前提是/etc/oratab里那行“orcl:...:Y”最后的Y已经改好否则dbstart不会启动该实例。启用服务用systemctl enable --now oracle-orcl。这里要提醒dbstart会按oratab里的base和home路径启动所有标记Y的实例如果你一台机器上有多个实例要小心它一起带起来。说到验证我一直认为“重启一遍后还能连上”才是真装好了。切到重启后的龙茜系统先观察监听再sqlplus登录跑一个简单查询确认数据库没有依赖你手动启动的进程。常备一台同样版本龙茜的测试机做对照因为Oracle 11g在龙茜上的行为往往会受防火墙、SELinux和内核参数细微差异的影响出现“这台能跑那台不能跑”的情况别急着怀疑安装包先比对系统和依赖版本。写完这些后我每次在新环境重新部署时还是会重新检查一遍ldd的输出和oratab的权限位踩过的坑再多不如保留一份自己的检查清单。这个方案最大的价值不是让你一次跑通而是让你在遇到翻车时能快速定位问题到底出在安装包、系统库还是配置脚本上。希望这份流程对你的龙茜迁移项目有帮助也希望你能早点把这条路的坑都摸清后续的维护工作自然就顺了。本文还有配套的精品资源点击获取