不能,RPM仅预配置系统环境并解压软件,不创建数据库实例、不生成/etc/oratab、不配置监听器、不设置环境变量,需手动完成用户创建、权限配置、响应文件编写、dbca静默建库及监听器启动等全部步骤。
Oracle 19c RPM包静默安装能直接用吗?不能,RPM只是预配置,不等于数据库就绪
oracle 19c 在 linux 上提供的 oracle-database-preinstall-19c 和 oracle-database-19c rpm 包,本质是「系统环境预设 + 软件解压」,不是一键装库。它跳过了图形界面和交互式响应文件生成,但没跳过用户创建、目录授权、内核参数校验、监听与实例初始化这些硬步骤。
常见错误现象:rpm -ivh oracle-database-19c-19.0.0.0.0-1.x86_64.rpm 成功后,sqlplus / as sysdba 报 ORA-01034: ORACLE not available;或者 dbca 启动失败,提示找不到 $ORACLE_HOME 下的 bin/dbca —— 实际上 RPM 安装后 dbca 是有的,但没配好环境、没建实例,自然跑不起来。
- 必须手动创建
oracle用户并加入oinstall和dba组 -
/etc/oratab不会自动生成,得手写或等runInstaller后期阶段才写入(但 RPM 模式不走 installer) - RPM 安装的
$ORACLE_HOME默认在/opt/oracle/product/19c/dbhome_1,但环境变量全靠你 export,.bash_profile不会自动更新
静默建库必须用 dbca -silent,但前提是你已配好响应文件且权限无误
很多人以为 RPM 装完就能 dbca -silent,结果卡在 ERROR: Invalid response file format 或 PRVG-11205 : User "oracle" does not exist in group "oinstall"。根本原因是:RPM 不生成响应文件,也不校验组成员关系是否实时生效(比如你刚 usermod -aG oinstall oracle,但当前 shell 还没重登)。
使用场景:适合已有标准化响应模板的运维流程,或 CI/CD 中固定拓扑部署。别拿它试错——一次失败,残留的 /opt/oracle/oradata 和 /opt/oracle/diag 很难干净清理。
- 响应文件最小必要字段:必须含
gdbname、sid、databaseConfigType(SI or RAC)、createAsContainerDatabase、templateName(如General_Purpose.dbc),路径类参数(datafileDestination、recoveryAreaDestination)要提前mkdir -p并chown oracle:oinstall -
templateName必须对应$ORACLE_HOME/assistants/dbca/templates/下真实存在的 .dbc 文件,拼错名会静默回退到交互模式(你以为卡住,其实是它在等你敲回车) - 执行前确认:当前 shell 是
oracle用户、ORACLE_HOME和ORACLE_SID已 export、ulimit -n≥ 65536、sysctl net.core.somaxconn≥ 65535
监听器 lsnrctl start 失败?大概率是 /etc/hosts 里没配 localhost 解析或 oracle 用户缺读权限
RPM 安装后 $ORACLE_HOME/network/admin/listener.ora 是空的或只有默认模板,lsnrctl start 会报 TNS-01106: Using listener name LISTENER and port 1521 然后停住不动,实际没起来。这不是端口被占,而是监听器找不到有效配置,或启动时读不到 listener.ora。
性能影响:监听器起不来,远程连接全部中断,本地 sqlplus / as sysdba 却仍可用(走 bequeath 协议),容易误判为“数据库正常”。
- 检查
/etc/hosts是否含127.0.0.1 localhost,缺这行会导致监听器解析localhost失败,日志里出现TNS-12545: Connect failed because target host or object does not exist -
listener.ora至少要有三行:LISTENER = (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))),再加ADR_BASE_LISTENER = /opt/oracle -
$ORACLE_HOME/network/admin目录必须属主oracle:oinstall,且 oracle 用户对listener.ora有读权限;RPM 安装后有时权限是root:root,得手动改
静默安装后立刻验证 ORA-12514 怎么办?别急着重装,先看 service_name 是否注册成功
建库完成、监听起来,sqlplus system/oracle@localhost:1521/orcl 却报 ORA-12514: TNS:listener does not currently know of service requested in connect descriptor。这不是网络问题,是 PMON 没把实例 service_name 注册进监听器,典型表现是 lsnrctl status 输出里没有你的 SID 或 service_name。
容易踩的坑:以为 dbca -silent 建完库就万事大吉,其实 Oracle 默认启用动态注册(local_listener 参数为空时依赖主机名反向解析),而 RPM 部署常忽略 DNS 或 hosts 配置一致性。
- 登录
sqlplus / as sysdba后执行show parameter local_listener,若为空,手动执行alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))'; - 再执行
alter system register;强制 PMON 向监听器发送服务注册请求 - 等 30 秒后
lsnrctl status查看输出中是否出现你的SERVICE_NAME(注意不是 SID),没出现就说明local_listener地址不可达或监听器没 reload
最麻烦的点不在命令本身,而在所有路径、用户、hosts、内核参数、响应文件字段都得严格对齐——差一个字母、少一个 chown、多一个空格,静默过程就沉默到底,错误日志还分散在 $ORACLE_HOME/cfgtoollogs/dbca/、$ORACLE_BASE/diag/tnslsnr/、/var/log/oracle-rpm.log 三个地方。

















