Oracle ASM 架构与 AU(Allocation Unit)

Oracle ASM 架构与 AU(Allocation Unit)

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


1. 概述

ASM(Automatic Storage Management) 是 Oracle 提供的卷管理器和文件系统[1]:

核心特性

  • 自动 I/O 负载均衡
  • 在线存储重配置
  • 镜像冗余(无需外部 RAID)
  • 集群共享存储

ASM = Volume Manager + File System


2. ASM 架构层次

+--------------------------------+
|  Database Instance             |
+--------------------------------+


+--------------------------------+
|  ASM Instance (单独的实例)     |
|  - SGA (Shared Pool, Large Pool) |
|  - ASMB / RBAL 后台进程        |
+--------------------------------+


+--------------------------------+
|  ASM Disk Group                |
|  - 由多个 Disk 组成            |
|  - 每个 Disk 划分为多个 AU     |
+--------------------------------+


+--------------------------------+
|  ASM Disk (LUN / 物理磁盘)    |
+--------------------------------+

3. ASM 实例

3.1 与数据库实例区别

维度ASM 实例数据库实例
内存SGA + PGA(较小)SGA + PGA(大)
后台进程ASMB, RBAL, GMON, MSNNPMON, SMON, …
是否可查询仅元数据业务数据
启动方式启动到 NOMOUNTNOMOUNT/MOUNT/OPEN

3.2 ASM 实例参数

-- init+ASM.ora 示例
*.asm_diskstring='/dev/asm*'
*.asm_diskgroups='DATA','FRA'
*.memory_target=1G
*.instance_type='asm'
*.remote_login_passwordfile='EXCLUSIVE'

3.3 启动 ASM 实例

# 启动 ASM 实例
sqlplus / as sysasm
SQL> STARTUP;

# 关闭
SQL> SHUTDOWN IMMEDIATE;

3.4 ASM 后台进程

进程作用
ASMBASM Background,与数据库通信
RBALRebalance Master,协调 rebalance
GMONDisk Group Monitor,监控磁盘状态
MSNNASM Rebalance Worker
XNNNASM I/O Worker

4. ASM Disk Group

4.1 Disk Group 概念

Disk Group (DATA)
├── Disk 1 (/dev/asm-disk1)
│     ├── AU 0 (1 MB)
│     ├── AU 1
│     ├── AU 2
│     └── ...
├── Disk 2 (/dev/asm-disk2)
│     ├── AU 0
│     ├── AU 1
│     └── ...
└── Disk 3 (/dev/asm-disk3)
      ├── AU 0
      └── ...

4.2 冗余类型

类型说明最少 Disk
EXTERNAL外部冗余(依赖 RAID)1
NORMAL2-way 镜像2+
HIGH3-way 镜像3+
FLEX灵活冗余(18c+)3+

4.3 创建 Disk Group

-- 外部冗余
CREATE DISKGROUP data EXTERNAL REDUNDANCY
  DISK '/dev/asm-disk1', '/dev/asm-disk2'
  ATTRIBUTE 'au_size'='4M';

-- Normal 冗余(2-way)
CREATE DISKGROUP data NORMAL REDUNDANCY
  FAILGROUP fg1 DISK '/dev/asm-disk1'
  FAILGROUP fg2 DISK '/dev/asm-disk2';

-- 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';

5. AU(Allocation Unit)

5.1 AU 是什么

AU 是 ASM 中分配空间的最小单位[1][2]:

ASM Disk:
+----+----+----+----+----+----+----+
| AU | AU | AU | AU | AU | AU | ...|
| 0  | 1  | 2  | 3  | 4  | 5  |    |
+----+----+----+----+----+----+----+

每个 AU 大小默认 1MB(可配置 1/2/4/8/16/32/64 MB)

5.2 AU 大小配置

-- 创建时指定
CREATE DISKGROUP data EXTERNAL REDUNDANCY
  DISK '/dev/asm-disk1'
  ATTRIBUTE 'au_size'='4M';

-- 可选值:1, 2, 4, 8, 16, 32, 64 MB
-- 默认 1MB

5.3 AU 大小选择

AU 大小适用场景
1 MB(默认)通用
4 MB数据仓库、大数据库
8 MB超大数据库(> 10TB)
16-64 MBExadata

选择原则

  • 大 AU 减少元数据
  • 小 AU 更精细控制
  • 数据仓库推荐 4MB

5.4 查看 AU 信息

-- Disk Group AU 大小
SELECT 
  group_number,
  name,
  allocation_unit_size/1024/1024 AS au_mb,
  type
FROM v$asm_diskgroup;

-- Disk 总体
SELECT 
  group_number,
  disk_number,
  total_mb,
  free_mb,
  path
FROM v$asm_disk;

6. ASM File Extent

6.1 Extent 概念

ASM File 由若干 Extent 组成,每个 Extent 是 AU 的集合:

