
简介这份下载资源是面向 CentOS 7 与 Red Hat 7 用户的 Oracle 19C 安装步骤文档适用于需要在 Linux 服务器上手工部署数据库的运维人员、DBA 及初学者。资料包为 1 个 DOCX 文档压缩后大小仅 2.99MB内容覆盖六个关键环节硬件与 Swap 分区预检、防火墙/图形桌面/SELinux 关闭、静态 IP 与主机名配置、Oracle 专属用户和用户组创建、系统安全参数调整以及后续调优建议。文档中还包含物理内存、磁盘空间和 Swap 的检查方式以及 dba、asmdba、backupdba 等用户组和 oracle 用户的创建过程并针对 limits.conf、sshd_config 等常见配置点做了说明。目前已有 17351 人学习下载说明其步骤清晰度和实用性得到了广泛验证。读者可对照文档顺序操作既能规避环境预检不到位、网络设置冲突、权限不足等高频问题也能在离线环境下快速定位并补全安装环节尤其适合初次部署 Oracle 19C 时作为参考手册使用。1. Linux安装Oracle19C详细步骤为什么说这是一场“半手工”的体力活拿到一台干净的 CentOS 7 或 RHEL 7准备装 Oracle 19C网上教程五花八门但照着做翻车率极高。原因很简单Oracle 的 Linux 安装从来不是下一步下一步就能结束的它由环境检查、依赖补齐、内核参数调优、静默安装、root 脚本执行、监听与实例验证六个环节构成任何一个环节缺了最后要么sqlplus起不来要么lsnrctl status报 TNS 错误要么数据库建好了重启就丢实例。这篇笔记就是按我实际装过十几台生产环境的顺序把 Linux 安装 Oracle19C 详细步骤拆开每条命令都能复制执行参数给出我常用的取值以及为什么这样取。适合刚接触 Oracle 的 Linux 运维也适合要在虚拟机上复现实验环境的开发——照着做一次跑通。2. 安装前的四项硬性检查内核、依赖、用户与目录规划Oracle 19C 对操作系统的要求比 11g/12c 严格不少尤其是 glibc 版本和 JDK 版本。我见过最典型的翻车现场是CentOS 7.6 默认内核 3.10.0-957直接装 19C 没问题但有人拿 CentOS 7.2 老镜像装内核太旧runInstaller跑到一半直接弹窗提示缺少libclntsh.so这就是依赖层没对齐。2.1 检查内核版本与操作系统位数一个命令定生死Oracle 19C 官方支持 RHEL/CentOS 7.4 及以上版本内核要求不低于 3.10.0-693。先执行uname -r cat /etc/redhat-release cat /proc/version输出看到3.10.0-1160.el7.x86_64这类内核号就可以继续。位数必须是 x86_6432 位系统装不了 19C。如果你的机器内核版本低于 693老老实实先yum update kernel再重启别指望跳过后续 ASM 和 OJVM 组件会报kernel not supported的警告虽然不是致命错误但万一出事官方不认账。2.2 依赖包补齐少了任何一个安装器都会在半路罢工Oracle 19C 的依赖包比 12c 多了一批包括compat-libcap1、libnsl、libaio-devel这些冷门库。最省事的方式是直接用 yum 一次性拉全yum -y install binutils compat-libcap1 compat-libstdc-33 \ gcc gcc-c glibc glibc-devel ksh libaio libaio-devel \ libgcc libstdc libstdc-devel libxcb libX11 libXau \ libXi libXtst libXrender libXrender-devel make net-tools \ nfs-utils openmotif22 smartmontools sysstat unixODBC \ unixODBC-devel libnsl elfutils-libelf-devel \ fontconfig-devel libXext libXinerama libXrandr \ xorg-x11-utils xorg-x11-xauth xorg-x11-server-Xvfb \ xorg-x11-server-common xorg-x11-fonts-ISO8859-1-100dpi \ readline readline-devel libtermcap-devel依赖包决定的是安装器能否顺利启动以及后续dbca建库时字符集、X 窗口渲染是否正常。注意openmotif22在标准 yum 源里没有需要先配 EPEL 源yum -y install epel-release yum -y install openmotif22配完 EPEL 再回头执行上面那一长串就不会报No package openmotif22 available。没有图形界面的最小化安装xorg-x11-server-Xvfb尤其重要后面做静默安装时它会作为虚拟显示服务兜底。2.3 创建用户与目录信息工程里最常见的“根目录在 /home”坑Oracle 安装不能直接用 root必须有专用用户和独立目录。我习惯把 Oracle 软件目录放在/u01/app/oracle而不是/home/oracle原因有两个一是/home分区经常被单独划分且空间不大二是 Oracle 的ORACLE_HOME路径里最好不要出现大写和特殊字符。创建命令如下groupadd oinstall groupadd dba useradd -g oinstall -G dba oracle echo oracle | passwd --stdin oracle mkdir -p /u01/app/oracle chown -R oracle:oinstall /u01密码尽量设置的复杂一点因为后面所有静默配置、响应文件里的口令都会用到这个账号。oinstall是软件拥有组dba是管理组不要把oracle用户同时设为两个组的主组否则dbca建库时报权限错误的概率极大。2.4 内核参数与资源限制三个最容易忽略的调优点编辑/etc/sysctl.conf追加以下内容fs.aio-max-nr1048576 fs.file-max6815744 kernel.semmsl256 kernel.semmns32000 kernel.semopm100 kernel.semmni128 net.ipv4.ip_local_port_range9000 65500 net.core.rmem_default262144 net.core.rmem_max4194304 net.core.wmem_default262144 net.core.wmem_max1048576 vm.swappiness10 vm.dirty_ratio30 vm.dirty_background_ratio3vm.swappiness调到 10 而不是默认的 30是为了减少 Oracle 的 SGA 被交换到 swap 的概率。生产库 SGA 通常给到物理内存的 50% 以上一旦发生 swap 抖动db file sequential read的等待事件会飙升。执行sysctl -p生效后再用sysctl -q vm.swappiness验证。修改/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 32768这里的nproc和nofile是最常被抄错的。很多教程会把 nofile 的 soft 也改成 65536但我见过因为 soft nofile 过高导致 ssh 登录时fork: Cannot allocate memory报错的实例所以保持 1024 起步、hard 放开到 65536 是更稳妥的配置。改完后编辑/etc/pam.d/login确保包含session required pam_limits.so这一行否则重启后限制不生效。最后关掉 SELinuxsed -i s/SELINUXenforcing/SELINUXdisabled/ /etc/selinux/config setenforce 0SELinux 不关安装器能跑但监听端口绑定会间歇性失败lsnrctl start报TNS-12545查半天查不出原因最后关了 SELinux 立刻好玄学变科学。3. 安装包准备与静默安装响应文件把图形界面装成“无人值守”Oracle 19C 的安装包有 zip 和 rpm 两种形态。zip 是完整的软件包包含runInstaller和dbca适合手动控制安装路径rpm 是 Oracle 预编译好的发行包装完还要额外执行root.sh而且文件布局是写死的。我一般选 zip 包原因很简单rpm 包对自定义ORACLE_BASE的支持很差出问题时排查路径的成本高。3.1 解压与校验不能只看文件大小下载LINUX.X64_193000_db_home.zip后先做完整性校验md5sum LINUX.X64_193000_db_home.zip unzip -q LINUX.X64_193000_db_home.zip -d /u01/app/oracle chown -R oracle:oinstall /u01/app/oracle等待解压完成后务必检查权限归属否则安装器以 oracle 用户启动时会报cannot create directory。解压出来的目录结构里会有runInstaller、response目录和stage目录response目录下的db_install.rsp就是我们要改写的静默安装响应文件。3.2 改写 db_install.rsp六个必改项一个多余项都别碰Oracle 19C 的响应文件模板在response/db_install.rsp直接复制一份到/home/oracle/下再改cp /u01/app/oracle/response/db_install.rsp /home/oracle/ chown oracle:oinstall /home/oracle/db_install.rsp用vim打开定位以下参数并修改oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory SELECTED_LANGUAGESen,zh_CN ORACLE_HOME/u01/app/oracle/19.0.0/dbhome_1 ORACLE_BASE/u01/app/oracle oracle.install.db.InstallEditionEE oracle.install.db.OSDBA_GROUPdba oracle.install.db.OSOPER_GROUPdba oracle.install.db.OSBACKUPDBA_GROUPdba oracle.install.db.OSDGDBA_GROUPdba oracle.install.db.OSKMDBA_GROUPdba oracle.install.db.OSRACDBA_GROUPdba SECURITY_UPDATES_VIA_MYORACLESUPPORTfalse DECLINE_SECURITY_UPDATEStrueINSTALL_DB_SWONLY表示只装数据库软件不建实例实例创建放到后面用dbca单独做这样能实时看到每个阶段的日志出错了也更容易隔离。ORACLE_HOME不要放在/u01/app/oracle/product/19.0.0这种老路径下统一到/u01/app/oracle/19.0.0/dbhome_1等以后要把 19C 升级到 21C两个 HOME 并存的路径管理会轻松很多。zh_CN语言包建议保留否则后续使用to_char转换中文日期格式时NLS 语言环境会异常。3.3 静默安装执行关键日志看这三处一切就绪后切换到 oracle 用户执行su - oracle cd /home/oracle /u01/app/oracle/19.0.0/dbhome_1/runInstaller -silent \ -responseFile /home/oracle/db_install.rsp \ -ignorePrereqFailure \ -showProgress-ignorePrereqFailure这个参数平时不建议加但在虚拟机上跑的时候经常出现物理内存检查不通过、swap 分区大小不达标的情况。如果确认自己的配置够用可以加这个参数跳过预检否则预检失败会直接终止安装。-showProgress会输出百分比进度装到 100% 不代表全部完成真正的收尾是两个 root 脚本。看到Successfully Setup Software字样后不要急着退出终端此时终端会提示执行以下命令/u01/app/oraInventory/orainstRoot.sh /u01/app/oracle/19.0.0/dbhome_1/root.sh这两条必须用 root 执行。orainstRoot.sh负责修改 inventory 目录权限并注册 Oracle 软件root.sh负责创建/etc/oratab、配置动态链接器缓存、设置环境变量。忘记执行root.sh的后果是数据库能装完但dbca建库后实例无法随系统自启crsctl stat res看不到任何资源。安装日志存在三个位置/u01/app/oraInventory/logs/下的installActions*.log、$ORACLE_HOME/cfgtoollogs/下的oui日志以及/tmp下的oraInstall临时日志。安装失败时先看installActions里的INFO级别报错不要一上来翻trace文件信息太碎定位不到根因。3.4 配置 oracle 用户环境变量装完第一件事就是它软件装完不配环境变量等于车造好不加油。编辑/home/oracle/.bash_profileexport ORACLE_BASE/u01/app/oracle export ORACLE_HOME$ORACLE_BASE/19.0.0/dbhome_1 export ORACLE_SIDORCL19C export PATH$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH$ORACLE_HOME/lib:/lib:/usr/lib export NLS_LANGAMERICAN_AMERICA.ZHS16GBKNLS_LANG这里用ZHS16GBK而不是AL32UTF8是为了兼容国内现有业务系统的编码。如果你是新项目且没有历史包袱建议换成AL32UTF8后续做expdp跨字符集迁移时不会出现ORA-29275的字符截断报错。配置完成后source ~/.bash_profile验证which sqlplus sqlplus /nolog能进入SQL提示符软件安装这一步就算真正闭环了。4. 用 dbca 静默建库实例创建与监听注册的完整命令软件装好只是第一步数据库实例才是业务真正使用的对象。很多教程把 dbca 建库和软件安装混在一起说导致读者不知道到底哪一步是建库、哪一步是监听配置。实际上 dbca 是一个独立的工具负责创建实例、控制文件、重做日志和数据库字典。4.1 生成建库响应文件模板改五个参数即可$ORACLE_HOME/assistants/dbca/dbca.rsp是 dbca 的模板响应文件复制到/home/oracle/下修改cp $ORACLE_HOME/assistants/dbca/dbca.rsp /home/oracle/ chown oracle:oinstall /home/oracle/dbca.rsp修改以下参数responseFileVersion/oracle/assistants/rspfmt_dbca_response_schema_v19.0.0 gdbNameORCL19C sidORCL19C databaseTypeGENERAL_PURPOSE characterSetZHS16GBK nationalCharacterSetAL16UTF16 listenersLISTENER_ORCL memoryPercentage40 emConfigurationLOCAL databaseTypeGENERAL_PURPOSE automaticMemoryManagementtrue totalMemory2048 storageTypeFS datafileDestination/u01/app/oracle/oradata recoveryAreaDestination/u01/app/oracle/fast_recovery_areacharacterSet必须和前面NLS_LANG里的字符集保持一致如果实例字符集是AL32UTF8而客户端NLS_LANG是ZHS16GBK程序在插入中文时会出现ORA-12899字段超长报错这是字符集换算导致的字节膨胀。totalMemory2048表示给 SGAPGA 总共分配 2GB虚拟机上 4GB 内存就够用生产环境建议改成物理内存的 60% 左右。4.2 执行 dbca 建库一个命令看全部输出su - oracle dbca -silent -createDatabase -responseFile /home/oracle/dbca.rsp这个命令会依次完成创建初始化参数文件、生成控制文件、启动实例到MOUNT状态、执行catapb.sql创建数据字典、执行catalog.sql创建 PL/SQL 包、运行catproc.sql编译系统存储过程。整个过程在虚拟机配置一般的情况下大约 15 分钟日志实时输出到终端出现Database creation complete即成功。建库完成后验证ps -ef | grep smon sqlplus / as sysdba SQL select status from v$instance;smon进程存在且status为OPEN建库成功。此时有一个常见现象lsnrctl status查不到 ORCL19C 服务注册。这是因为数据库默认不会自动注册到监听需要手动在 sqlplus 里执行alter system set local_listener(ADDRESS(PROTOCOLTCP)(HOSTlocalhost)(PORT1521)) scopeboth; alter system register;第一次alter system register后等 30 到 60 秒再执行lsnrctl services就能看到 ORCL19C 的实例状态是READY。注意HOST这里要写/etc/hosts里实际解析到的地址如果写localhost而监听配置里用的是主机名注册会失败。4.3 配置监听listener.ora 的最小可用写法Oracle 19C 默认的监听文件在$ORACLE_HOME/network/admin/listener.ora。如果完全不存在可以手动创建一份最小配置LISTENER_ORCL (DESCRIPTION_LIST (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST your_hostname)(PORT 1521)) ) ) SID_LIST_LISTENER_ORCL (SID_LIST (SID_DESC (GLOBAL_DBNAME ORCL19C) (ORACLE_HOME /u01/app/oracle/19.0.0/dbhome_1) (SID_NAME ORCL19C) ) )yours_hostname换成机器实际的主机名不要写 IP否则以后换 IP 就得改这个文件。配置完成后启动监听lsnrctl start LISTENER_ORCL lsnrctl status LISTENER_ORCL看到The command completed successfully且监听状态为READY整个监听闭环就完成了。生产环境上我建议把listener.ora里的HOST写成0.0.0.0这样监听对所有网卡生效避免多网卡机器上客户端只能从一个 IP 连库的尴尬。5. 安装后的自启动配置与验证脚本把“临时演示”变成“长期服务”装完、建库、监听启动这只是当下能用。生产上最怕的是重启服务器后数据库起不来Oracle 不像 MySQL 有现成的systemctl服务需要手动配置dbstart和dbshut脚本让 Oracle 随系统启动和关闭。5.1 修改 oratab 文件自启动的总开关/etc/oratab是 root.sh 生成的实例注册文件格式是ORACLE_SID:ORACLE_HOME:Y/N最后一列改成Y才允许自启动sed -i s/^ORCL19C:.*:N/ORCL19C:\/u01\/app\/oracle\/19.0.0\/dbhome_1:Y/ /etc/oratab注意不要在oratab里直接手敲路径这个文件对格式非常敏感多一个空格dbstart就找不到实例。验证修改结果cat /etc/oratab | grep ORCL19C5.2 编写 systemd 服务单元比 /etc/rc.local 可靠我以前习惯在/etc/rc.local里写su - oracle -c dbstart后来发现 rc.local 在高版本 systemd 系统上默认没有执行权限而且无法查看服务状态排错时黑匣子一样。改成 systemd 单元cat /etc/systemd/system/oracle-19c.service EOF [Unit] DescriptionOracle 19C Database Service Afternetwork.target [Service] Typeforking Useroracle Groupoinstall Restarton-failure RestartSec30 ExecStart/u01/app/oracle/19.0.0/dbhome_1/bin/dbstart /u01/app/oracle/19.0.0/dbhome_1 ExecStop/u01/app/oracle/19.0.0/dbhome_1/bin/dbshut /u01/app/oracle/19.0.0/dbhome_1 [Install] WantedBymulti-user.target EOFTypeforking很关键dbstart启动后 oracle 进程会 daemon 化systemd 会等待主进程退出并追踪子进程。Restarton-failure能给数据库一次自救机会避免 OOM 或监听瞬时故障导致实例永久停摆。然后执行systemctl daemon-reload systemctl enable oracle-19c systemctl start oracle-19c systemctl status oracle-19c看到Active: active (running)就完成了。这里有个细节dbstart每次执行时会读取/etc/oratab如果Y/N状态不对命令执行成功但实际上没拉起实例属于半成功状态所以前面第 5.1 的 sed 是前置条件。5.3 用一条命令完成健康检查给当天值班的人留个后悔药完整跑一遍安装流程后我最后习惯性执行这串检查ps -ef | grep -E pmon|smon | grep -v grep lsnrctl status LISTENER_ORCL | grep Instance sqlplus -S / as sysdba EOF set pagesize 0 linesize 200 select name, open_mode from v\$database; select instance_name, status from v\$instance; select name, value from v\$parameter where name in (sga_target,pga_aggregate_target); EOFopen_mode应该是READ WRITEinstance status应该是OPEN。如果open_mode是MOUNTED说明数据库没有完成最后的 open 步骤需要手动执行alter database open;。这种问题不是安装姿势不对而是建库时dbca在最后一步执行 DDL 时遇到了重做日志文件权限问题解决方法是chmod 660 /u01/app/oracle/oradata/ORCL19C/*.dbf chown oracle:oinstall /u01/app/oracle/oradata/ORCL19C/*.dbf然后再sqlplus / as sysdba执行alter database open;通常就能救回来。5.4 SQL*Plus 常用命令与 show 命令速查很多读者装完 Oracle 后第一件事是敲sqlplus却发现show命令和 SQL 语句混在一起找不到北。这里给一组常用验证组合直接抄-- 查看字符集与版本 select * from nls_database_parameters where parameter like %CHARACTERSET%; select * from v$version; -- 查看当前连接会话 select sid, serial#, username, program from v$session; -- 查看监听注册状态 show parameter local_listener; show parameter service_names; -- 查看数据库是否允许远程连接 show parameter dispatchers;其中show parameter service_names的值必须与 tnsnames.ora 里配置的服务名一致否则客户端用服务名连接时报ORA-12514: TNS:listener does not currently know of service requested。6. Linux 下卸载 Oracle 19C一条不踩注册表坑的干净清理路径网上搜“如何卸载oracle19c注册表”能搜出一堆 Windows 下的教程Linux 没有注册表这个说法Oracle 的“残留”体现在/etc/oratab、/u01/app/oracle目录和oraInventory记录上。卸载不干净最典型的症状是重装时报ORA-27102: out of memory其实不是内存不够而是$ORACLE_HOME下残留的spfileORCL19C.ora指向了旧的sga_max_size配置。6.1 停服务再清文件的顺序问题卸载必须先停实例和监听顺序错了dbshut会因监听端口被占用而失败su - oracle lsnrctl stop LISTENER_ORCL sqlplus / as sysdba EOF shutdown immediate; EOF exitshutdown immediate等不到的话用shutdown abort强制停但注意abort后重做日志需要实例恢复启动时多等一会儿是正常的。然后删除文件rm -rf /u01/app/oracle/19.0.0/dbhome_1 rm -rf /u01/app/oracle/oradata/ORCL19C rm -rf /u01/app/oracle/fast_recovery_area/ORCL19C rm -rf /u01/app/oraInventory rm -f /etc/oratab userdel -r oracle groupdel oinstall groupdel dbauserdel -r oracle会把/home/oracle一起删掉如果你的备份脚本或自定义脚本里写了绝对路径卸载后这些脚本会收到一堆No such file or directory的报错属于正常现象。最后别忘了把前面 systemd 里创建的服务单元删掉systemctl disable oracle-19c rm -f /etc/systemd/system/oracle-19c.service6.2 重装前必做的三项残留检查清理完后执行df -h /u01确认空间已释放再检查/etc/ld.so.conf里是否还残留oracle路径grep -i oracle /etc/ld.so.conf /etc/profile /etc/sysctl.conf但凡还有输出就手工删掉对应行。这三个文件里的残留不会导致安装失败但会干扰数据库客户端的库文件加载表现是sqlplus执行时报libclntsh.so: cannot open shared object file。做一次ldconfig刷新动态链接器缓存ldconfig清理干净后重新从头走一遍第二、三章的流程就不会碰到第一次安装时的各种玄学报错。6.3 我的最后一步快照习惯与“后悔药”无论是物理机还是虚拟机我在执行安装前都习惯先打一个系统快照或完整备份/etc目录。这个习惯救过我很多次——有次调内核参数时把kernel.shmall写错重启后数据库彻底起不来回滚快照比排查错误快得多。虚拟机建议在安装前和配好自启动后各打一个快照前一个用来反复实验后一个作为干净基线。物理机就把/etc、/u01/app用 tar 打包放到独立分区这样万一卸载重装或参数改坏也能在半小时内恢复到可用状态。Oracle 19C 在 Linux 上的安装本身不复杂复杂的是依赖、权限、内核参数和自启动这条隐藏链路。希望这篇笔记能帮你少踩几个坑一次跑通。本文还有配套的精品资源点击获取