ASM Disk Group 创建与维护
ASM Disk Group 创建与维护
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
ASM Disk Group 是 ASM 管理的核心对象,由多个 Disk 组成[1]:
| 操作 | 命令 |
|---|---|
| 创建 | CREATE DISKGROUP |
| 修改 | ALTER DISKGROUP |
| 删除 | DROP DISKGROUP |
| 挂载 | ALTER DISKGROUP … MOUNT |
| 卸载 | ALTER DISKGROUP … DISMOUNT |
2. 创建 Disk Group
2.1 准备 Disk
# 1. 识别磁盘
ls /dev/sd*
# 2. 配置 UDEV 规则(推荐)
cat > /etc/udev/rules.d/99-oracle-asm.rules <<EOF
KERNEL=="sd*", SUBSYSTEM=="block", PROGRAM=="/usr/lib/udev/scsi_id -g -u -d /dev/\$name", RESULT=="3600508b1001c1d3a8b3ef23456000001", SYMLINK+="asm-disk1", OWNER="oracle", GROUP="oinstall", MODE="0660"
EOF
# 3. 重新加载 UDEV
udevadm control --reload-rules
udevadm trigger
# 4. 验证
ls -l /dev/asm*
2.2 创建 Disk Group
-- 外部冗余
CREATE DISKGROUP data EXTERNAL REDUNDANCY
DISK '/dev/asm-disk1', '/dev/asm-disk2'
ATTRIBUTE 'au_size'='4M', 'compatible.rdbms'='19.0', 'compatible.asm'='19.0';
-- Normal 冗余(2-way)
CREATE DISKGROUP data NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/asm-disk1', '/dev/asm-disk2'
FAILGROUP fg2 DISK '/dev/asm-disk3', '/dev/asm-disk4'
ATTRIBUTE 'au_size'='4M';
-- High 冗余(3-way)
CREATE DISKGROUP data HIGH REDUNDANCY
FAILGROUP fg1 DISK '/dev/asm-disk1'
FAILGROUP fg2 DISK '/dev/asm-disk2'
FAILGROUP fg3 DISK '/dev/asm-disk3';
2.3 Flex 冗余(18c+)
-- Flex Redundancy
CREATE DISKGROUP data FLEX REDUNDANCY
FAILGROUP fg1 DISK '/dev/asm-disk1'
FAILGROUP fg2 DISK '/dev/asm-disk2'
FAILGROUP fg3 DISK '/dev/asm-disk3';
3. Disk Group 属性
3.1 常用属性
| 属性 | 说明 | 默认 |
|---|---|---|
au_size | AU 大小 | 1MB |
compatible.rdbms | 数据库兼容版本 | 10.1 |
compatible.asm | ASM 兼容版本 | 11.2 |
disk_repair_time | Disk 修复时间 | 3.6h |
cell.smart_scan_capable | Exadata | FALSE |
content.type | 数据类型 | DATA |
sector_size | 扇区大小 | 512 |
3.2 修改属性
-- 修改兼容性
ALTER DISKGROUP data SET ATTRIBUTE 'compatible.rdbms'='19.0';
ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm'='19.0';
-- 修改 Disk Repair Time
ALTER DISKGROUP data SET ATTRIBUTE 'disk_repair_time'='8H';
3.3 查看属性
SELECT
group_number,
name,
value
FROM v$asm_attribute
WHERE group_number = 1;
4. Disk 添加/删除
4.1 添加 Disk
-- 添加单个 Disk
ALTER DISKGROUP data ADD DISK '/dev/asm-disk5';
-- 添加并指定名称
ALTER DISKGROUP data ADD DISK '/dev/asm-disk5' NAME data_0005;
-- 添加多个 Disk
ALTER DISKGROUP data ADD DISK
'/dev/asm-disk5' NAME data_0005,
'/dev/asm-disk6' NAME data_0006;
-- 添加到指定 Failgroup
ALTER DISKGROUP data ADD FAILGROUP fg3 DISK '/dev/asm-disk7';
4.2 删除 Disk
-- 删除 Disk(触发 rebalance)
ALTER DISKGROUP data DROP DISK data_0005;
-- 删除并指定 rebalance power
ALTER DISKGROUP data DROP DISK data_0005 REBALANCE POWER 8;
-- 删除多个 Disk
ALTER DISKGROUP data DROP DISK data_0005, data_0006;
4.3 替换 Disk
-- 在线替换(不停机)
ALTER DISKGROUP data DROP DISK data_0005
ADD FAILGROUP fg1 DISK '/dev/asm-disk7' NAME data_0007;
5. Disk Group 维护
5.1 MOUNT / DISMOUNT
-- MOUNT
ALTER DISKGROUP data MOUNT;
-- DISMOUNT
ALTER DISKGROUP data DISMOUNT;
-- 强制 MOUNT
ALTER DISKGROUP data MOUNT FORCE;
-- MOUNT 所有 Disk Group
ALTER DISKGROUP ALL MOUNT;
5.2 RESIZE
-- 调整所有 Disk 大小
ALTER DISKGROUP data RESIZE ALL;
-- 调整单个 Disk
ALTER DISKGROUP data RESIZE DISK data_0005 SIZE 100G;
5.3 CHECK / REPAIR
-- 检查一致性
ALTER DISKGROUP data CHECK ALL;
-- 修复
ALTER DISKGROUP data CHECK ALL REPAIR;
5.4 Undrop Disk
-- 撤销删除操作
ALTER DISKGROUP data UNDROP DISKS;
6. Rebalance
6.1 自动 Rebalance
添加/删除 Disk 时自动触发:
-- 添加 Disk 自动 rebalance
ALTER DISKGROUP data ADD DISK '/dev/asm-disk5';
-- 后台自动 rebalance
-- 手动触发
ALTER DISKGROUP data REBALANCE POWER 8;
6.2 Power 设置
| Power | 说明 |
|---|---|
| 0 | 不执行 |
| 1 | 最慢(默认) |
| 4 | 中等 |
| 8 | 较快 |
| 11 | 最快(19c 最大) |
| 32 | 12c+ MAX(受 resources 限制) |
6.3 查看 Rebalance 进度
SELECT
group_number,
operation,
state,
power,
actual,
sofar,
est_work,
est_rate,
est_minutes
FROM v$asm_operation;
详细内容见:Oracle ASM Rebalance 机制。
7. Disk Group 删除
-- 删除空 Disk Group
DROP DISKGROUP data;
-- 删除包含文件的 Disk Group
DROP DISKGROUP data INCLUDING CONTENTS;
-- 强制删除(无法 mount 时)
DROP DISKGROUP data FORCE INCLUDING CONTENTS;
8. Disk Group 模板
8.1 默认模板
SELECT
group_number,
name,
redundancy,
stripe,
system
FROM v$asm_template
WHERE group_number = 1;
| 模板名 | 用途 |
|---|---|
| PARAMETERFILE | SPFILE |
| DATAFILE | 数据文件 |
| ONLINELOG | Redo Log |
| ARCHIVELOG | 归档日志 |
| CONTROLFILE | 控制文件 |
| BACKUPSET | RMAN 备份 |
| DATAGUARDCONFIG | DG 配置 |
8.2 自定义模板
-- 创建模板
ALTER DISKGROUP data ADD TEMPLATE high_imp
ATTRIBUTES (HIGH FINE);
-- 使用模板创建文件
CREATE TABLESPACE important_ts
DATAFILE '+DATA(high_imp)' SIZE 100M;
-- 删除模板
ALTER DISKGROUP data DROP TEMPLATE high_imp;
9. ASM 元数据备份
9.1 备份元数据
# ASMCMD 备份
asmcmd md_backup /tmp/asm_metadata_backup.gpb -G DATA
# 备份所有 Disk Group
asmcmd md_backup /tmp/asm_metadata_backup.gpb
9.2 恢复元数据
# 恢复
asmcmd md_restore /tmp/asm_metadata_backup.gpb
10. 相关视图
-- Disk Group 概览
SELECT
group_number,
name,
state,
type,
total_mb,
free_mb,
ROUND(free_mb/total_mb*100, 2) AS free_pct
FROM v$asm_diskgroup;
-- Disk 详情
SELECT
group_number,
disk_number,
mount_status,
header_status,
mode_status,
state,
path,
total_mb,
free_mb
FROM v$asm_disk;
-- Disk Group 属性
SELECT group_number, name, value
FROM v$asm_attribute;
11. 常见坑与排错
11.1 ORA-15032 / ORA-15063
现象:Disk Group 无法 mount。
修复:
-- 1. 检查 Disk 状态
SELECT group_number, disk_number, header_status, state
FROM v$asm_disk;
-- 2. 强制 mount
ALTER DISKGROUP data MOUNT FORCE;
-- 3. 检查 ASM alert log
! tail -100 $ORACLE_BASE/diag/asm/+asm/+ASM/trace/alert_+ASM.log
11.2 Disk Header 损坏
现象:ORA-15025: could not open disk '/dev/asm-disk1'。
修复:
# 1. 检查 disk header
kfed read /dev/asm-disk1
# 2. 修复(如果有备份)
kfed repair /dev/asm-disk1
# 3. 重建 Disk Group(最后手段)
11.3 Disk Group 满了
现象:ORA-15041: diskgroup space exhausted。
修复:
-- 1. 检查
SELECT name, total_mb, free_mb FROM v$asm_diskgroup;
-- 2. 增加 Disk
ALTER DISKGROUP data ADD DISK '/dev/asm-disk5';
-- 3. 清理旧备份
RMAN> DELETE OBSOLETE;
11.4 Rebalance 不收敛
现象:rebalance 长时间不结束。
修复:
-- 检查进度
SELECT * FROM v$asm_operation;
-- 增加 power
ALTER DISKGROUP data REBALANCE POWER 11;
-- 检查错误
SELECT * FROM v$asm_operation WHERE state = 'ERRORS';
11.5 Disk 离线后超时
现象:disk_repair_time 超时,Disk 被永久删除。
修复:
-- 1. 增大 disk_repair_time
ALTER DISKGROUP data SET ATTRIBUTE 'disk_repair_time'='24H';
-- 2. 在超时前修复 Disk 并上线
ALTER DISKGROUP data ONLINE DISK data_0005;
12. 最佳实践
- 使用 UDEV 规则:保证 Disk 路径稳定
- Disk 大小一致:均衡 I/O
- Normal/High Redundancy:保证数据可用性
- disk_repair_time 充足:≥ 8 小时
- 定期备份元数据:
md_backup - 监控 Disk 使用率:< 80%
- Rebalance power 合理:4-8
- 生产推荐独立 Disk Group:DATA/FRA/REDO 分开
- Flex Redundancy(18c+):灵活冗余
- 定期 ASM 健康检查:
ALTER DISKGROUP ... CHECK
13. 参考资料
[1] Oracle Automatic Storage Management Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/
[2] Oracle ASM Quick Start 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/asm-diskgroups.html