我先把话说在前头网上关于 Oracle 19c RAC 的安装教程不少但多数只给命令不给思路或者干脆停在“配置到一半让你自己悟”的位置。这篇不一样我按照一次真实完整的图形化安装流程从环境规划、基础配置、GI 安装、数据库软件安装到 DBCA 建库串起来写每个环节都会说清楚“为什么要这么做”以及“卡住了怎么处理”。毕竟 RAC 这东西一步错往往不是报错那么简单而是后面查半天都查不出原因。这篇适合两类人一类是刚接触 RAC、在虚拟机上练手的新手另一类是在物理机或云主机上部署、被各种前置条件坑过一遍的运维老哥。你不需要背命令跟着流程走就行遇到问题直接跳到第 5 章查表。1. 安装前的思想准备与整体规划1.1 先搞清你装的是什么GI DB 的双层架构很多新手最容易犯的错误是把“Oracle 数据库安装”和“RAC 安装”混为一谈。RAC 不是数据库软件上一个勾选项而是由两层东西叠加出来的架构。底层叫 Grid Infrastructure简称 GI负责集群的存活、节点间的通信、共享存储的卷管理ASM、SCAN 监听等核心服务。顶层才是 Oracle Database 软件本身它跑在 GI 之上数据库实例通过 ASM 读写磁盘组里的数据文件。简单类比一下GI 相当于小区物业负责公共水电和门禁数据库是业主家里业主换家具不用惊动物业但水电出了事肯定先找物业。所以图形化安装严格来说有三段第一段装 Grid Infrastructure第二段装 Oracle Database 软件第三段用 DBCA 创建集群数据库。每一段都有独立的安装向导、独立的用户权限要求甚至 root.sh 脚本都各不相同。理解了这一点你后面看安装日志时会清醒很多。1.2 共享存储规划OCR、Voting Disk 与数据文件的摆放RAC 集群必须有一份共享存储所有节点都能看到同一块磁盘。这块存储上要划出三块逻辑区域OCROracle Cluster Registry存放集群配置信息比如节点列表、资源属性。坏了集群就懵了。Voting Disk表决盘用于节点间心跳仲裁脑裂时靠它投票决定谁存活。数据文件与恢复区存放数据库的数据文件、控制文件、在线日志、备份片。在 19c 里OCR 和 Voting Disk 通常放在同一个 ASM 磁盘组里起名通常叫 OCRVOT 或 DATA但生产环境建议分开。数据文件放在 DATA 磁盘组恢复文件放 FRA 磁盘组各占一个挂载点。在虚拟机上练手时最省事的方式是给虚拟机添三块共享虚拟磁盘一块放 OCRVOT建议至少 50GB一块放 DATA建议 100GB 以上一块放 FRA建议 50GB。需要注意的是虚拟机的虚拟磁盘必须设置为“独立持久”模式并且所有节点都要挂载同一块虚拟磁盘而不是各自创建独立的磁盘拷贝。1.3 虚拟机环境快速收敛方案如果你的机器内存紧张又想过一遍完整流程我建议直接两个节点虚拟机每台给 8GB 内存、两核 CPU、60GB 系统盘再加共享盘。两个节点是 RAC 的最基本形态一个节点叫 rac1另一个叫 rac2实验完还能顺带测节点漂移和故障切换。操作系统建议选 Oracle Linux 7.9 或 RHEL 7.9别一上来就追新系统19c 的兼容性矩阵里 EL7 是最稳的搭档。图形界面用 GNOME 或 KDE 都行但服务器上通常不装 GUI所以你在 Windows 上用 Xmanager 或者 MobaXterm 的 X11 转发即可搞定图形显示。这块规划到位后面安装会非常顺。我见过不少现场事故都是开头图省事后面 root.sh 跑到一半死活过不去最后全部推翻重来。2. 基础系统配置图形化之前必须先过这一关2.1 主机名、网络与解析公网、私网、SCAN IPRAC 集群要跑得稳网络规划是第一硬指标。每个节点至少需要两张网卡一张走公网对外提供数据库服务一张走私网负责节点之间的心跳通信。公网网卡建议命名为 eth0私有网卡 eth1。在安装 GI 时Oracle 会自动识别网卡的子网如果你公网和私网子网重叠集群会直接拒绝配置。常见的做法是公网用 192.168.1.0/24私网用 10.10.10.0/24不要混在一个子网里。机器名我习惯叫 rac1、rac2对应 IP 如下# /etc/hosts 示例 192.168.1.11 rac1.example.com rac1 192.168.1.12 rac2.example.com rac2 192.168.1.20 rac-scan.example.com rac-scan 192.168.1.21 rac-scan-vip1.example.com rac-scan-vip1 192.168.1.22 rac-scan-vip2.example.com rac-scan-vip2 10.10.10.11 rac1-priv.example.com rac1-priv 10.10.10.12 rac2-priv.example.com rac2-privSCAN IP 是 RAC 对外统一入口客户端只连这一个名字由 GI 自动分发到存活节点。SCAN IP 必须与公网同一子网并且建议用 DNS 解析实验环境没 DNS就用 /etc/hosts 手工挡一下。尤其要注意SCAN IP 要配 3 个对应 3 个 SCAN 监听器但实验环境配 1 个也能工作图省事就写一个。私网网卡一定不要配网关不要配 DNS否则心跳流量走错网卡会导致节点驱逐这种坑我在生产上见过不止一次。2.2 内核参数与用户环境19c 的硬指标19c 安装前Oracle 的安装向导会做一系列 precheck不过与其等它报错不如自己先把参数都调好。直接贴一份我常用的配置复制即可用# /etc/sysctl.conf 追加 fs.aio-max-nr1048576 fs.file-max6815744 kernel.shmall1073741824 kernel.shmmax4398046511104 kernel.shmmni4096 kernel.sem250 32000 100 128 net.ipv4.ip_local_port_range9000 65500 net.core.rmem_default262144 net.core.rmem_max4194304 net.core.wmem_default262144 net.core.wmem_max1048576 net.ipv4.conf.all.rp_filter2 net.ipv4.conf.default.rp_filter2执行sysctl -p让配置生效。然后改 limits# /etc/security/limits.d/oracle-db19c.conf oracle soft nproc 2047 oracle hard nproc 16384 oracle soft nofile 1024 oracle hard nofile 65536 oracle soft stack 10240 oracle hard stack 32768 grid soft nproc 2047 grid hard nproc 16384 grid soft nofile 1024 grid hard nofile 6553619c 要求 grid 用户和 oracle 用户最好是同等的资源限制别只改 oracle 不改 grid。很多朋友装 GI 时碰到“Failed to start Oracle Clusterware”的诡异问题回头一看是 grid 用户的 nofile 没配上。2.3 用户、组与目录结构RAC 环境下必须分开两个操作系统用户grid 用户管 GIoracle 用户管数据库软件。这是 19c 的强制要求。对应组也不一样grid 的主组是 oinstall辅助组是 dba、asmadmin、asmdba、asmoperoracle 的主组是 oinstall辅助组是 dba、oper、asmdba新建用户的命令如下groupadd oinstall groupadd dba groupadd oper groupadd asmadmin groupadd asmdba groupadd asmoper useradd -g oinstall -G dba,asmdba grid useradd -g oinstall -G dba,oper,asmdba oracle目录结构一般保持默认GI 装在/u01/app/19.0.0/grid数据库软件装在/u01/app/oracle/product/19.0.0/dbhome_1oracle 用户的基础目录是/u01/app/oracle。记得/u01的属组要设为 oinstall权限 775否则安装向导会抱怨权限不对。到这里基础配置就算齐了。这几步看着琐碎但对后面图形化安装能否顺滑进行有决定性的影响。我一般会在这些底层配置上花掉 40 分钟因为这是整个流程里最不该省时间的地方。3. Grid Infrastructure 图形化安装全场最易翻车区3.1 启动安装前的三分钟自检当你下载好 19c GI 的安装包通常在LINUX.X64_193000_grid_home.zip里把 zip 上传到 rac1 节点并解压到 GI 的 HOME 目录之后别急着点./gridSetup.sh。先做一遍三分钟快速自检比什么都管用两个节点的/etc/hosts是否完全一致。两个节点的时间差是否在 30 秒内建议配 NTP。实验环境如果没 NTP至少要手工date看一遍差太多集群直接拒绝启动。共享磁盘在 rac1 和 rac2 上是否都已经识别设备名是否一致比如两边都要看到/dev/sdb、/dev/sdc、/dev/sdd而且大小对得上。第二点尤其重要我有一次在 VMware 里克隆虚拟机忘了在模板里把时间同步关掉结果 GI 装完节点 2 老是报“timeout waiting for a reply”后来强制同步时间才解决。另外在 Linux 上跑图形安装建议先在 xterm 里执行export DISPLAY客户端IP:0.0 xhost 如果你用的是 MobaXterm打开 X11 forwarding 后DISPLAY 会自动设置省掉这一步。确认xclock能弹出窗口再继续图形界面起不来后面全白搭。3.2 安装向导各屏详解与截图级参数建议启动gridSetup.sh后向导会一步步引导。我把每一屏容易犹豫的选项一次说清楚照着做就行。第一屏是“配置选项Configure Options”选默认的“创建新集群Create and configure a new cluster”这个是新建 RAC别选第二项“添加节点”或第三项“仅升级”。第二屏是集群名称和网络配置。集群名称截建议rac-clusterSCAN 名称填/etc/hosts里预置的rac-scan.example.com。在这里能看到公网网卡和私网网卡的识别结果注意核对一下网卡对应的子网如果 Oracle 把私网网卡识别成公网你要在这里手工调整。第三屏是“SSH 互信配置SSH connectivity”。这一步向导会要求你输入 grid 用户的密码在两台机器之间自动配置 SSH 互信。如果是实验环境建议直接在这关掉密码手工配互信因为后面 DB 安装和 DBCA 也需要互信一次配好能用很久。配互信的命令很简单su - grid mkdir ~/.ssh chmod 700 ~/.ssh ssh-keygen -t rsa -N -f ~/.ssh/id_rsa ssh-copy-id rac1 ssh-copy-id rac2配完记得ssh rac1 date ssh rac2 date测试一下。第四屏是“存储选项Storage Option”。选“灵活 ASM 存储Oracle ASM”不要选“使用共享文件系统”那个选项因为 RAC 最正统的存储方式就是 ASM。然后在这里添加磁盘组我习惯建两个第一个叫DATA冗余策略选“外部External”把数据盘放进去第二个叫FRA同样外部冗余放恢复盘。至于 OCR 和 Voting Disk19c 会自动把它们放到数据磁盘组里不需要额外建第三个磁盘组。第五屏是 ASM 的 SYS 口令和监控账号口令设置。注意口令不能太短Amazon 这套校验规则还挺严格的建议用至少 9 位、含大小写和数字的密码。选“作为操作系统组自动管理账号”这样就不用后面手工改权限。第六屏是“管理选项Management Options”新手可以直接不勾选 EM Express省去端口配置的麻烦。注册到 EM 这个坑后面每次启动都会多出一堆服务和日志纯练手没意义。第七屏是“操作系统组Operating System Groups”。ASM 管理组选asmadminASM 数据库组选asmdbaASM 监视组选asmoper与 2.3 小节里建的组完全对应。这里注意下拉框里没有的组说明你前面 groupadd 漏了。第八屏是安装前的预检查。预检查会列出所有不满足的项直接看错误即可如果报“缺少软件包”就先yum install -y补齐再点“检查并重试”。这里最容易漏的包是compat-libcap1、libXp、libaio-devel装上再说。所有检查通过后向导会要求你执行两条 root 脚本。先不要点“确定”先手动到两个节点上执行。脚本路径通常显示在屏幕下方比如/u01/app/19.0.0/grid/root.shroot.sh 是 GI 安装过程中最容易超时的地方因为它要在两个节点上启动 Oracle Clusterware 进程。执行时记得两个节点各跑一次而且要在同一个窗口里看完整日志如果卡住超过 5 分钟没动静多半是共享磁盘权限或网络心跳问题等下脚本失败会直接报错。3.3 最容易卡死的执行阶段root.sh 避坑细节root.sh 执行到一半停下来不动的十次有八次是同一种情况时间不同步。我自己解决过的现场案例是因为 VirtualBox 里两台虚机的时钟各差了一分多钟导致 CSS 和 CRS 资源迟迟起不来。遇到这类卡顿先快速比对两节点时间然后强制同步到同一时间源再重跑 root.sh。重跑前记得清理半成品状态/u01/app/19.0.0/grid/crs/install/roothas.pl -deconfig -force如果是生产环境没有 deconfig 这回事那就得靠日志诊断了。日志路径在/u01/app/19.0.0/grid/crs/log/下按节点名和时间戳分目录打开 alert 日志看报错。新手最容易忽略的是 root.sh 执行完之后的输出提示要仔细看是否出现“The command completed successfully”的字样我见过有人只执行了其中一个节点的 root.sh然后整个集群半死不活的。root.sh 全部跑通后回到安装向导点“确定”GI 安装才算真正完成。接着执行下面的状态检查确认集群处于正常状态crsctl status resource -t crsctl status cluster -all看到CRS-4537: Cluster Ready Services is online这类输出说明 GI 已经在线可以进数据库软件安装了。4. 数据库软件安装与 DBCA 创建 RAC 库4.1 数据库软件图形化安装只需本地节点GI 装完后接下来这一步跟普通单机数据库安装界面很像但有个细微差别19c 的数据库软件安装向导会让你选择“集群数据库安装Oracle Real Application Clusters database installation”还是“单实例数据库安装”。这里一定要选“集群数据库安装”否则 DBCA 后面根本找不到集群选项。在 rac1 上解压数据库软件安装包到/u01/app/oracle/product/19.0.0/dbhome_1然后以 oracle 用户执行cd /u01/app/oracle/product/19.0.0/dbhome_1 ./runInstaller向导的前几步会和 GI 安装时高度类似也会做 SSH 互信检查、操作系统组配置。区别在于这里用的操作系统用户是 oracle不是 grid。在选择安装语言时建议把英文和简体中文都勾上虽然装完界面还是英文为主但后续日志有中文说明时会容易排查。选择“仅安装数据库软件Setup software only”还是“安装并创建数据库Install and configure”建议选“仅安装”因为我要在下一步单独用 DBCA 精细控制数据库的创建这也是生产环境最常用的方式降低一步到位的出错面。数据库版本选“企业版Enterprise Edition”。最后一屏同样要求以 root 执行/u01/app/oracle/product/19.0.0/dbhome_1/root.sh。这台脚本会创建 oracle 用户的相关目录和 odb 监听跑得很快不像 GI 的 root.sh 那么磨人。之后点“确定”结束数据库软件安装。4.2 用 DBCA 创建 RAC 数据库时的关键选项数据库软件装完用 oracle 用户在 rac1 上执行dbca会弹出“数据库操作Database Operation”页面。这里选择“创建数据库Create Database”高级模式里有一项“RAC 数据库”默认就是集群模式你还得在“节点选择Node Selection”里确认 rac1 和 rac2 都被勾选。下面的选项逐个说清楚模板选“通用或事务处理General Purpose or Transaction Processing”练手用这个最平衡选的“数据仓库”模板会包含更多表空间配置新手看着容易懵。全局数据库名字填类似orcl的短名SID 前缀会自动变为orcl1、orcl2这正好对应每个节点上的第二个实例。存储类型选“Oracle ASM”磁盘组选DATA。恢复区选FRA并设置合适的大小比如 50GB。关于“数据库闪回Flashback”和“归档模式Archive Log Mode”新手可以先勾选闪回归档先放一放因为归档会在 FRA 里自动堆积而且实验环境通常不需要。内存配置建议默认 AMM 关闭、使用 ASMM如果虚拟机内存只有 8GB把 SGA 目标设为 4GBPGA 目标设为 1GB省点内存跑系统。全部配置好DBCA 会弹出一份摘要确认无误后点“完成”接下来就是一段长时间的创建过程。在“进度Progress)”页面上会显示每个节点的创建步骤如果某个节点执行失败右侧日志里通常会写明原因。等进度条全部走完DBCA 会提示让你以 root 执行/u01/app/oracle/product/19.0.0/dbhome_1/root.sh照做即可。创建完成后DBCA 会自动给集群注册数据库服务和监听SCAN 监听器也由 GI 管理不用你自己手工netca配置监听。很多新手在这会困惑怎么没让我配 listener.ora因为 19c 里 SCAN 监听已经被 GI 接管了普通监听文件只在单实例场景下需要手工处理。4.3 验证集群与数据库服务是否真正可用建库完成后不要急着写业务代码先把三件事验证一遍才说明你的 RAC 真正站住了。第一件确认集群资源在线crsctl status resource -t输出里应该能看到ora.orcl.db数据库、ora.DATA.dg磁盘组、ora.scan1.vip、ora.ons等资源都处于 ONLINE 状态。第二件确认两节点实例都启动srvctl status database -d orcl输出应为“数据库 orcl 正在运行实例 orcl1 在 rac1 上实例 orcl2 在 rac2 上”。如果只有 orcl1多半是在 DBCA 创建时没把 rac2 选进去或 rac2 的 CRS 资源没起来。第三件用 sqlplus 连 SCAN 地址实测sqlplus system/passwordrac-scan.example.com:1521/orcl能连上说明 SCAN 监听、远程连接调度都通了。你要是心大可以把 rac1 的实例手动停掉再试照样能连到 rac2这才叫 RAC。个人经验练手阶段最好做一次srvctl stop instance -d orcl -i orcl1再srvctl start instance -d orcl -i orcl1把实例级启停流程也过一遍后面巡检和故障切换就不会慌。5. 常见问题与排查技巧实录5.1 图形界面起不来或窗口闪退图形界面起不来是新手第一杀手。如果你执行gridSetup.sh后终端弹出错误、闪退或者远程 X11 窗口一片黑先检查 DISPLAY 是否设置成功。一个快速验证方式echo $DISPLAY xclock如果 DISPLAY 为空在客户端工具里打开 X11 forwarding再重新登录。若 xclock 能弹窗但安装向导闪退多半是缺少图形库安装下面几个包再来yum install -y libXp libXt libXtst libXrender libXrandr另外 19c 安装对 Java 环境和字体也有要求缺字体时界面会异常卡顿。直接装dejavu-sans-fonts和xorg-x11-fonts-*实测能解决 90% 的界面渲染问题。5.2 时间同步、DNS 与 SCAN 解析问题集群脑裂和节点驱逐最常见的诱因就是时间漂移。RAC 要求节点间时间差小于 500ms越好cluster 越强。虚拟机上一定要保证底层宿主机时钟稳定否则就算你配了 NTP宿主机动一下虚拟机动一下照样被踢。SCAN 解析方面如果客户端连接时报ORA-12545: Connect failed because target host or object does not exist先确认 DNS 和/etc/hosts的 SCAN IP 是否可达。实验环境只用/etc/hosts的话注意客户端机器也要配一条 SCAN 到 IP 的映射因为 SCAN 名字不是公网上真实注册的域名。还有个小坑/etc/nsswitch.conf里 hosts 的解析顺序必须是files dns如果你误配成dns files当 DNS 不服务时会导致 SCAN 解析超时十几秒才报错查起来非常憋屈。5.3 权限、磁盘与 ASM 挂载问题速查ASM 算是 RAC 特有的重灾区。比较常见的问题是共享磁盘在 grid 用户下看不到或者磁盘权限不对。检查以下两个命令ls -l /dev/sd* ll /dev/oracleasm/disks/如果用 ASMLib 方式配置磁盘共享盘的 owner 应为grid:asmadmin权限 660。如果用多路径设备如/dev/mapper/也要确保 grid 用户能访问对应字符设备。ASM 磁盘组挂载失败的典型报错是ORA-15032: not all alterations performed这种往往是设备名在两台机器上不一致造成的。比如 rac1 上 DATA 盘叫/dev/sdcrac2 上叫/dev/sddASM 用设备名识别时就会错乱。解决方法是使用稳定的设备标识UDEV 规则或 ASMLib 的标签把磁盘在两边统一命名。这也是我前面强调要在共享盘上做 UDEV 规则的原因。命令顺带贴一个 19c 常用的 UDEV 绑定示例echo KERNEL\sd*\, SUBSYSTEM\block\, PROGRAM\/usr/lib/udev/scsi_id -g -u -d /dev/\$name\, RESULT\36000c29xxxxxxxx\, SYMLINK\asm-disk1\, OWNER\grid\, GROUP\asmadmin\, MODE\0660\ /etc/udev/rules.d/99-oracle-asm.rules udevadm control --reload-rules udevadm trigger重启后确认/dev/asm-disk1存在再进 ASM 里把它加到磁盘组。6. 说到最后真心建议你动手之前先做两件事第一次接触 RAC 的人我总会提醒两件事。第一别照着某个视频一步不差地敲那只会让你在出错的时候无从下手。先把整体架构图在纸上画一遍知道 GI、ASM、监听、数据库实例各自负责什么哪怕安装时某个参数选错了也能根据日志去判断是哪一层出来问题。第二给自己留个还原点。虚拟机环境里在开始安装之前拍一个干净快照进 GI 安装之前再拍一个快照。这样就算 root.sh 跑到一半把集群搞坏最多回滚几分钟不用从头开始搭环境和调内核参数。跟着这个流程走下来正常情况下两个半小时到三小时就能看到一个双节点的 RAC 数据库在 SCAN 监听后面稳定跑起来。接下来你可以试着停一个节点看应用是否感知不到中断再慢慢摸索 ASM 磁盘组扩容、监听日志排查、补丁升级这些进阶操作。RAC 这东西安装只是入了个门真正考验功力的是它日常运行时的状态判断。不过你只要经历了这一整轮图形化安装底层这些资源、网络、存储之间的关系基本就印在脑子里了。