ASM File (datafile)
├── Extent 1 = AU 0 (1MB)
├── Extent 2 = AU 1
├── Extent 3 = AU 2 + AU 3 (2MB,变长 Extent)
└── ...

6.2 Variable Size Extent

11g+ 引入变长 Extent:

Extents 1-8: 1 个 AU
Extents 9-63: 4 个 AU
Extents 64-119: 16 个 AU
Extents 120+: 64 个 AU

→ 减少大文件的 Extent 元数据

6.3 Mirroring

Normal Redundancy (2-way):

File Extent 1:
- Primary copy: Disk 1, AU 100
- Mirror copy:  Disk 2, AU 100

File Extent 2:
- Primary copy: Disk 2, AU 101
- Mirror copy:  Disk 1, AU 101

7. ASM 文件类型

文件类型默认位置
数据文件+DATA/<db_unique_name>/datafile/
控制文件+DATA/<db_unique_name>/controlfile/
在线 Redo Log+REDO/<db_unique_name>/onlinelog/
归档 Redo Log+FRA/<db_unique_name>/archivelog/
RMAN 备份+FRA/<db_unique_name>/backupset/
SPFILE+DATA/<db_unique_name>/spfile/
密码文件+DATA/<db_unique_name>/orapw

8. ASMCMD 命令

# 进入 ASMCMD
asmcmd

# 常用命令
asmcmd> ls
asmcmd> ls -l
asmcmd> cd DATA/orcl/datafile
asmcmd> pwd

# 文件操作
asmcmd> cp +DATA/orcl/datafile/users.123.456 /tmp/users.dbf
asmcmd> rm +DATA/orcl/datafile/users.123.456
asmcmd> mkdir +DATA/mydir

# Disk Group 管理
asmcmd> lsdg
asmcmd> lsdsk
asmcmd> iostat

# 文件查询
asmcmd> ls -l +DATA/orcl/datafile/users.*

9. ASM 相关视图

-- 在 ASM 实例中
SELECT group_number, name, state, type, total_mb, free_mb 
FROM v$asm_diskgroup;

SELECT group_number, disk_number, mount_status, state, path, total_mb, free_mb 
FROM v$asm_disk;

SELECT group_number, file_number, bytes/1024/1024 AS mb, type 
FROM v$asm_file;

-- 在数据库实例中
SELECT group_number, name, allocation_unit_size 
FROM v$asm_diskgroup;

SELECT name, total_mb, free_mb 
FROM v$asm_disk;

10. 常见坑与排错

10.1 ASM Disk 不可见

现象v$asm_disk 中找不到 disk。

修复

# 1. 检查 ASM_DISKSTRING
sqlplus / as sysasm
SHOW PARAMETER asm_diskstring;
-- 应为 '/dev/asm*'

# 2. 检查权限
ls -l /dev/asm*
# owner 应为 oracle:oinstall

# 3. 配置 UDEV
cat /etc/udev/rules.d/99-oracle-asm.rules

10.2 Disk Group 无法 MOUNT

现象ORA-15032: not all alterations performed + ORA-15063

修复

-- 1. 检查 ASM alert log
! tail -50 $ORACLE_BASE/diag/asm/+asm/+ASM/trace/alert_+ASM.log

-- 2. 强制 mount
ALTER DISKGROUP data MOUNT FORCE;

-- 3. 重建 Disk Group(数据丢失!最后手段)
DROP DISKGROUP data INCLUDING CONTENTS;
CREATE DISKGROUP ...

10.3 ASM 实例启动失败

现象ORA-01078: failure in processing system parameters

修复

# 检查 ASM 参数文件
ls -l $ORACLE_HOME/dbs/spfile+ASM.ora
ls -l $ORACLE_HOME/dbs/init+ASM.ora

# 使用 PFILE 启动
sqlplus / as sysasm
SQL> STARTUP PFILE='/tmp/init+ASM.ora';

10.4 AU 大小不一致

现象:不同 Disk Group AU 大小不同,影响性能。

修复

-- 检查
SELECT name, allocation_unit_size/1024/1024 AS au_mb 
FROM v$asm_diskgroup;

-- 统一规划,性能敏感场景建议相同 AU 大小

11. 最佳实践

  1. 生产用 ASM:性能与管理最优
  2. DATA / FRA / REDO 独立 Disk Group:分散 I/O
  3. AU 大小 4MB:大数据库推荐
  4. External Redundancy + 外部 RAID:性能最高
  5. Normal Redundancy:通用推荐
  6. Disk Group 用相同大小 Disk:均衡 I/O
  7. ASM Cluster:RAC 共享
  8. 监控 Disk 使用率:< 80%
  9. 定期备份 ASM 元数据md_backup
  10. 使用 ASMCMD:统一管理工具

12. 参考资料

[1] Oracle Automatic Storage Management Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/

[2] Oracle Database Concepts 19c, “Automatic Storage Management” https://docs.oracle.com/en/database/oracle/oracle-database/19/cncpt/automatic-storage-management.html