1. 项目概述为什么选择RPM安装Oracle 19c在数据库运维和DBA的日常工作中Oracle数据库的安装部署一直是个既基础又考验细节的活儿。尤其是到了19c这个长期支持版本其稳定性和新特性让很多企业选择升级或新建。面对安装大家通常有几个选择使用官方的runInstaller图形化界面、静默安装脚本或者直接操作RPM包。今天我想重点聊聊最后一种——基于RPM包的Oracle 19c安装方案。你可能在搜索“oracle19c安装教程”时看到的大多是图形化或响应文件静默安装的指南。而“没找到rpm命令”这样的搜索词恰恰说明很多朋友对Linux下RPM包管理器的操作还不熟悉更别提用它来安装Oracle了。实际上对于追求标准化、自动化部署的环境尤其是在使用Red Hat、CentOS、Oracle Linux这类发行版时RPM安装方式有着独特的优势。它把复杂的依赖检查、目录创建、用户组配置等步骤打包成了标准的安装动作能让安装过程更可控、更可重复也更容易集成到像Ansible、SaltStack这样的自动化运维工具链里。这不仅仅是“安装一个软件”而是构建一个标准化数据库服务器镜像的起点。2. 核心思路与方案选型RPM vs 传统安装在深入动手之前我们得先搞清楚用RPM包安装和用Oracle Universal Installer (OUI) 安装到底有什么本质区别这决定了我们后续所有操作的逻辑。2.1 两种安装路径的深度对比传统的OUI安装无论是图形化还是静默是一个“自包含”的配置过程。安装程序会引导你一步步设置环境变量、创建目录、配置内核参数并在最后调用root.sh脚本完成一系列特权操作。这个过程灵活但变量多容易因环境差异导致安装结果不一致。而RPM安装则是一种“系统化”的接管。RPMRed Hat Package Manager本身是Linux系统管理软件包的标准工具它维护着一个数据库记录每个软件包的安装文件、版本、依赖关系。用RPM安装Oracle相当于告诉操作系统“请把这个数据库软件作为一个标准的系统软件包来管理。” 这意味着依赖关系自动处理RPM会在安装前检查系统是否满足所有前提条件如特定的binutils、gcc版本。如果缺少依赖安装会失败并给出明确提示这比OUI安装中途报错更直观。文件路径标准化RPM包定义了所有文件应该被安装到的精确位置通常遵循Linux的FHS标准。这减少了因ORACLE_HOME等路径设置错误引发的问题。服务集成更规范通过RPM安装后通常能更规范地集成到systemd或init.d服务管理体系中启停管理更符合系统管理员习惯。卸载与升级清晰使用rpm -e可以相对干净地卸载升级回退也更有依据。但是RPM安装并非全能。它通常对应着Oracle的“预配置”安装模式一些高级的、定制化极强的安装选项比如选择特定组件可能不如OUI灵活。它更适合于部署标准化的、单实例数据库环境。2.2 为什么此刻选择RPM方案结合当前的搜索趋势像“docker安装”、“ansible安装教程”这类词热度很高这说明运维自动化和环境标准化是主流方向。RPM安装方式天生与此契合。此外对于很多从“mysql安装教程”转向Oracle的开发者或者习惯了“yum install”这种包管理方式的系统管理员RPM提供了一种认知负担更低的入门方式。它把Oracle数据库这个“庞然大物”的安装封装成了一个更接近普通Linux软件的操作降低了初学者的心理门槛和技术卡点。3. 前期准备不可忽视的系统与环境搭建无论哪种安装方式扎实的前期准备都是成功的一半。对于RPM安装由于其自动化程度高一旦基础环境有问题报错可能更令人困惑。因此我们必须把地基打牢。3.1 系统与资源核查首先确认你的系统是RPM系发行版如Oracle Linux 7/8、RHEL 7/8、CentOS 7/8。对于19c官方推荐使用Oracle Linux 7.6以上或8.0以上版本以获得最佳兼容性。内存与交换空间检查这是最容易出问题的地方。Oracle 19c对内存有最低要求。通过free -g和free -m命令查看。一个经验法则是物理内存RAM至少4GB推荐8GB以上交换空间Swap大小通常建议为物理内存的1到2倍但当物理内存超过16GB时交换空间在16GB到32GB之间通常也足够了。可以使用dd命令或fallocate命令临时增加交换文件但这只是临时方案生产环境应在分区时规划好。磁盘空间规划你需要为软件本身和数据库文件准备足够的空间。Oracle 19c数据库软件安装大约需要7GB左右的/u01目录空间这是默认的ORACLE_BASE路径。此外/tmp目录至少需要1GB空间。务必使用df -h命令仔细检查。3.2 依赖包与内核参数调优RPM包管理器会自动解决软件包依赖但一些系统级的库和工具仍需先行安装。这里有一个基础包列表你可以通过yum groupinstall或逐一yum install来完成yum install -y bc binutils compat-libcap1 compat-libstdc-33 gcc gcc-c glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc libstdc-devel libxcb make nfs-utils net-tools smartmontools sysstat注意不同的小版本操作系统如OL7.9和OL8.4所需的精确包版本可能有细微差别。最稳妥的方法是在Oracle官方文档中找到对应你OS版本的“Preinstallation Requirements”章节核对列表。盲目安装所有包有时会引起冲突。内核参数调整是Oracle安装的必修课。编辑/etc/sysctl.conf文件添加或修改以下参数。这些参数主要影响共享内存、信号量、网络和文件句柄是数据库稳定运行的基础。fs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 1073741824 # 内存页总数单位是页通常4KB 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修改后执行sysctl -p使其立即生效。这里有个关键点kernel.shmmax的值设置。很多教程会设为一个固定值比如一半内存。我的经验是如果服务器物理内存很大比如超过64GB直接将其设置为物理内存大小以字节为单位是可以的但更常见的做法是设置为一个略大于SGA预期大小的值即可不必追求极大。你可以用这个公式快速计算字节数物理内存(GB) * 1024 * 1024 * 1024。3.3 用户、目录与环境变量配置创建必要的用户和组groupadd -g 54321 oinstall groupadd -g 54322 dba groupadd -g 54323 oper useradd -u 54321 -g oinstall -G dba,oper oracle echo “your_password” | passwd --stdin oracle创建Oracle基础目录并授权。RPM安装通常期望一个标准的目录结构mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1 mkdir -p /u01/app/oracle/oraInventory mkdir -p /u01/app/oracle/oradata mkdir -p /u01/app/oracle/fast_recovery_area chown -R oracle:oinstall /u01 chmod -R 775 /u01为oracle用户配置环境变量。编辑/home/oracle/.bash_profile在末尾添加export ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/product/19.3.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.AL32UTF8 # 设置字符集非常重要实操心得NLS_LANG这个环境变量极其重要却常被新手忽略。如果这里不设置或设置错误比如与服务端字符集不一致安装后可能出现中文乱码。在安装前就把它设好能避免后续一大堆麻烦。对于国内环境AL32UTF8是通用的Unicode字符集兼容性最好。4. RPM包获取、校验与安装实战一切准备就绪现在进入核心环节——处理RPM包本身。4.1 获取正确的RPM包你需要从Oracle官方技术网OTN或edelivery.oracle.com下载Oracle Database 19c的Linux RPM安装包。通常文件名类似于oracle-database-ee-19c-1.0-1.x86_64.rpm。这里要特别注意版本号和后缀确保与你的系统架构x86_64匹配。一个常见的坑网上下载的RPM包尤其是通过某些“网盘”链接下载的可能会不完整或损坏。在安装前务必进行校验。你可以使用sha256sum或md5sum命令比对下载文件与官网提供的校验值。命令很简单sha256sum oracle-database-ee-19c-1.0-1.x86_64.rpm然后将输出的一串字符与官网公布的校验码对比。这一步虽然繁琐但能杜绝因安装包问题导致安装过程诡异失败节省大量排错时间。4.2 执行RPM安装命令将下载好的RPM包上传到服务器例如放到/tmp目录下。然后使用yum localinstall命令进行安装。强烈推荐使用yum localinstall而不是rpm -ivh因为前者会自动解决并安装可能的依赖包而后者遇到依赖缺失就会直接报错退出。cd /tmp yum localinstall -y oracle-database-ee-19c-1.0-1.x86_64.rpm这个命令会启动安装过程。你会看到yum解析依赖、安装RPM包的输出信息。安装过程会将Oracle数据库软件文件释放到$ORACLE_HOME即/u01/app/oracle/product/19.3.0/dbhome_1目录下并创建必要的系统配置。安装完成后一个关键的变化是系统中会多出一个配置文件/etc/oratab。这个文件记录了系统上的Oracle数据库实例信息。同时RPM安装还会提供一个非常重要的脚本/etc/init.d/oracledb_ORCLCDB-19c名称可能因版本略有不同用于将数据库作为系统服务管理。4.3 运行配置脚本创建数据库RPM安装软件本身但默认不会创建运行的数据库实例。我们需要运行一个后续配置脚本。切换到root用户执行/etc/init.d/oracledb_ORCLCDB-19c configure这个脚本会做几件事调用Oracle的dbcaDatabase Configuration Assistant工具以静默方式创建一个新的数据库实例。默认会创建一个名为ORCLCDB的容器数据库CDB其中包含一个名为ORCLPDB的可插拔数据库PDB。这也是为什么实例名ORACLE_SID我们之前设为orcl而这里默认创建的是ORCLCDB需要注意区分。为数据库实例创建监听器。设置数据库随系统启动。脚本运行期间会提示你输入SYS、SYSTEM等管理用户的密码。请务必设置一个强密码并牢记。整个过程可能需要15到30分钟取决于服务器性能。5. 安装后配置、验证与连接配置脚本运行完毕后并不意味着万事大吉。我们还需要进行一系列验证和优化配置。5.1 验证安装与数据库状态首先检查监听器是否启动su - oracle lsnrctl status你应该能看到监听器LISTENER的状态为“STATUSREADY”并且正在监听你设定的端口默认1521。其次检查数据库实例状态。使用sqlplus以sysdba身份登录sqlplus / as sysdba SQL SELECT name, open_mode, database_role FROM v$database; SQL SELECT instance_name, status, database_status FROM v$instance; SQL SELECT pdb_name, status FROM cdb_pdbs;这几条命令分别查看了数据库名和打开模式、实例状态、以及所有PDB的状态。正常情况下CDB和PDB都应该是READ WRITE和OPEN状态。5.2 配置环境与便捷登录为了让oracle用户更方便地使用我们可以将常用的别名和快捷操作添加到.bash_profile中alias startdbsqlplus / as sysdba EOF\nstartup\nEOF alias stopdbsqlplus / as sysdba EOF\nshutdown immediate\nEOF alias lsnrstartlsnrctl start alias lsnrstoplsnrctl stop alias cdohcd $ORACLE_HOME alias cdtnscd $ORACLE_HOME/network/admin另外配置$ORACLE_HOME/network/admin/tnsnames.ora文件添加一个网络服务名方便远程或使用服务名连接ORCL (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME ORCLCDB) # 连接CDB ) ) ORCLPDB (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST localhost)(PORT 1521)) (CONNECT_DATA (SERVER DEDICATED) (SERVICE_NAME ORCLPDB) # 连接PDB ) )配置完成后就可以使用sqlplus sys/passwordorcl as sysdba或sqlplus system/passwordorclpdb这样的格式进行连接了。5.3 防火墙与自启动设置如果服务器启用了防火墙如firewalld需要开放Oracle监听端口firewall-cmd --permanent --add-port1521/tcp firewall-cmd --reload关于自启动RPM安装后通常已经配置好了。你可以通过systemctl来管理这个服务服务名可能是oracledb_ORCLCDB-19c。检查并设置开机启动systemctl enable oracledb_ORCLCDB-19c systemctl status oracledb_ORCLCDB-19c6. 常见问题与深度排错指南即使步骤再详细在实际操作中仍可能遇到各种问题。这里我整理了几个最典型的“坑”及其解决方案。6.1 安装阶段典型错误问题一执行yum localinstall时提示依赖包缺失。现象报错信息明确指出缺少某个包如libaio-devel。排查首先根据错误信息中的包名尝试用yum install直接安装。如果yum仓库里没有可能需要配置额外的仓库如EPEL或者从操作系统安装镜像中查找。解决最根本的方法是在准备阶段就严格按照Oracle官方文档针对你操作系统版本的预安装要求列表使用yum install全部安装一遍。可以编写一个shell脚本一次性安装所有依赖。问题二运行配置脚本/etc/init.d/oracledb_ORCLCDB-19c configure时失败。现象脚本运行到一半报错退出可能在创建数据库时卡住或报出ORA错误。排查检查日志这是最重要的排错手段。立刻去查看$ORACLE_BASE/cfgtoollogs/dbca目录下的日志文件以及$ORACLE_HOME/install下的日志。日志文件名通常包含时间戳里面会有详细的错误信息。检查环境变量以oracle用户身份执行env | grep ORA和env | grep PATH确保ORACLE_HOME,ORACLE_SID,PATH等设置正确无误特别是没有在root用户和oracle用户之间混淆。检查权限再次确认/u01目录及其所有子目录的所有者和权限是否为oracle:oinstall。检查资源查看/tmp空间是否不足内存和交换空间是否真的满足最低要求。可以使用df -h /tmp和free -m复查。解决根据日志中的具体错误代码如ORA-XXXXX去搜索解决方案。常见的有共享内存设置不足调整/etc/sysctl.conf、内核参数未生效执行sysctl -p、oracle用户的shell资源限制检查/etc/security/limits.conf等。6.2 运行阶段常见故障问题三监听器启动正常但sqlplus / as sysdba无法连接或提示“ORA-12547: TNS:lost contact”。现象本地操作系统认证登录失败。排查检查用户和组确认当前用户是oracle并且oracle用户属于dba组id oracle命令查看。检查$ORACLE_HOME/bin/oracle文件权限这是一个关键文件。它的权限应该是-rwsr-s--x所有者为oracle所属组为dba并且设置了setuid位。如果不对需要修正chmod 6751 $ORACLE_HOME/bin/oracle。解决修正文件权限后问题通常可以解决。这个权限问题在从某些安装方式迁移或手动拷贝文件后容易出现。问题四数据库实例无法启动报错关于控制文件、数据文件或重做日志文件找不到。现象执行startup时在mount或open阶段失败。排查查看alert日志文件位置在$ORACLE_BASE/diag/rdbms/db_name/instance_name/trace/alert_instance_name.log。里面会精确指出是哪个文件路径错误。解决这通常是因为ORACLE_BASE或ORACLE_HOME环境变量设置错误导致数据库找不到正确的参数文件spfile进而找不到控制文件描述的数据文件路径。确保ORACLE_HOME/dbs/initsid.ora或spfilesid.ora存在且正确并且其中的*.control_files等参数指向的路径真实存在。6.3 性能与优化初步设置安装成功只是第一步要让数据库跑得顺畅几个初始优化点值得关注内存管理19c默认使用自动内存管理AMM。但对于Linux系统更推荐使用自动共享内存管理ASMM并开启大页HugePages。这需要在spfile中设置memory_target0并设置sga_target和pga_aggregate_target。同时在操作系统层面配置HugePages。归档模式默认安装是非归档模式NOARCHIVELOG适用于测试开发。生产环境务必改为归档模式ARCHIVELOG并规划归档日志的存放路径和清理策略。PDB管理安装后默认的PDBORCLPDB是随CDB启动而打开的吗检查CDB_PDBS视图的OPEN_MODE。你可以通过触发器或ALTER PLUGGABLE DATABASE ALL SAVE STATE;命令让PDB在CDB重启后自动打开。7. 从RPM安装延伸运维与自动化思考通过RPM完成一次安装后我们获得的不仅仅是一个可用的Oracle数据库更是一套可复用的部署模式。这为后续的运维自动化打开了大门。你可以将安装过程中所有的手工命令创建用户、目录、修改内核参数、安装依赖包、执行RPM安装、运行配置脚本编写成一个Shell脚本。结合像Ansible这样的配置管理工具你可以将这个脚本转化为一个“角色”Role。在这个角色中定义好变量如Oracle版本、基础目录、数据库名、密码然后通过Ansible剧本在目标主机上执行。这样一来在新服务器上部署一个全新的、配置一致的Oracle 19c环境可能只需要一条命令和几分钟的等待时间。更进一步你可以基于这个RPM安装的基础制作一个自定义的虚拟机镜像或容器镜像。例如使用Dockerfile从一个基础的Oracle Linux镜像开始将上述步骤转化为Docker的RUN指令最终构建出一个包含已安装、已配置好的Oracle 19c的Docker镜像。这对于需要快速搭建开发、测试环境尤其有用。当然在容器中运行Oracle数据库需要仔细考虑数据持久化、性能调优等问题但这无疑是现代运维中一个极具价值的方向。回过头看从“没找到rpm命令”的困惑到能够利用RPM包完成一个企业级数据库的标准化部署这个过程中我们不仅掌握了一种安装方法更理解了一种与操作系统深度集成、便于自动化管理的软件交付思路。这种思路对于管理任何复杂的软件系统都是有借鉴意义的。