ASM File Extent 与 Mirroring 详解
ASM File Extent 与 Mirroring 详解
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
ASM 通过 Extent 和 Mirroring 机制管理文件存储和数据冗余[1]:
- Extent:ASM 文件的逻辑分配单元
- Mirroring:多副本机制保证数据可用性
2. ASM File 结构
2.1 文件组成
ASM File (如 users.259.1234567890)
├── File Header (1 个 AU)
│ └── 包含文件元数据
├── Data Extents
│ ├── Extent 1: AU 0 (1MB)
│ ├── Extent 2: AU 1
│ ├── Extent 3: AU 2 + AU 3 (变长 Extent, 2MB)
│ └── ...
└── 间接 Extent
2.2 文件命名
+DATA/orcl/datafile/users.259.1234567890
│ │
│ └── incarnation number
└── file number
3. Extent 类型
3.1 固定大小 Extent(10g)
每个 Extent = 1 个 AU
File 大小 = Extent 数 × AU 大小
3.2 变长 Extent(11g+)
Extents 1-7: 1 个 AU
Extents 9-63: 4 个 AU
Extents 64-119: 16 个 AU
Extents 120+: 64 个 AU
→ 大文件用大 Extent,减少元数据
3.3 查看 Extent 信息
-- 在 ASM 实例
SELECT
group_number,
file_number,
extent_id,
bytes/1024/1024 AS mb,
type
FROM v$asm_extent
WHERE file_number = 259;
4. Mirroring 镜像机制
4.1 三种镜像级别
| 级别 | 副本数 | 最少 Disk | 适用 |
|---|---|---|---|
| Unprotected | 1 | 1 | 外部 RAID |
| Normal (2-way) | 2 | 2 | 通用 |
| High (3-way) | 3 | 3 | 高可用 |
4.2 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 200
Mirror copy: Disk 1, AU 200
File Extent 3:
Primary copy: Disk 3, AU 50
Mirror copy: Disk 1, AU 300
特点:
- 主副本和镜像副本分布在不同 Disk
- ASM 自动选择位置,避免单 Disk 故障
- 写入时同时写主副本和镜像副本
4.3 Failgroup
Failgroup(故障组):相互独立的磁盘组,单组故障不影响其他组。
Normal Redundancy with 2 Failgroups:
Failgroup 1 Failgroup 2
├── Disk 1 ├── Disk 3
└── Disk 2 └── Disk 4
File Extent:
Primary copy: Failgroup 1 的某个 Disk
Mirror copy: Failgroup 2 的某个 Disk
CREATE DISKGROUP data NORMAL REDUNDANCY
FAILGROUP fg1 DISK '/dev/asm-disk1', '/dev/asm-disk2'
FAILGROUP fg2 DISK '/dev/asm-disk3', '/dev/asm-disk4';
4.4 文件级模板
不同文件类型可指定不同镜像级别:
-- 查看默认模板
SELECT * FROM v$asm_template;
-- 自定义模板
ALTER DISKGROUP data ADD TEMPLATE high_important
ATTRIBUTES (HIGH FINE);
-- 文件使用特定模板
ALTER DISKGROUP data ADD TEMPLATE high_important
ATTRIBUTES (HIGH FINE);
-- 创建表空间时指定
CREATE TABLESPACE important_ts
DATAFILE '+DATA(high_important)' SIZE 100M;
5. Partner Disk
5.1 Partner 关系
ASM 自动维护 Disk 之间的 Partner 关系:
- 每个 Disk 通常有 8-10 个 Partner
- Partner Disk 存储该 Disk 的镜像副本
- Disk 故障时,从 Partner 读取数据
5.2 查看 Partner
SELECT
disk_number,
partner_disk,
partner_status
FROM v$asm_partner
WHERE group_number = 1;
6. ASM Stripe
6.1 条带化
ASM 自动对 Extent 进行条带化:
| 条带大小 | 适用 |
|---|---|
| COARSE(默认) | 数据文件、控制文件 |
| FINE | Redo Log、控制文件(小 I/O) |
6.2 配置
-- 模板属性中指定
ALTER DISKGROUP data ADD TEMPLATE redo_template
ATTRIBUTES (UNPROTECTED FINE);
-- Redo Log 使用 FINE 条带
ALTER DATABASE ADD LOGFILE '+DATA(redo_template)' SIZE 100M;
7. ASM 文件操作
7.1 创建文件(OMF)
-- 自动创建 ASM 文件
CREATE TABLESPACE ts_asm DATAFILE '+DATA' SIZE 1G;
-- 查看文件
SELECT file_name FROM dba_data_files WHERE tablespace_name='TS_ASM';
-- +DATA/orcl/datafile/ts_asm.259.1234567890
7.2 别名(Alias)
# 创建别名
asmcmd
ASMCMD> mkalias +DATA/orcl/datafile/users.259.1234567890 +DATA/orcl/datafile/users.dbf
# 查看别名
ASMCMD> ls -l +DATA/orcl/datafile/
# 删除别名
ASMCMD> rmalias +DATA/orcl/datafile/users.dbf
7.3 文件迁移
-- 移动数据文件
ALTER DATABASE MOVE DATAFILE '+DATA/users.dbf' TO '+FRA/users.dbf';
8. 相关视图
-- ASM 文件
SELECT
group_number,
file_number,
incarnation,
bytes/1024/1024 AS mb,
type,
redundancy,
striped
FROM v$asm_file;
-- ASM Alias
SELECT
group_number,
file_number,
alias_directory,
name
FROM v$asm_alias;
-- ASM Template
SELECT
group_number,
name,
redundancy,
stripe,
system
FROM v$asm_template;
-- ASM Extent
SELECT
group_number,
file_number,
extent_id,
xnum_kffxp,
disk_kffxp,
au_kffxp
FROM x$kffxp
WHERE file_number = 259;
9. 常见坑与排错
9.1 Disk Group 容量不足
现象:ORA-15041: diskgroup ... space exhausted。
修复:
-- 1. 检查 Disk Group 使用情况
SELECT name, total_mb, free_mb,
ROUND(free_mb/total_mb*100, 2) AS free_pct
FROM v$asm_diskgroup;
-- 2. 增加 Disk
ALTER DISKGROUP data ADD DISK '/dev/asm-disk5';
-- 3. 或删除旧文件
asmcmd> rm +FRA/orcl/backupset/old_backup.bkp
9.2 Mirroring 不一致
现象:ORA-15130: diskgroup ... is dismounted。
修复:
-- 1. 检查 Disk 状态
SELECT group_number, disk_number, mount_status, header_status, mode_status, state
FROM v$asm_disk;
-- 2. 强制 mount
ALTER DISKGROUP data MOUNT FORCE;
-- 3. 修复镜像
ALTER DISKGROUP data RESIZE ALL;
9.3 文件不可见
现象:数据库找不到 ASM 文件。
排查:
# 在 ASM 中查找
asmcmd> ls -l +DATA/orcl/datafile/
# 在数据库中查找
sqlplus / as sysdba
SELECT file_name FROM dba_data_files;
9.4 AU 分布不均
现象:某些 Disk I/O 高。
修复:
-- 触发 rebalance 重新分配
ALTER DISKGROUP data REBALANCE POWER 8;
-- 查看 I/O 分布
SELECT group_number, disk_number, reads, writes
FROM v$asm_disk_iostat;
10. 最佳实践
- Disk Group 用相同大小 Disk:均衡 I/O
- Normal Redundancy 用于关键数据:2-way 镜像
- High Redundancy 用于关键业务:3-way 镜像
- Redo Log 用 FINE 条带:小 I/O 优化
- 大文件用 4MB+ AU:减少元数据
- 定期监控镜像状态:
v$asm_disk - 使用 Partner Disk 评估:避免单点故障
- 文件模板分类管理:不同重要级别
11. 参考资料
[1] Oracle Automatic Storage Management Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/
[2] Oracle ASM Reference 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/asm-file-templates.html