必须先装 Grid Infrastructure,再装 Oracle Database;因为19c的oracle用户、监听、ASM及OCR/Voting Disk均依赖grid用户和GI_HOME,跳过GI会导致CVU验证失败、ORA-15032等错误。

必须先装 Grid Infrastructure,再装 Oracle Database
Oracle 19c 在 RHEL 7 上不能跳过 Grid Infrastructure 单独安装数据库软件——哪怕你只部署单实例。这是因为 19c 的 oracle 用户默认由 Grid 管理,监听、ASM、OCR/Voting Disk(即使非 RAC)都依赖 grid 用户和 GI_HOME 下的二进制。跳过 Grid 直接跑 runInstaller 会卡在“CVU 验证失败”,报错 PRVF-4657 : Service "cvuqdisk" is not running 或 ORA-15032: not all alterations performed。
实操建议:
- 下载两个独立压缩包:
LINUX.X64_193000_grid_home.zip(Grid)和LINUX.X64_193000_db_home.zip(Database),解压后分别进入目录执行安装 - Grid 安装必须用
grid用户(不能用oracle),且该用户需属于oinstall、asmadmin、asmdba、asmoper四个组 - 安装时选择 “Install and Configure Oracle Grid Infrastructure for a Standalone Server”,不是 “Set Up Oracle Grid Infrastructure for a Cluster”
- 安装完成后,务必运行
/u01/app/19.0.0/grid/root.sh(路径以你实际 GI_HOME 为准),否则crsctl check crs会显示CRS-4638: Oracle High Availability Services is online但 ASM 实例起不来
udev 规则必须绑定 ASM 磁盘,否则 /dev/asm-* 不出现
RHEL 7.6 默认不识别裸设备为 ASM 磁盘,asmcmd lsdsk 返回空,CREATE DISKGROUP 报 ORA-15018: diskgroup cannot be created。根本原因不是磁盘没分区,而是 udev 没把 SCSI 设备映射成持久化 /dev/asm-disk* 名称。
实操建议:
- 确认磁盘是否可用:
lsblk和fdisk -l | grep -E '^Disk /dev/sd',挑出未挂载、无文件系统的盘(如/dev/sdb) - 获取磁盘 WWID:
/usr/lib/udev/scsi_id -g -u -d /dev/sdb(输出类似36000c29d5b5a7e9e8f1a2b3c4d5e6f7) - 写 udev 规则:
/etc/udev/rules.d/99-oracle-asmdevices.rules中添加一行:KERNEL=="sd?", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/$name", RESULT=="36000c29d5b5a7e9e8f1a2b3c4d5e6f7", SYMLINK+="asm-disk1", OWNER="grid", GROUP="asmadmin", MODE="0660" - 重载规则:
udevadm control --reload-rules && udevadm trigger,然后检查ls -l /dev/asm-*是否出现对应设备节点
cvuqdisk 包缺失会导致 gridSetup.sh 直接退出
很多教程说“RHEL 7 不需要 cvuqdisk”,这是错误的。Oracle 19c 的 gridSetup.sh 在非 RAC 模式下仍强制校验该包,缺失时直接报 ERROR: Could not execute command: /usr/bin/rpm -q cvuqdisk 并终止安装,不会给你继续按钮。
实操建议:
- 该包不在 base repo,需从 Oracle 官方 Grid 安装介质中提取:
find /path/to/grid/installer -name "cvuqdisk*" -type f,通常位于/path/to/grid/installer/cvu/qpt/cvuqdisk-1.0.10-1.rpm - 安装命令必须带
--force --nodeps(因为依赖关系不满足):rpm -ivh --force --nodeps cvuqdisk-1.0.10-1.rpm - 安装后验证:
rpm -qa | grep cvuqdisk应返回包名;modprobe cvuqdisk不报错即可
tnsnames.ora 和 listener.ora 必须由 Grid 管理,不能手动改 Oracle Home 下的
装完 Grid 后,监听器由 grid 用户启动,配置文件在 $ORACLE_HOME/network/admin(即 GI_HOME 下),而非后续 Oracle DB_HOME 下的同名文件。若你在 DB_HOME 里配了 tnsnames.ora,但 lsnrctl status 显示服务不可达,或 DGMGRL 连不上备库,大概率是连错了监听器位置。
实操建议:
- 确认监听器归属:
ps -ef | grep tnslsnr,看进程属主是否为grid,路径是否指向/u01/app/19.0.0/grid - 所有网络配置(包括
LISTENER、SCAN、DATA_GUARD的 SERVICE)必须写在$GRID_HOME/network/admin/tnsnames.ora和listener.ora中 -
LOG_ARCHIVE_DEST_2中的SERVICE=orcl_stby必须与tnsnames.ora里定义的条目名称**完全一致**(大小写、空格、换行都不能有) - 修改后 reload:
srvctl reload listener或lsnrctl reload,不要只改文件就以为生效
Grid 和 Oracle 19c 的安装顺序、设备绑定、校验包、监听归属这四点,任何一处错位都会导致后续 Data Guard 或 ASM 启动失败。最容易被忽略的是:udev 规则写对了但没 reload,或者 cvuqdisk 装了但没 force,又或者以为 tnsnames.ora 放哪都一样。这些都不是“试几次就能蒙对”的问题,而是必须按路径逐层验证。


















