Oracle ADVM(ASM Dynamic Volume Manager)

Oracle ADVM(ASM Dynamic Volume Manager)

适用版本:Oracle Database 11g R2 / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

ADVM(ASM Dynamic Volume Manager) 是 Oracle 提供的卷管理器[1],构建在 ASM 之上:

核心特性

  • 动态卷管理
  • 与 ASM 集成
  • 支持 ACFS 文件系统
  • 集群范围卷
  • 在线扩容

2. ADVM 架构

2.1 层次结构

+----------------------+
| ACFS / 其他文件系统 |  ← 应用层
+----------------------+


+----------------------+
| ADVM Volume Device   |  ← /dev/asm/volume-XXX
+----------------------+


+----------------------+
| ASM Disk Group       |  ← ASM 卷文件
+----------------------+


+----------------------+
| ASM Disks            |  ← 物理磁盘
+----------------------+

2.2 ADVM 卷文件

-- ADVM 卷在 ASM 中是一个特殊文件
SELECT 
  group_number, 
  file_number, 
  type, 
  volume_name
FROM v$asm_file
WHERE type='VOLUME';

3. ADVM 卷管理

3.1 创建卷

-- 通过 SQL 创建
ALTER DISKGROUP acfs_data ADD VOLUME acfsvol1 
  SIZE 50G 
  ATTRIBUTE 'usage'='ACFS',
            'primary_mirror'='DATA',
            'mountpath'='/u01/acfs/data';

-- 通过 asmcmd
asmcmd volcreate -G acfs_data -s 50G acfsvol1

3.2 查看卷

SELECT 
  group_number, 
  volume_name, 
  volume_device, 
  size_mb,
  usage_state,
  mountpath
FROM v$asm_volume;

-- asmcmd
asmcmd volinfo -G acfs_data acfsvol1

3.3 卷设备

卷设备路径:/dev/asm/<volume_name>-<volume_number>
示例:/dev/asm/acfsvol1-123

3.4 扩容

-- 扩容
ALTER DISKGROUP acfs_data RESIZE VOLUME acfsvol1 SIZE 100G;

-- asmcmd
asmcmd volresize -G acfs_data -s 100G acfsvol1

3.5 缩容

-- 缩容(12.2+)
ALTER DISKGROUP acfs_data RESIZE VOLUME acfsvol1 SIZE 30G;

3.6 删除卷

-- 删除
ALTER DISKGROUP acfs_data DROP VOLUME acfsvol1;

-- asmcmd
asmcmd voldisable -G acfs_data acfsvol1
asmcmd voldelete -G acfs_data acfsvol1

4. 卷属性

4.1 常用属性

属性说明
usage用途(ACFS/OTHER)
primary_mirror主镜像
mountpath挂载路径(信息)
primary_region主区域
mirror_region镜像区域
secondary_mirror次镜像

4.2 设置属性

ALTER DISKGROUP acfs_data MODIFY VOLUME acfsvol1 
  ATTRIBUTE 'usage'='ACFS';

4.3 查看属性

SELECT 
  volume_name, 
  attribute_name, 
  attribute_value 
FROM v$asm_volume_attribute
WHERE volume_name='ACFSVOL1';

5. 卷状态

5.1 卷状态

SELECT 
  volume_name, 
  volume_device,
  usage_state,
  state
FROM v$asm_volume;

5.2 状态说明

状态说明
ENABLED启用,可访问
DISABLED禁用,不可访问

5.3 启用/禁用

-- 启用
ALTER DISKGROUP acfs_data ENABLE VOLUME acfsvol1;

-- 禁用
ALTER DISKGROUP acfs_data DISABLE VOLUME acfsvol1;

6. ADVM 与 ASM 兼容性

6.1 兼容性要求

-- ADVM 卷需要 11.2+ 兼容性
ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.asm'='19.0';
ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.advm'='19.0';

6.2 查看兼容性

SELECT 
  group_number,
  name,
  compatibility,
  asm_compatibility,
  database_compatibility
FROM v$asm_diskgroup;

