简介:本资源是一份面向DBA、Oracle运维工程师及高可用架构学习者的实战部署指南,聚焦Linux 7.9环境下Oracle 19C RAC集群的完整落地实践,解决多节点协同、共享存储配置、ASM磁盘组管理及集群服务启动等核心难点。文档以VMware Workstation Pro 16.1为实验平台,覆盖系统规划(主机/网络/数据库集群)、环境配置(防火墙、NTP、sysctl、limits、YUM源、iSCSI存储)、Grid Infrastructure安装、19C数据库实例部署及健康检查全流程,目录结构清晰,含30余项子模块与命令验证要点。资源为单个PDF文件,共10.13MB,内容详实,图文结合,适合作为RAC部署操作手册或故障排查参考。目前已有601人学习下载,特别适合需在类生产虚拟环境中复现RAC搭建过程的中级以上Oracle技术人员。
1. 为什么在 Linux 7.9 上部署 Oracle 19c RAC 不是“照着文档点下一步”就能成功的硬仗?
你手头那份标着“详细安装部署文档.pdf”的文件,大概率是某位前辈在 Red Hat 7.9 或 CentOS 7.9 环境下踩过坑后整理的实操笔记——但别急着打印装订。真实现场里,Oracle 19c RAC 在 Linux 7.9(特指 kernel 3.10.0-1160 及后续 EL7.9 内核)上部署失败,80% 不出在这份 PDF 的步骤错漏,而出在三个被文档默认忽略的“静默前提”:udev 规则未绑定到 ASM 磁盘的 WWID 而非 /dev/sdX、GI 安装前未验证 cvuqdisk 包版本与内核模块兼容性、OCR/Voting Disk 所在 ASM 磁盘组未启用compatible.asm=12.2且au_size=4M强制对齐。这不是理论问题,而是我去年在某省政务云项目里连续 7 次 OCR 初始化失败后,用strace -e trace=open,ioctl /u01/app/19.0.0/grid/bin/crsctl start crs抓出的 syscall 级报错根源。如果你正面对一台刚重装的 Linux 7.9 物理服务器或虚机,且目标是上线生产级 RAC(非单实例+Data Guard),这篇笔记就不是“教程”,而是把 PDF 文档里没写的、OS 层必须卡死的 5 个临界点,用可验证命令+参数逻辑+翻车现场还原出来。适合 DBA、系统工程师、信创项目实施人员——尤其当你发现root.sh卡在 “CRS-2672: Attempting to start ‘ora.cssd’” 时,别再查日志了,先看这五条。
2. 从裸机到 GI 安装前:Linux 7.9 系统层必须闭环的 5 个硬性条件
Oracle 19c RAC 对 Linux 7.9 的要求不是“能跑就行”,而是“每个子系统都得按 Oracle 认证路径走”。PDF 文档常把这部分压缩成“安装依赖包”一句带过,但实际部署中,这里埋着最多血泪经验。以下 5 项必须全部验证通过,缺一不可,否则gridSetup.sh启动前就会被 CVU(Cluster Verification Utility)直接拦截。
2.1 验证内核参数与资源限制:不是改完/etc/sysctl.conf就生效
Oracle 19c RAC 要求kernel.shmall、kernel.shmmax、fs.file-max等参数必须满足最小阈值,但更关键的是:这些参数必须在sysctl -p执行后,被ipcs -lm和ulimit -a实时反映。常见翻车点是kernel.shmall设置为物理内存页数(如1073741824),但ipcs -lm显示max seg size (kbytes)仍为默认值——这是因为kernel.shmmax未同步设置为kernel.shmall * 4096(页大小)。正确闭环验证命令:
# 设置内核参数(示例:64G内存) echo 'kernel.shmall = 16777216' >> /etc/sysctl.conf echo 'kernel.shmmax = 68719476736' >> /etc/sysctl.conf # 64G * 1024*1024 echo 'fs.file-max = 6815744' >> /etc/sysctl.conf sysctl -p # 必须验证:shmall 和 shmmax 是否被内核真正加载 ipcs -lm | grep -E "(max seg|max total)" # 输出应为:max seg size (kbytes) = 67108864(即64G) # max total shared memory (kbytes) = 67108864 # 验证 ulimit(需在 oracle 用户下执行) su - oracle -c "ulimit -a" | grep -E "(open files|pending signals|max locked memory)" # open files 应 ≥ 65536,pending signals 应 ≥ 65536,max locked memory 应 ≥ 16384提示:
ulimit设置必须写入/etc/security/limits.d/oracle-rac.conf(而非仅/etc/security/limits.conf),且文件名需以.conf结尾,否则 RHEL/CentOS 7.9 的 PAM 加载机制会忽略它。这是 PDF 文档极少注明的细节。
2.2 udev 绑定 ASM 磁盘:用 WWID 而非设备名,且规则必须 reload
RAC 要求所有节点看到的 ASM 磁盘路径完全一致(如/dev/asm-disk1),而 Linux 7.9 的sdX设备名在重启后极易漂移。PDF 常教用scsi_id获取 WWID,但实际必须用scsi_id --whitelisted --replace-whitespace --device=/dev/sdX(注意--whitelisted参数,否则在某些 HBA 卡上返回空)。绑定规则必须写入/etc/udev/rules.d/99-oracle-asmdevices.rules并触发 reload:
# 获取磁盘 WWID(以 /dev/sdb 为例) scsi_id --whitelisted --replace-whitespace --device=/dev/sdb # 输出类似:36000c29d8b1a3f4e7a8c1d2e3f4a5b6c # 编写 udev 规则(每块磁盘一行) echo 'KERNEL=="sd[b-z]", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/\$name", RESULT=="36000c29d8b1a3f4e7a8c1d2e3f4a5b6c", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660"' > /etc/udev/rules.d/99-oracle-asmdevices.rules # 重载 udev 规则并触发 udevadm control --reload-rules udevadm trigger --subsystem-match=block # 验证:ls -l /dev/asm* # 必须看到 /dev/asm-disk1 -> /dev/sdb,且权限为 grid:asmadmin注意:
PROGRAM中的路径/usr/lib/udev/scsi_id在 RHEL 7.9 中是标准位置;若用which scsi_id得到/sbin/scsi_id,则必须用绝对路径/usr/lib/udev/scsi_id,否则 udev 规则不生效——这是udevadm test日志里最常被忽略的路径错误。
2.3 cvuqdisk 包版本与内核模块兼容性:GI 安装前必须手动验证
cvuqdisk是 Oracle Clusterware 的核心守护进程,其 RPM 包(cvuqdisk-1.0.10-1.rpm)必须与当前内核版本严格匹配。PDF 文档常直接让rpm -ivh cvuqdisk-1.0.10-1.rpm,但在 Linux 7.9(kernel 3.10.0-1160.el7.x86_64)上,该 RPM 内置的cvuqdisk.ko模块可能因内核符号变化而加载失败。验证方法:
# 安装后检查模块是否可加载 rpm -ivh cvuqdisk-1.0.10-1.rpm modprobe -n cvuqdisk 2>&1 | grep -q "Invalid module" && echo "ERROR: cvuqdisk.ko 不兼容当前内核" || echo "OK: cvuqdisk 模块可加载" # 若报错,需从 Oracle Support 下载对应内核的 cvuqdisk(如 Patch 32222222),或手动编译: # cd /u01/app/19.0.0/grid/cv/rpm # make -f ins_cv.mk install ORACLE_HOME=/u01/app/19.0.0/grid血泪经验:
root.sh执行到Creating /etc/oracle/ocr.loc时卡住,tail -f /u01/app/oraInventory/logs/installActions*.log里出现cvuqdisk: Unknown symbol in module,就是这个模块不兼容。此时modprobe cvuqdisk会直接报错,但root.sh不会明确提示。
2.4 时间同步服务:chrony 必须配置为集群内主从模式,禁用 ntpd
Linux 7.9 默认使用chrony,但 RAC 要求所有节点时间差 ≤ 500ms,且必须由一个节点作为 NTP 主源(如node1),其他节点只向其同步。PDF 常写“配置 chrony”,但未强调makestep和rtcsync必须启用,否则虚拟机环境因时钟漂移导致 CRS 启动失败:
# node1(主节点)/etc/chrony.conf server 127.0.0.1 iburst allow 192.168.1.0/24 # 允许集群网段 local stratum 10 keyfile /etc/chrony.keys driftfile /var/lib/chrony/drift makestep 1 3 # 误差>1秒时立即校正(关键!) rtcsync # 同步硬件时钟(关键!) # node2 /etc/chrony.conf server 192.168.1.101 iburst # 指向 node1 IP keyfile /etc/chrony.keys driftfile /var/lib/chrony/drift makestep 1 3 rtcsync # 重启服务并验证 systemctl restart chronyd chronyc sources -v # node2 应显示 ^* 表示已同步 node1 chronyc tracking # offset 应 < 500ms玄学警告:若
chronyc tracking显示Offset为+0.000000000且Root dispersion> 1000ms,说明makestep未生效,需检查chrony.conf是否被/etc/chrony.d/*.conf覆盖。
2.5 网络配置:public/private/ASM 网络必须物理隔离,且私网禁用防火墙
RAC 的 public(业务)、private(心跳)、ASM(存储)三网必须物理分离(不能 VLAN 划分),且 private 网卡必须禁用所有防火墙(包括firewalld和iptables)。PDF 常说“关闭防火墙”,但实际需彻底禁用:
# 禁用 firewalld(RHEL 7.9 默认) systemctl stop firewalld systemctl disable firewalld # 清空 iptables 规则并禁用服务 iptables -F systemctl stop iptables systemctl disable iptables # 验证:private 网卡(如 enp0s8)无任何 INPUT/OUTPUT 规则 iptables -L INPUT -v -n | grep enp0s8 # 应无输出翻车现场:
cluvfy comp nodecon -n node1,node2 -verbose报错PRVF-7611 : The specified network interface does not exist or is not configured properly,往往是因为enp0s8被firewalld的 zone 自动绑定了,即使firewalld已 stop,nmcli dev show enp0s8仍显示ZONE: public。解决:nmcli con mod "System enp0s8" connection.zone ""。
3. Grid Infrastructure 安装:绕过图形界面,用响应文件静默部署的完整链路
gridSetup.sh图形界面在远程服务器上极易因 X11 转发失败而中断,且无法审计参数。PDF 文档虽提供响应文件模板,但关键参数缺失或错误会导致root.sh失败。以下是以responsefile.rsp为核心的静默安装全链路,覆盖从解压到root.sh成功的每一步。
3.1 准备响应文件:必须显式指定 ASM 磁盘组属性与 OCR 位置
Oracle 19c RAC 的响应文件必须精确控制 ASM 磁盘组创建参数,尤其是DATA和RECO磁盘组的au_size和compatible.asm。PDF 常用默认值,但 Linux 7.9 上必须强制设为4M和12.2,否则 OCR 初始化失败:
# 生成响应文件模板(基于 $GRID_HOME/install/response/gridsetup.rsp) cp $GRID_HOME/install/response/gridsetup.rsp responsefile.rsp # 修改关键参数(用 sed 或编辑器) sed -i 's/^oracle.install.option=.*/oracle.install.option=CRS_CONFIG/' responsefile.rsp sed -i 's/^ORACLE_BASE=.*/ORACLE_BASE=\/u01\/app\/oracle/' responsefile.rsp sed -i 's/^INSTALL_UPDATES_SELECTION=.*/INSTALL_UPDATES_SELECTION=false/' responsefile.rsp sed -i 's/^oracle.install.crs.config.gpnp.scanName=.*/oracle.install.crs.config.gpnp.scanName=scan-cluster/' responsefile.rsp sed -i 's/^oracle.install.crs.config.gpnp.scanPort=.*/oracle.install.crs.config.gpnp.scanPort=1521/' responsefile.rsp sed -i 's/^oracle.install.crs.config.clusterName=.*/oracle.install.crs.config.clusterName=cluster01/' responsefile.rsp sed -i 's/^oracle.install.crs.config.gpnp.configureGNS=.*/oracle.install.crs.config.gpnp.configureGNS=false/' responsefile.rsp sed -i 's/^oracle.install.crs.config.sites=.*/oracle.install.crs.config.sites=site1/' responsefile.rsp sed -i 's/^oracle.install.crs.config.storageOption=.*/oracle.install.crs.config.storageOption=ASM/' responsefile.rsp sed -i 's/^oracle.install.crs.config.useIPMI=.*/oracle.install.crs.config.useIPMI=false/' responsefile.rsp sed -i 's/^oracle.install.crs.config.networkInterfaceList=.*/oracle.install.crs.config.networkInterfaceList=enp0s3:192.168.1.0:1,enp0s8:10.0.0.0:5/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.name=.*/oracle.install.crs.config.diskGroup.name=DATA/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.redundancy=.*/oracle.install.crs.config.diskGroup.redundancy=EXTERNAL/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.AUSize=.*/oracle.install.crs.config.diskGroup.AUSize=4M/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.compatible.asm=.*/oracle.install.crs.config.diskGroup.compatible.asm=12.2/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.disks=.*/oracle.install.crs.config.diskGroup.disks=\/dev\/asm-disk1,\/dev\/asm-disk2/' responsefile.rsp sed -i 's/^oracle.install.crs.config.diskGroup.disks.SYSASMPassword=.*/oracle.install.crs.config.diskGroup.disks.SYSASMPassword=YourStrongPass123!/' responsefile.rsp参数说明:
AUSize=4M是 Linux 7.9 上 ASM 磁盘组的黄金值,小于 4M(如 1M)会导致 OCR 初始化时ORA-15018: diskgroup cannot be created;compatible.asm=12.2是 19c 强制要求,低于此值root.sh会报ORA-15221: ASM operation requires compatible.asm of at least 12.2。
3.2 静默执行 gridSetup.sh:必须捕获 stdout/stderr 并验证日志
静默安装不是./gridSetup.sh -silent -responseFile responsefile.rsp一条命令完事,必须重定向日志并实时监控:
# 创建日志目录 mkdir -p /tmp/grid_install_logs # 执行安装(后台运行,避免 SSH 断连) nohup ./gridSetup.sh -silent -responseFile /path/to/responsefile.rsp \ -ignorePrereqFailure \ > /tmp/grid_install_logs/grid_setup.out 2> /tmp/grid_install_logs/grid_setup.err & # 实时跟踪关键日志(安装过程约 30-60 分钟) tail -f /tmp/grid_install_logs/grid_setup.err | grep -E "(ERROR|FATAL|ORA-|CRS-)" # 正常结束标志:日志末尾出现 "Successfully Setup Software." 和 "Please run the following script as root"逻辑说明:
-ignorePrereqFailure是双刃剑——它允许跳过 CVU 的部分警告(如 DNS 解析慢),但必须确保responsefile.rsp中的网络、磁盘、内核参数已 100% 正确,否则会掩盖致命错误。建议首次安装时去掉此参数,待 CVU 全绿后再加。
3.3 root.sh 执行:必须分节点顺序执行,且监控 crsctl 状态
root.sh是 GI 安装的临门一脚,但 PDF 常忽略其执行顺序和状态验证。必须严格按node1 → node2执行,且每节点执行后立即验证 CRS 状态:
# node1 执行(等待完成) /u01/app/19.0.0/grid/root.sh # 等待输出 "Successfully configured Oracle Grid Infrastructure for a Cluster" 后执行: crsctl check cluster -all # 输出应为: # node1: CRS-4537: Cluster Ready Services is online # node2: CRS-4535: Cannot communicate with Cluster Ready Services # node2 执行(此时 node1 CRS 已启动) /u01/app/19.0.0/grid/root.sh # 等待完成后立即验证: crsctl check cluster -all # 两节点均应显示 "CRS-4537: Cluster Ready Services is online" crsctl stat res -t | head -20 # 查看资源状态,ora.DATA.dg 应 ONLINE避坑:若
crsctl check cluster -all在 node2 显示CRS-4535,说明 private 网络不通或cvuqdisk未加载。此时不要重复执行root.sh,先systemctl status cvuqdisk和ping -I enp0s8 node1排查。
4. 避坑:RAC 安装中最常触发的 5 类硬性故障及根因定位法
部署 RAC 最痛苦的不是步骤多,而是报错信息高度抽象,日志分散在 10+ 个目录。以下 5 类故障,按发生频率排序,每类给出现象、根因、定位命令和解决动作。这些不是“可能”,而是我在 12 个 RAC 项目中亲手复现并修复的现场记录。
4.1 OCR 初始化失败:ORA-15018 / ORA-15221
- 现象:
root.sh执行到Creating OCR keys for user 'grid'...后卡住,/u01/app/oraInventory/logs/installActions*.log出现ORA-15018: diskgroup cannot be created或ORA-15221: ASM operation requires compatible.asm of at least 12.2 - 原因:ASM 磁盘组
compatible.asm未设为12.2,或au_size小于4M,导致 OCR 所需的 4MB AU 无法分配。 - 定位:
cat /u01/app/oraInventory/logs/installActions*.log | grep -A 10 -B 10 "ORA-15018" - 解决:重新运行
gridSetup.sh,确保responsefile.rsp中oracle.install.crs.config.diskGroup.compatible.asm=12.2且oracle.install.crs.config.diskGroup.AUSize=4M;若已失败,需dd if=/dev/zero of=/dev/asm-disk1 bs=1M count=100清空磁盘再重试。
4.2 CSSD 启动失败:CRS-2672 / CRS-2101
- 现象:
root.sh卡在CRS-2672: Attempting to start 'ora.cssd',/u01/app/19.0.0/grid/log/node1/cssd/ocssd.log持续刷CRS-2101: The OCR was not found或Could not open device /dev/asm-disk1 - 原因:udev 规则未生效,
/dev/asm-disk1不存在或权限不对(非grid:asmadmin);或cvuqdisk模块未加载。 - 定位:
ls -l /dev/asm*和dmesg | grep cvuqdisk - 解决:
udevadm trigger --subsystem-match=block+ls -l /dev/asm*确认链接存在;modprobe cvuqdisk验证模块;若失败,重装cvuqdiskRPM 或手动编译。
4.3 SCAN VIP 无法注册:CRS-2101 / TNS-12535
- 现象:
crsctl stat res -t中ora.scan1.vip状态为INTERMEDIATE,nslookup scan-cluster返回空,tnsping scan-cluster超时。 - 原因:DNS 未配置 SCAN 名称解析(
scan-cluster必须 A 记录指向 3 个 VIP),或grid用户的TNS_ADMIN环境变量未设,导致srvctl无法读取tnsnames.ora。 - 定位:
nslookup scan-cluster和su - grid -c "srvctl config scan" - 解决:在 DNS 服务器添加
scan-cluster IN A 192.168.1.101、scan-cluster IN A 192.168.1.102、scan-cluster IN A 192.168.1.103;su - grid -c "echo 'export TNS_ADMIN=$ORACLE_HOME/network/admin' >> ~/.bash_profile"
4.4 节点间心跳超时:CRS-4678 / CRS-4638
- 现象:
crsctl check cluster -all显示node2: CRS-4535,/u01/app/19.0.0/grid/log/node1/cssd/ocssd.log出现CLSF-10001: Unable to connect to the CSS daemon - 原因:private 网络(
enp0s8)被firewalld或iptables拦截,或chrony时间不同步(offset > 500ms)。 - 定位:
ping -I enp0s8 node2和chronyc tracking - 解决:
systemctl stop firewalld && systemctl disable firewalld;chronyc makestep强制校正;nmcli con mod "System enp0s8" connection.zone ""
4.5 ASM 磁盘组挂载失败:ORA-15032 / ORA-15017
- 现象:
crsctl stat res -t中ora.DATA.dg状态为OFFLINE,sqlplus / as sysasm执行select name,state from v$asm_diskgroup返回空。 - 原因:ASM 实例未启动(
ora.asm资源 OFFLINE),或磁盘权限为root:root而非grid:asmadmin。 - 定位:
crsctl stat res ora.asm和ls -l /dev/asm* - 解决:
crsctl start res ora.asm;若失败,chown grid:asmadmin /dev/asm*并udevadm trigger;确认grid用户umask为0022(非0002,否则 ASM 创建文件权限错误)。
5. 数据库软件安装与 RAC 实例创建:从单实例到双节点的最小可行路径
GI 安装成功后,数据库软件(database)安装和 RAC 实例创建是第二道关。PDF 文档常把这两步合并,但实际必须拆解:先静默安装 DB 软件(不建库),再用dbca静默建 RAC 库。跳过此拆解,dbca会因 GI 未完全就绪而报错。
5.1 静默安装 Oracle Database 软件:仅解压二进制,不初始化实例
DB 软件安装必须在 GI 完全启动后进行,且响应文件需禁用createAsContainerDatabase(RAC 不支持 CDB 直接建库,需后续用 DBCA):
# 解压 database.zip 到 /stage unzip linuxx64_193000_db_home.zip -d /stage # 准备响应文件(基于 $ORACLE_HOME/install/response/db_install.rsp) cp /stage/database/install/response/db_install.rsp db_install.rsp # 修改关键参数 sed -i 's/^oracle.install.option=.*/oracle.install.option=INSTALL_DB_SW_ONLY/' db_install.rsp sed -i 's/^ORACLE_HOSTNAME=.*/ORACLE_HOSTNAME=node1/' db_install.rsp sed -i 's/^UNIX_GROUP_NAME=.*/UNIX_GROUP_NAME=oinstall/' db_install.rsp sed -i 's/^INVENTORY_LOCATION=.*/INVENTORY_LOCATION=\/u01\/app\/oraInventory/' db_install.rsp sed -i 's/^SELECTED_LANGUAGES=.*/SELECTED_LANGUAGES=en,zh_CN/' db_install.rsp sed -i 's/^ORACLE_HOME=.*/ORACLE_HOME=\/u01\/app\/oracle\/product\/19.0.0\/dbhome_1/' db_install.rsp sed -i 's/^ORACLE_BASE=.*/ORACLE_BASE=\/u01\/app\/oracle/' db_install.rsp sed -i 's/^oracle.install.db.InstallEdition=.*/oracle.install.db.InstallEdition=EE/' db_install.rsp sed -i 's/^oracle.install.db.isCustomInstall=.*/oracle.install.db.isCustomInstall=true/' db_install.rsp sed -i 's/^oracle.install.db.customComponents=.*/oracle.install.db.customComponents=oracle.rdbms.util:19.0.0.0.0,oracle.rdbms.rman:19.0.0.0.0/' db_install.rsp # 静默安装(两节点均需执行) cd /stage/database ./runInstaller -silent -responseFile /path/to/db_install.rsp -ignorePrereqFailure -waitforcompletion # 完成后执行 root.sh(两节点) /u01/app/oracle/product/19.0.0/dbhome_1/root.sh注意:
INSTALL_DB_SW_ONLY是关键,它只安装二进制,不触发dbca。若设为CREATE_DB,runInstaller会因 GI 未就绪而失败。
5.2 用 DBCA 静默创建 RAC 数据库:必须指定 ASM 磁盘组与实例名
dbca是创建 RAC 实例的唯一可靠方式,响应文件必须显式指定storageType=ASM、asmsn=+DATA、asmsnRecovery=+RECO,且nodelist列出所有节点:
# 生成 DBCA 响应文件模板 $ORACLE_HOME/bin/dbca -silent -createDatabase -help | grep -A 50 "Response file" > dbca.rsp # 编辑 dbca.rsp(关键参数) echo 'gdbName=orcl' >> dbca.rsp echo 'sid=orcl' >> dbca.rsp echo 'databaseType=MULTIPURPOSE' >> dbca.rsp echo 'characterSet=AL32UTF8' >> dbca.rsp echo 'totalMemory=2048' >> dbca.rsp echo 'storageType=ASM' >> dbca.rsp echo 'asmsn=+DATA' >> dbca.rsp echo 'asmsnRecovery=+RECO' >> dbca.rsp echo 'nodelist=node1,node2' >> dbca.rsp echo 'templateName=General_Purpose.dbc' >> dbca.rsp echo 'emConfiguration=NONE' >> dbca.rsp echo 'datafileDestination=+DATA' >> dbca.rsp echo 'recoveryAreaDestination=+RECO' >> dbca.rsp echo 'automaticMemoryManagement=true' >> dbca.rsp echo 'redoLogFileSize=50' >> dbca.rsp echo 'listeners=LISTENER' >> dbca.rsp echo 'sampleSchema=false' >> dbca.rsp echo 'oratac=TRUE' >> dbca.rsp # 执行静默建库(在 node1 执行即可,DBCA 自动分发到 node2) $ORACLE_HOME/bin/dbca -silent -responseFile /path/to/dbca.rsp \ -ignorePreReqs \ > /tmp/dbca_create.log 2>&1 # 验证:两节点实例应 RUNNING srvctl status database -d orcl # 输出:Instance orcl_1 is running on node node1 # Instance orcl_2 is running on node node2参数说明:
asmsn=+DATA指定数据文件位置,asmsnRecovery=+RECO指定快速恢复区,nodelist=node1,node2告诉 DBCA 创建两个实例。-ignorePreReqs用于跳过内存检查(生产环境需确保 4G+ RAM)。
5.3 验证 RAC 连通性:用 SCAN 名称连接并查询实例分布
建库完成后,必须用 SCAN 名称连接,验证负载均衡和故障转移:
# 配置 tnsnames.ora($ORACLE_HOME/network/admin/tnsnames.ora) cat >> $ORACLE_HOME/network/admin/tnsnames.ora << 'EOF' ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = orcl) (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 180) (DELAY = 5) ) ) ) EOF # 测试连接(应轮询到 node1 或 node2) sqlplus system/YourPass123@ORCL << 'EOF' set linesize 200 col instance_name format a15 col host_name format a20 select instance_name, host_name, status from gv$instance; exit EOF # 输出应为两行:orcl_1 node1 OPEN;orcl_2 node2 OPEN技巧:
gv$instance是验证 RAC 实例在线的黄金视图,v$instance只显示当前连接的实例。若只看到一行,说明 SCAN VIP 未注册或监听器未启动。
6. 生产就绪检查清单:5 个必须执行的验证动作与 1 个我坚持十年的习惯
RAC 部署完成不等于生产就绪。PDF 文档止步于dbca成功,但真实运维中,以下 5 个验证动作决定系统能否扛住流量洪峰。它们不是“建议”,而是我经手的每个 RAC 项目上线前必做的 checklist,漏掉任意一项,都可能在半夜三点被电话叫醒。
6.1 OCR 和 Voting Disk 备份验证:手动触发并校验一致性
OCR 和 Voting Disk 是 RAC 的心脏,自动备份(ocrconfig -showbackup)可能失效。必须手动备份并校验:
# 手动备份 OCR ocrconfig -manualbackup # 输出类似:node1 2023/10/01 10:00:00 /u01/app/19.0.0/grid/cdata/cluster01/backup00.ocr # 校验备份完整性 ocrcheck -config # 输出应包含 "OCR integrity check passed" # 备份 Voting Disk(需在 ASM 实例中) sqlplus / as sysasm << 'EOF' ALTER DISKGROUP DATA BACKUP POWER OFF; EXIT EOF # 检查 ASM 日志确认备份完成 tail -n 20 /u01/app/19.0.0/grid/log/node1/asm/alert*.log | grep "BACKUP"教训:曾有个项目 OCR 自动备份路径
/u01/app/19.0.0/grid/cdata/cluster01/磁盘满,ocrconfig -showbackup仍
本文还有配套的精品资源,点击获取