ASM配置的核心不是装软件,而是提前把磁盘权限、udev规则和磁盘组规划做对;只要这三步不偷懒,数据库挂载ASM磁盘组就能一次通过。
生产环境asm配置步骤:从udev到磁盘组挂载
作为Oracle数据库的存储底座,ASM在Linux生产环境的落地,通常遵循一条固定路径:识别磁盘 → 绑定udev → 安装Grid → 创建磁盘组 → 设置参数,下面按真实操作顺序拆开。
磁盘和冗余规划
- 数据盘、归档盘、OCR盘分开放,至少准备2块以上独立LUN。
- 冗余级别按业务重要性选择:external省空间但不容错;normal允许坏1块盘;high允许坏2块盘。
- AU保持默认1MB即可,多数OLTP和OLAP场景不用调。
- 据Oracle官方文档,external冗余至少需要1块盘,normal至少2块,high至少3块。
udev持久化配置
生产环境最容易被忽略的就是udev,没有udev绑定,重启后磁盘名漂移,磁盘组直接裂开。
# 查看磁盘WWID /usr/lib/udev/scsi_id -g -u -d /dev/sdb
在 /etc/udev/rules.d/99-oracle-asm.rules 中写入:
KERNEL=="sd", SUBSYSTEM=="block", ENV{ID_SERIAL}=="磁盘序列号", SYMLINK+="asmdisk_%k", OWNER="grid", GROUP="asmadmin", MODE="0660"
执行:
udevadm control --reload-rules udevadm trigger
绑定完成后,用 ls -l /dev/asmdisk_ 确认设备名、属主和权限,很多现场事故都出在这一步,磁盘路径看起来正确,结果属主还是root。
Grid安装和ASM实例验证
Grid安装时选择“Configure Oracle ASM for standalone server”,不要选错成RAC,安装完成后,ASM实例会自动拉起,此时进入 sqlplus / as sysasm 能登录,说明ASM实例正常。
SQL> SELECT instance_name, status FROM v$instance;
看到 STARTED 或 MOUNTED

都算正常初始状态。
asm配置磁盘组怎么做?手把手命令演示
很多新手卡在“磁盘组到底怎么建”这一步,其实asm配置磁盘组怎么做,核心只有两条命令:先用oracleasm标记磁盘,再用SQL创建磁盘组。
标记ASM磁盘
在Linux上,可以使用Oracle ASMLib简化管理,也可以直接用udev生成的设备路径,以ASMLib为例:
oracleasm createdisk DATA1 /dev/sdb1 oracleasm createdisk DATA2 /dev/sdc1 oracleasm listdisks
如果ASMLib不可用,直接写udev生成的稳定路径也行,/dev/disk/by-id/scsi-xxxx。
创建并挂载磁盘组
进入ASM实例:
sqlplus / as sysasm CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK 'ORCL:DATA1' NAME data1, 'ORCL:DATA2' NAME data2 ATTRIBUTE 'compatible.asm'='12.2';
如果不用ASMLib,直接写udev路径:
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/DATA1' NAME data1;
创建后验证:
SELECT name, state, type, total_mb, free_mb FROM v$asm_diskgroup;
数据库实例参数要加上:
asm_diskgroups='DATA','FRA'
这样数据库启动时会自动挂载磁盘组,手动挂载命令:
ALTER DISKGROUP DATA MOUNT;
asm配置与裸设备对比哪个更适合高并发库
不少DBA在选型时会问:asm配置与裸设备对比哪个好?答案不绝对,裸设备性能直通,但管理成本高;ASM牺牲极小一部分性能,换来自动条带和在线扩盘能力。
| 对比项 | ASM | 裸设备 |
|---|---|---|
| 条带化 | 自动按AU打散 | 手工规划 |
| 扩盘 | 在线添加磁盘自动重平衡 | 停机或手工迁移 |
| 多路径 | 配合udev和多路径软件即可 | 需要额外绑定 |
| 备份恢复 | RMAN直接识别 | 需要手动指定路径 |
| 学习成本 | 中等 | 较低但运维重 |
行业共识认为,高并发OLTP库多数情况下优先选择ASM,因为在线扩盘和重平衡能力可以避免计划外停机,只有极少数对延迟极端敏感的场景,才会退回裸设备。
asm配置费用怎么算与北京机房asm配置服务差异
asm配置费用并不是一个固定数字,影响价格的主要有三个因素:实施范围、磁盘数量、是否包含后期调优。
影响费用的三个维度
- 只建磁盘组:工作量小,价格低。
- 包含udev绑定、多路径、备份策略:费用上升。
- 包含ASM性能巡检和重平衡调优:费用继续增加。
业内专家指出,ASM配置的费用差异主要来自实施人员对多路径和udev的熟悉程度,而不是软件授权费用。
北京机房asm配置服务常见报价方式是按磁盘组数量或按项目打包,由于人工成本和机房进出场规则不同,北京本地服务往往会包含一次免费的上架配合或远程排查,具体费用需要根据机房位置(如亦庄、酒仙桥、中关村)和服务时段确认,通常夜间操作会比白天便宜,很多人搜索asm配置服务一般多少钱,其实先要明确是否需要现场实施,这会直接影响最终报价。
云上ASM配置成本
如果使用云数据库或云主机,ASM通常由云厂商封装,此时asm配置费用大多已经包含在数据库实例或存储产品中,用户主要支付的是额外磁盘容量和性能等级费用,不需要再单独购买ASM实施服务。
asm配置常见坑与排错路径
磁盘权限不足导致无法创建磁盘组
表现为:ORA-15031: disk specification '/dev/sdb1' matches no disks。
排查:ls -l /dev/oracleasm/disks/

,确认属主是grid:asmadmin,权限660。
udev规则重启后失效
多数情况下是因为规则文件没有匹配到稳定的磁盘序列号,而是用了 KERNEL=="sdb" 这种短名,生产环境必须绑定WWID或 /dev/disk/by-id/ 路径。
磁盘组无法挂载
如果数据库启动报 ORA-15077: could not locate ASM instance,先确认ASM实例是否启动,再检查 asm_diskgroups 参数是否写错。
重平衡速度慢
添加磁盘后,v$asm_operation 会显示重平衡进度,如果要加速,可以临时调高 asm_power_limit 到8或11,完成后再降回1。
Q&A:asm配置相关核心问题
asm配置磁盘组后如何把数据文件迁进去
在数据库实例中执行:
ALTER DATABASE MOVE DATAFILE '/old/path/system01.dbf' TO '+DATA';
或者使用RMAN:
BACKUP AS COPY DATABASE FORMAT '+DATA';
迁移完成后确认控制文件和在线日志路径,避免只迁数据文件导致启动失败。
asm配置和LVM对比哪个适合Oracle
LVM适合操作系统级灵活分区,但Oracle数据库对性能和多路径要求高,ASM的条带、镜像和重平衡能力更贴合Oracle实例,多数生产环境不会在数据库层再用LVM,而是直接透传裸盘给ASM。
asm配置完成后怎么确认磁盘组健康
执行 asmcmd lsdg 查看磁盘组状态,或查询 v$asm_diskgroup 的 state 字段,所有磁盘组应为 MOUNTED,每个磁盘状态应为 NORMAL,如果出现 DROPPING 或 OFFLINE,说明有磁盘故障或配置漂移。
把udev绑定好、权限压到grid用户、冗余级别提前定清楚,后面创建磁盘组和日常运维基本不会出大问题,这也正是ASM配置能长期占据数据库存储主流方案的原因。

