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. 最佳实践
- AU 4M:性能与扩展性平衡
- Stripe 128K:默认即可
- 直接 I/O:避免缓冲
- 生产用 19c+:特性完善
- Clusterware 管理:自动启动
- 监控 I/O:v$asm_volume_stat
- 共享 Oracle Home 用 ADVM:RAC 场景
- ADVM 替代 LVM:Oracle 集成方案
- PDB 数据可用 ACFS:通用文件存储
- 定期备份: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