单机也必须安装 Grid Infrastructure,因为自 Oracle 11g R2 起 ASM 已集成于 Grid 中,其核心工具(asmca、asmcmd、crsctl)及 ASM 实例依赖 ohasd 和 cssd 进程——这些由 Grid 安装后自动部署并启动;不装 Grid 则无法启动 CSSD,导致 ASM 实例不可用、磁盘组无法挂载、sqlplus / as sysasm 连接失败。

单机 Oracle ASM 环境能用,但必须用 grid 用户安装 Grid Infrastructure,并创建 ASM 实例和磁盘组;不能跳过 ASM 实例直接用数据库软件“接管”裸盘。
为什么单机也得装 Grid Infrastructure?
Oracle 11g R2 起,ASM 就不再是独立组件,而是 Grid Infrastructure 的一部分。即使单机,asmca、asmcmd、crsctl 这些工具都依赖 ohasd 和 ora.cssd 进程——它们由 Grid 安装后自动启动。不装 Grid,连 asmca 图形界面都打不开,更别说识别磁盘或建磁盘组。
- 只装 Oracle Database 软件 →
asmca报错:ORA-15077: could not locate ASM instance serving the specified disk group - 没启 CSSD(Cluster Synchronization Services)→ ASM 实例无法挂载磁盘组,
sqlplus / as sysasm连不上 - Grid 安装目录(如
/u01/app/19.0.0/grid)必须由grid:oinstall拥有,且不能和 Oracle DB Home 在同一路径下
磁盘准备:裸设备 vs 分区 vs udev 规则
ASM 不认文件系统,只认“块设备”。常见错误是格式化了磁盘再给 ASM 用——这会导致 asmca 扫不到盘,或建盘组时报 ORA-15032: not all alterations performed + ORA-15028: disk '' not found。
-
/dev/sdb、/dev/sdc这类整盘可用,但生产环境建议分区(如/dev/sdb1),避免误操作清空整个盘 - 分区类型设为
8e(Linux LVM)或fd(Linux RAID autodetect),不能是83(Linux filesystem) - 重启后设备名可能变(
sdb→sdc),必须用 udev 绑定固定名,例如/dev/asm-disk1;否则 ASM 实例启动失败,报ORA-15033: diskgroup 'DATA' is not mounted - 权限必须是
grid:asmadmin,且660;chown grid:asmadmin /dev/asm-disk*+chmod 660 /dev/asm-disk*
静默创建磁盘组:绕过 asmca 图形界面
图形界面卡住、X11 转发失败、或批量部署时,直接用 SQL*Plus 创建磁盘组更稳。前提是 ASM 实例已启动(srvctl start asm 或 crsctl start resource ora.asm)。
- 连接:用
grid用户执行sqlplus / as sysasm - 建盘组命令示例(外部冗余,适合已有 RAID):
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/asm-disk1', '/dev/asm-disk2';
- 建盘组命令示例(正常冗余,需至少 2 块盘):
CREATE DISKGROUP RECO NORMAL REDUNDANCY DISK '/dev/asm-disk3' NAME reco_0000, '/dev/asm-disk4' NAME reco_0001;
- 关键点:
DISK后路径必须和ls -l /dev/asm-disk*输出一致;大小写、空格、引号缺一不可 - 建完立刻验证:
SELECT name, state, type FROM v$asm_diskgroup;—— 状态必须是MOUNTED
DBCA 创建数据库时指定 ASM 存储的陷阱
DBCA 默认走文件系统路径(/u02/oradata),若强行选 ASM,但没提前在 grid 用户下运行 srvctl enable asm,或没把 +DATA 加进 asm_diskstring 参数,会卡在“正在创建控制文件”并超时。
- DBCA 启动前,先确认:
asmcmd lsdg能列出DATA和RECO,且state = MOUNTED - DBCA 中选择 “Use Automatic Storage Management (ASM)” → 手动输入磁盘组名(
+DATA),别依赖下拉框自动填充(有时为空) - 归档模式必须开,且
DB_RECOVERY_FILE_DEST设为+RECO;否则建库后ALTER DATABASE ARCHIVELOG会报ORA-19802: cannot use recovery area without parameter DB_RECOVERY_FILE_DEST - 监听必须由
grid用户配置(netca),不能用oracle用户配——否则实例注册不到监听,tnsping 通但 sqlplus 报ORA-12514: TNS:listener does not currently know of service requested in connect descriptor
最易被忽略的是 udev 规则持久性和 CSSD 自启动状态:哪怕磁盘组建好了、数据库跑起来了,一次 reboot 后 ASM 实例起不来,所有依赖它的数据库就全挂——这不是配置错了,是 crsctl enable crs 没执行,或 udev 规则没放进 /etc/udev/rules.d/99-oracle-asm.rules 并 reload。


















