资讯动态

Oracle 19c RAC静默安装实战:从响应文件到DBCA全流程指南

发布时间:2026/10/13 7:51:43 来源:尧图企业网站定制
第一次在纯远程环境里部署 Oracle 19c RAC 时我面前只有一台带 SSH 的跳板机机房物理 console 约不到VNC 又因为网段隔离慢到没法用。当时几乎没犹豫直接选了 Oracle 19c RAC 静默安装。后来整套流程跑下来这个选择不仅省掉了半小时以上的窗口点击还把整个部署过程变成了一份可重复执行的配置清单。这篇文章就是按我当时实操顺序整理出来的完整记录内容包括前置环境、响应文件解读、GI/DB/DBCA 三步安装以及最后的排障方法适合需要在多节点 Linux 服务器上重复部署 RAC 的 DBA 和运维同学参考。1. 为什么我一开始就锁定静默安装而不是图形界面1.1 静默安装到底解决了什么问题很多人听到“静默安装”第一反应是是不是就是无人值守、不用管、跑完就行。其实不完全是。Oracle 19c RAC 的静默安装本质上是把图形安装向导里的每一步交互提前写进一个文本响应文件里由安装程序按字段逐项读取并执行。换句话说你只是把“鼠标点选”换成了“写配置文件”安装过程的每个环节仍然在一个都没少。这带来一个很实际的好处配置本身可以被版本化管理。响应文件放在 Git 仓库里谁改过、为什么改全部留痕。我后来在测试环境和生产环境之间复制同样的集群架构时只需要把响应文件里的主机名、IP、磁盘路径替换掉跑一遍命令就行不用再对着图形界面回忆“上次到底选了哪个选项”。静默安装真正适合的场景我总结下来就三类机房远程操作图形通道不可用或者慢到影响效率需要反复部署多套结构相同的 RAC比如一主多备、多套测试环境想要把安装动作集成到脚本化运维平台里去减少人工介入。如果你只是装一台实验环境而且服务器就在手边图形安装完全没毛病。但如果你面对的是生产环境批量交付静默安装几乎是唯一靠谱的路。1.2 静默安装和图形安装的差异不只是省一次鼠标点击用一张表来说明两者在实际工作中的差别对比维度图形安装静默安装前置要求需要 X11、VNC 或本地图形环境只需要 SSH 终端交互次数全程 20 步以上点击0 次全部在响应文件里可重复性每次都要人工重新点击同一配置可反复执行排错复杂度弹出窗口即时反馈完全依赖日志定位对执行者要求熟悉界面选项即可必须理解每个配置项含义从表面看静默安装省的是时间实际上省的是“人”。图形安装中真正容易出错的往往不是最后一步点“Install”而是前面几页里那些不起眼的下拉框选错了磁盘组冗余级别、漏掉了某个节点、把专用网卡和公共网卡顺序搞反这些错误在图形界面里会被默认值掩盖。响应文件则强制你把每一个参数都显式写出来反而不容易漏。当然静默安装也有代价。最大的问题是出错时没有直观提示你需要去翻安装日志并且要熟悉日志路径。这个内容我会在后面的排障部分专门讲。1.3 实际执行前我会先确认的几件事再往下走之前先说说我在做任何安装动作之前都会确认的东西这也是避免做到一半才发现问题的基础安装介质完整19c Grid Infrastructure 和 Database 的安装包都解压好了目录可读节点时间同步NTP 或 chrony 已配置两节点时间差控制在分钟级以内SSH 互信grid 用户和 oracle 用户在节点之间能免密登录这是静默安装往多节点分发软件的前提磁盘和共享卷ASM 磁盘已经映射并且权限正确至少一块磁盘组用于 OCR/Voting File一块用于数据文件。这些项目看着基础但每一条都有人在最后一步翻过车。后面每个环节我会再展开。2. 前置环境照做就不会在最后一步翻车2.1 主机规划与域名解析先说我常用的规划方式。两个节点公共网卡 eth0私有网卡 eth1扫描地址用一个独立 IP。以下是我的 /etc/hosts 片段注意私有地址段要与公共网络严格分开192.168.10.11 racnode01.localdomain racnode01 192.168.10.12 racnode02.localdomain racnode02 192.168.10.21 racnode01-vip.localdomain racnode01-vip 192.168.10.22 racnode02-vip.localdomain racnode02-vip 192.168.10.100 rac-scan.localdomain rac-scan 192.168.11.11 racnode01-priv.localdomain racnode01-priv 192.168.11.12 racnode02-priv.localdomain racnode02-priv要点有两个。第一主机名不能随便起必须与节点名保持对应关系否则后面 clusterNodes 参数写起来会很别扭。第二扫描地址我建议直接写进 hosts 文件而不是依赖 DNS。虽然官方推荐用 DNS 解析 SCAN但很多人实际环境里的 DNS 并没有配置好正向和反向解析一旦依赖 DNS 而条件不满足安装会直接报错。先把 SCAN 写进 hosts 跑通一件事比在 DNS 上纠缠一整天要实在。如果一定要用 DNS至少确认nslookup rac-scan和dig -x scan-ip都能返回正确结果。SCAN 解析不通过gridSetup.sh 在预检查阶段就会卡住。2.2 用户、组和目录权限安装 19c RAC 需要两组不同的用户grid 用户负责 Grid Infrastructureoracle 用户负责数据库软件。常见的操作系统用户组分工如下用户主组辅助组用途gridoinstalldba, oper, asmadmin, asmdba, asmoper管理 GI、ASMoracleoinstalldba, oper, backupdba, dgdba, kmdba, racdba管理数据库软件对应创建命令大致是groupadd -g 1001 oinstall groupadd -g 1002 dba groupadd -g 1003 oper groupadd -g 1004 backupdba groupadd -g 1005 dgdba groupadd -g 1006 kmdba groupadd -g 1007 racdba groupadd -g 1008 asmadmin groupadd -g 1009 asmdba groupadd -g 1010 asmoper useradd -g oinstall -G dba,oper,asmadmin,asmdba,asmoper grid useradd -g oinstall -G dba,oper,backupdba,dgdba,kmdba,racdba oracle目录权限方面我通常把 Grid 软件放在/u01/app/grid数据库软件放在/u01/app/oracle/product/19.0.0/dbhome_1库存目录统一用/u01/app/oraInventory。目录归属要求mkdir -p /u01/app/grid mkdir -p /u01/app/oracle/product/19.0.0/dbhome_1 chown -R grid:oinstall /u01/app/grid chown -R oracle:oinstall /u01/app/oracle很多静默安装失败发生在预检查阶段报错内容是权限组不存在或者目录不可写。比如常见的PRVG-1001就是因为我漏建了 asmadmin 组。建议在执行安装脚本前先逐项核对组和目录。2.3 内核参数、资源限制与共享内存19c 对内核参数有默认要求我一般直接在/etc/sysctl.d/96-oracle.conf里写入以下典型的配置值然后执行sysctl --systemfs.aio-max-nr 1048576 fs.file-max 6815744 kernel.shmall 1073741824 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 4194304需要提醒的是shmmax 不要盲目照抄要根据物理内存来设定建议至少覆盖 SGA 需求的一半以上。至于透明大页建议直接关闭因为数据库在透明大页场景下容易出现性能抖动这个在安装阶段不改上线之后再调整就痛苦了。资源限制配置在/etc/security/limits.d/oracle-database.confgrid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 65536 oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536这些限制如果不配安装阶段一般不会立刻报错但后续数据库跑起来后会出现进程数不够、句柄耗尽这类问题。既然是静默安装一遍过这些前置项就一次性配到位。2.4 共享存储与 ASM 磁盘权限共享磁盘是 RAC 的命根子。我的习惯是把多块共享 LUN 通过 multipath 映射为/dev/mapper/asm-data01这类稳定路径再用 udev 规则固定属主和权限# /etc/udev/rules.d/99-oracle-asm.rules KERNELdm-*, ENV{DM_NAME}asm-data01, OWNERgrid, GROUPasmadmin, MODE0660 KERNELdm-*, ENV{DM_NAME}asm-data02, OWNERgrid, GROUPasmadmin, MODE0660写完规则后执行udevadm control --reload-rules udevadm trigger然后确认ls -l /dev/mapper/asm-data*的权限是grid:asmadmin 0660。这里有一个经验ASM 磁盘权限在静默安装阶段非常容易出现“扫描不到磁盘”的问题。原因通常是 udev 规则没生效或者磁盘设备名在两个节点上不一致。所以我会在安装前先把两个节点的/dev/mapper下的设备都列出来对比一遍确保完全一致再开始安装。3. 一份能跑通的 Grid 响应文件是安装成功的关键3.1 响应文件从哪里来静默安装的响应文件并不是凭空写的。Oracle 在安装介质里提供了模板路径通常在# Grid Infrastructure 模板 $GRID_HOME/assistants/rsp/grid_install.rsp # 数据库软件安装模板 $ORACLE_HOME/assistants/rsp/db_install.rsp实际工作中我很少从头开始写响应文件都是先把模板复制出来再按当前环境修改。这里有一个坑模板里的注释很多字段与字段之间有空行复制到服务器上后如果用了不同的换行符或者引入多余空格可能会导致解析失败。建议复制到 Linux 环境后用dos2unix处理一遍再统一保存。3.2 grid_install.rsp 的关键字段下面是一份我实际用过的 Grid 响应文件的核心内容字段值已经替换成了通用占位符oracle.install.responseFileVersion/oracle/install/rspfmt_crsinstall_response_schema_v19.0.0 oracle.install.optionCRS_CONFIG ORACLE_HOSTNAMEracnode01 INVENTORY_LOCATION/u01/app/oraInventory oracle.install.asm.OSDBAasmdba oracle.install.asm.OSOPERasmoper oracle.install.asm.OSASMasmadmin oracle.install.asm.SYSASMPasswordYourStrongPwd oracle.install.asm.monitorPasswordYourMonitorPwd oracle.install.crs.config.clusterNamerac-cluster oracle.install.crs.config.gpnp.enabletrue oracle.install.crs.config.autoConfigureClusterScopetrue oracle.install.crs.config.clusterNodesracnode01:racnode01-vip:racnode01-priv,racnode02:racnode02-vip:racnode02-priv oracle.install.crs.config.networkInterfaceListeth0:192.168.10.0:1,eth1:192.168.11.0:2 oracle.install.asm.diskGroup.nameDATA oracle.install.asm.diskGroup.redundancyEXTERNAL oracle.install.asm.diskGroup.AUSize4 oracle.install.asm.diskGroup.disks/dev/mapper/asm-data01,/dev/mapper/asm-data02 oracle.install.asm.diskGroup.diskDiscoveryString/dev/mapper/asm-*逐行说说重点。oracle.install.crs.config.clusterNodes的格式是“节点名:VIP名:私有节点名”多个节点用逗号分隔。节点名必须与 /etc/hosts 里一一对应VIP 名也是不建议这里写 IP否则后面容易在名称解析上出错。networkInterfaceList的格式是“网卡名:子网:接口类型”。类型 1 代表公共网卡2 代表私有网卡。这里最容易踩的坑是两个节点的网卡名必须一致也就是说两个节点都用 eth0 做公共网卡、eth1 做私有网卡。如果一台是 eth0 另一台是 ens192预检查就会报错即使 IP 网络完全能通也白搭。diskGroup.name、redundancy、disks是 ASM 磁盘组定义。redundancyEXTERNAL表示外部冗余适用于底层存储已经做了 RAID 的情况。如果底层是普通磁盘没有保护至少要选择 NORMAL。AUSize 单位是 MB默认 4MB 对大多数场景都够用。这里有一个细节安装程序会自动用第一块磁盘组作为 OCR 和 Voting File 的存放位置。也就是说如果这张盘坏了集群就没了。所以我个人建议在配置里单独分一组 FRA 或者单独建 OCR 磁盘组不要把所有鸡蛋放一个篮子里。静默安装只允许在响应文件里配置一个磁盘组后续可以在安装完成后再用asmca或者asmcmd添加其他磁盘组。3.3 数据库软件安装响应文件 db_install.rsp数据库软件安装的响应文件比 Grid 简单得多。核心字段如下oracle.install.responseFileVersion/oracle/install/rspfmt_dbinstall_response_schema_v19.0.0 oracle.install.optionINSTALL_DB_SWONLY UNIX_GROUP_NAMEoinstall INVENTORY_LOCATION/u01/app/oraInventory ORACLE_BASE/u01/app/oracle ORACLE_HOME/u01/app/oracle/product/19.0.0/dbhome_1 oracle.install.db.ClusterEditionCLUSTER oracle.install.db.InstallEditionEE oracle.install.db.OSDBAdba oracle.install.db.OSBACKUPDBAbackupdba oracle.install.db.OSDGDBAdgdba oracle.install.db.OSKMDBAkmdba oracle.install.db.OSRACDBAracdba oracle.install.db.rootconfig.executeRootScriptfalse注意两点。第一oracle.install.optionINSTALL_DB_SWONLY表示只安装软件不建库。建库的动作我后面单独用 DBCA 静默模式来做这样职责分离出问题时好定位。第二oracle.install.db.rootconfig.executeRootScriptfalse是让安装程序不要把 root 脚本执行过程自动托管而是等我们把脚本手动跑在两台节点上。这里没有绝对标准有的团队喜欢自动执行我习惯手动执行因为可以在 root.sh 执行时观察输出发现问题时立刻处理。4. 实测静默安装完整流程GI、DB、DBCA 三步跑完4.1 第一步用 gridSetup.sh 部署 Grid Infrastructure在所有前置检查通过之后先切到 grid 用户在节点一上执行cd /u01/grid ./gridSetup.sh -silent -responseFile /u01/stage/grid_install.rsp -ignorePrereq命令里的-ignorePrereq表示忽略非关键预检查警告。如果你对前置环境非常有信心可以用这个参数跳过交互确认环节如果不想忽略就不要加这个参数让安装程序自动检查并报告问题。执行后安装程序会依次完成以下动作在节点一解压并安装 Grid 软件把安装文件复制到其他节点执行远程配置工作提示你以 root 用户在两台节点上执行脚本。等到终端出现类似“可以执行 root.sh”的提示时会停下来等待。如果你没有执行 root 脚本安装不会继续。这是静默安装给人的第一个错觉“是不是卡死了”其实不是是在等你手动跑脚本。4.2 并行跑 root.sh这一步最容易卡住在节点一执行cd /u01/app/oraInventory ./orainstRoot.sh cd /u01/app/grid ./root.sh节点二同样执行一遍两边的 root.sh 可以并行。root.sh 会创建 OCR、启动 OHAS、注册集群资源过程通常需要几分钟到十几分钟不等。执行期间看到的输出里会有clscfg、ocrconfig、crsctl这些关键词。这里有几个必须留意的点。第一root.sh 失败后不要盲目重试。先看日志位置通常在$GRID_HOME/install/root_hostname.log日志会明确告诉你是哪一步失败比如 DNS 解析、磁盘权限、防火墙策略。盲目重试只会让 OCR 状态更乱。第二node1 的 root.sh 跑完后node2 再跑时如果报错提示 node1 资源没有 startup通常是因为 node1 集群还没有完全 ready。这很正常稍等一会儿再重试 node2 的 root.sh 即可。第三如果集群里之前装过其他 RAC 或者做过恢复测试可能导致 OCR 残留在某个磁盘上此时 root.sh 可能报PROT-9之类的错误。遇到这种残留问题需要用 root 执行$GRID_HOME/crs/install/rootcrs.pl -deconfig -force清理旧配置再重新跑 root.sh。两台节点的 root.sh 都成功后回到节点一继续等待安装程序完成剩余配置。安装成功后会看到类似“Grid Infrastructure configuration completed”的提示。此时可以用crsctl check cluster -all初步验证。4.3 第二步用 runInstaller 安装数据库软件GI 部署完成后切到 oracle 用户在节点一执行cd /u01/oracle/database ./runInstaller -silent -responseFile /u01/stage/db_install.rsp -ignorePrereq这次安装同样会把软件分发到所有节点完成后会提示在每台节点上执行 root 脚本/u01/app/oracle/product/19.0.0/dbhome_1/root.sh注意这个 root.sh 和 Grid 的 root.sh 不一样一个是 ORACLE_HOME 下的一个是 GRID_HOME 下的。很多第一次做的人看到终端出现 root.sh 就直接去之前那个目录找了白忙活半天。数据库软件完成之后/u01/app/oracle/product/19.0.0/dbhome_1/bin下会生成sqlplus、dbca、srvctl等工具但此时还没有真正的数据库实例。4.4 第三步DBCA 静默建库这是整个流程里最接近“一键完成”的一步。在节点一上以 oracle 用户执行dbca -silent -createDatabase \ -templateName General_Purpose.dbc \ -gdbName orcl -sid orcl \ -sysPassword YourSysPwd \ -systemPassword YourSystemPwd \ -createAsContainerDatabase true \ -numberOfPDBs 1 \ -pdbName orclpdb \ -pdbAdminPassword YourPdbPwd \ -storageType ASM \ -diskGroupName DATA \ -recoveryAreaDestination RECO \ -recoveryAreaSize 40960 \ -nodelist racnode01,racnode02说明几个参数-gdbName是全局数据库名-sid是实例名前缀。RAC 场景下两个节点的实例会分别叫 orcl1、orcl2。-storageType ASM表示数据文件放在 ASM 磁盘组 DATA 上。-recoveryAreaDestination是快速恢复区的磁盘组我这里用的是 RECO建议提前用asmca创建好。如果没有也可以先不指定后续再补但不指定就会少一层保护。-createAsContainerDatabase true表示创建 CDB这是 19c 的默认推荐结构除非有特殊兼容要求否则建议保留。执行过程中DBCA 会在两个节点并行创建实例并自动通过 SRVCTL 注册数据库资源。结束后可以用srvctl status database -d orcl查看状态应该看到两个实例都处于 Online。4.5 如果中途失败重装前必须做的清理静默安装失败后直接重跑是很多人反复折腾的根源。我踩过几次之后养成了一个固定习惯失败后先定位原因再做一次系统性清理然后再重装。简单的清理流程如下# 1. 先把集群资源停掉如果已经起了一部分 crsctl stop cluster -all crsctl stop crs # 2. 以 root 在每台节点执行配置卸载 $GRID_HOME/crs/install/rootcrs.pl -deconfig -force -verb # 3. 删除软件目录和库存目录 rm -rf /u01/app/grid rm -rf /u01/app/oracle/product/19.0.0/dbhome_1 rm -rf /u01/app/oraInventory # 4. 清理残留配置 rm -rf /etc/oracle rm -rf /var/tmp/.oracle rm -f /etc/oraInst.loc注意ASM 磁盘组里如果已经初始化过 OCR单纯删目录是清理不干净的。rootcrs.pl -deconfig的作用就是把这部分残留抹掉。如果你跳过了它第二次 root.sh 几乎一定会在 OCR 初始化阶段报错到时候问题就从“软件没装好”变成“旧集群没卸干净”排查难度直接上一个台阶。5. 安装完成后的集群体检以及几个我踩过的坑5.1 最基本的集群与数据库状态检查完成安装后不要急着把服务器交付出去。先做一轮体检我每次必跑的命令如下crsctl check cluster -all crsctl check crs crsctl stat res -t asmcmd lsdg srvctl status database -d orcl srvctl config database -d orclcrsctl check cluster -all会返回 Online 状态crsctl stat res -t可以看到资源明细重点确认 ora.DATA.dg、ora.RECO.dg、ora.orcl.db 这些资源都是 ONLINE。asmcmd lsdg可以核对磁盘组的总容量和剩余空间验证数据是否真的写到了共享存储上。另一个容易被忽略的检查项是监听器状态。RAC 的监听资源是由 GI 管理的检查方式srvctl status listener srvctl status scan如果 scan 资源没有正常注册到 DNS 或者广播到 SCAN IP远程客户端就连不上集群。SCAN 的问题往往是 DNS 引起的建议在客户端机器上用tnsping rac-scan:1521验证。5.2 常见错误与排查途径静默安装的报错不像图形界面那么友好掌握日志位置是关键。我一般按以下顺序排查报错类型日志位置常见原因预检查失败$GRID_HOME/cfgtoollogs/下的日志组、权限、内核参数、网络接口名不一致Grid 安装卡住$GRID_HOME/cfgtoollogs/gridSetup/root.sh 未执行、远程分配节点失败root.sh 失败$GRID_HOME/install/root_hostname.logDNS 异常、OCR 残留、磁盘访问失败DBCA 建库失败$ORACLE_BASE/cfgtoollogs/dbca/ASM 磁盘组空间不足、密码复杂度不够这里反复强调日志是因为静默安装下日志几乎是唯一的线索。有一个新人比较容易犯的错误是看到某个报错就去搜索解决方案但没看日志里的前后文明明已经写了具体原因。建议养成先看日志、再查网络、最后动手清理的习惯。5.3 我实际踩过的坑网卡名不一致和 SCAN 解析超时分享两个我印象最深的真实问题都是静默安装特有的坑。第一个是网卡名不一致。两台节点的操作系统网卡命名分别是 eth0 和 ens192我图省事在响应文件里写了 eth0结果预检查阶段直接报网络接口校验失败。当时还以为是防火墙或者路由问题排查了一圈才发现是命名不一致。后来在安装规范里加了一条硬要求两个节点的网卡名必须一致否则先统一命名再继续。第二个是 SCAN 解析超时。我在一个测试环境里没有配置 DNS直接把 SCAN 的 IP 写进了 /etc/hosts。安装倒是顺利完成了但应用连接时出现间歇性连不上的情况。排查后发现部分客户端把 rac-scan 解析成了多 IP 中的某一个而这个 IP 对应的 SCAN 监听器没有完全就绪。后来我给客户端环境的 hosts 文件也统一加上了 SCAN 条目并重启了 SCAN 监听问题才消失。虽然 19c 的 SCAN 本身支持多个 IP但如果你的 DNS 基础设施不够稳定优先保证一个 SCAN IP 的简单可靠胜过盲目追求多 IP 的负载均衡。5.4 安装规范化的最后一点建议我现在做 RAC 部署时习惯把响应文件、环境检查脚本和部署命令一起打包存放。每次部署新环境先跑环境检查脚本再根据输出微调响应文件最后执行安装。这套流程跑熟之后一套双节点 19c RAC 从开始到交付真正需要人工介入的只剩 root.sh 和 DBCA 建库那几分钟。最后再提一个很多人都会忽略的点安装完成后不要急着把安装介质和响应文件删掉。响应文件里包含密码字段注意文件权限至少要限制为属主可读写而安装介质留着下次添加节点、修复组件时都会用到。放在一个安全目录里比临时翻找旧光盘要靠谱得多。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