7. ADVM 与 Clusterware

7.1 Clusterware 资源

# 查看 ADVM 卷资源
crsctl stat res -w "TYPE = ora.volume.type"

# 启动/停止卷
srvctl start volume -g acfs_data -v acfsvol1
srvctl stop volume -g acfs_data -v acfsvol1

# 查看状态
srvctl status volume -g acfs_data -v acfsvol1

7.2 自动启动

# 卷默认随 Clusterware 启动
# 检查资源
srvctl config volume -g acfs_data -v acfsvol1

8. ADVM 性能

8.1 I/O 路径

应用 I/O 请求

ADVM 卷驱动

ASM 客户端

ASM I/O 路径

物理磁盘

8.2 性能优化

  • AU 大小:1M / 4M
  • Stripe:ADVM 默认 128K
  • I/O 大小:建议 1M
  • Direct I/O:避免缓冲

8.3 查看性能

-- 卷 I/O 统计
SELECT 
  volume_name,
  reads, 
  writes, 
  read_errs, 
  write_errs,
  read_time,
  write_time
FROM v$asm_volume_stat;

9. 多租户与 ADVM

9.1 PDB 使用 ACFS

# 1. 创建 ACFS
mkfs -t acfs /dev/asm/pdbvol-123
mkdir /u01/pdbdata
mount -t acfs /dev/asm/pdbvol-123 /u01/pdbdata

# 2. PDB 数据文件路径
CREATE PLUGGABLE DATABASE hrpdb ADMIN USER admin IDENTIFIED BY ******
  DEFAULT TABLESPACE users
  DATAFILE '/u01/pdbdata/hrpdb/users01.dbf' SIZE 500M;

10. 常见坑与排错

10.1 ORA-15447: ASM 兼容性不足

修复

ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.asm'='19.0';
ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.advm'='19.0';

10.2 卷设备不存在

修复

# 1. 检查 ADVM 模块
lsmod | grep oracleadvm

# 2. 加载模块
modprobe oracleadvm

# 3. 检查 ADVM 进程
ps -ef | grep oracleadvm

# 4. 启动 ADVM
$ORACLE_HOME/bin/advmctl start

10.3 卷无法启用

修复

-- 1. 检查 ASM 状态
SELECT group_number, name, state FROM v$asm_diskgroup;

-- 2. MOUNT 磁盘组
ALTER DISKGROUP acfs_data MOUNT;

-- 3. 启用卷
ALTER DISKGROUP acfs_data ENABLE VOLUME acfsvol1;

10.4 卷扩容失败

修复

-- 1. 检查 ASM 空间
SELECT name, total_mb, free_mb FROM v$asm_diskgroup WHERE name='ACFS_DATA';

-- 2. 增加磁盘
ALTER DISKGROUP acfs_data ADD DISK '/dev/asm-disk3';

-- 3. 扩容
ALTER DISKGROUP acfs_data RESIZE VOLUME acfsvol1 SIZE 100G;

10.5 卷删除失败

修复

# 1. 卸载文件系统
umount /u01/acfs/data

# 2. 禁用卷
srvctl stop volume -g acfs_data -v acfsvol1
asmcmd voldisable -G acfs_data acfsvol1

# 3. 删除卷
asmcmd voldelete -G acfs_data acfsvol1

11. 最佳实践

  1. AU 4M:性能与扩展性平衡
  2. Stripe 128K:默认即可
  3. 直接 I/O:避免缓冲
  4. 生产用 19c+:特性完善
  5. Clusterware 管理:自动启动
  6. 监控 I/O:v$asm_volume_stat
  7. 共享 Oracle Home 用 ADVM:RAC 场景
  8. ADVM 替代 LVM:Oracle 集成方案
  9. PDB 数据可用 ACFS:通用文件存储
  10. 定期备份:ACFS 与 RMAN 配合

12. 参考资料

[1] Oracle ASM Administrator’s Guide 19c, “Managing Oracle ADVM Volumes” https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/managing-oracle-advm-volumes.html