Oracle ASM 深度解析

Oracle ASM 深度解析

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


1. 概述

ASM(Automatic Storage Management)是 Oracle 存储管理[1]:

特性

  • 卷管理
  • 文件系统
  • I/O 调优
  • 镜像

详细见:Oracle ASM 详解


2. ASM 架构

2.1 组件

- ASM Instance
- Disk Group
- Disk
- AU(Allocation Unit)
- Extent
- File

2.2 AU

- 默认 1MB
- 4MB / 8MB(11g+)
- 大文件高效

2.3 Extent

- 多个 AU
- Variable Extent(11g+)
  - 1MB / 4MB / 16MB
- 减少 Extent Map

3. Disk Group

3.1 创建

CREATE DISKGROUP data NORMAL REDUNDANCY
  FAILGROUP fg1 DISK '/dev/asm-disk1' NAME disk1
  FAILGROUP fg2 DISK '/dev/asm-disk2' NAME disk2
  ATTRIBUTE 'au_size' = '4M';

3.2 类型

类型镜像最少磁盘
External无(外部)1
Normal2-way2
High3-way3

3.3 管理

ALTER DISKGROUP data ADD DISK '/dev/asm-disk3';
ALTER DISKGROUP data DROP DISK disk1;
ALTER DISKGROUP data RESIZE ALL;
ALTER DISKGROUP data REBALANCE POWER 8;

4. 镜像

4.1 类型

  • Mirror:Normal 2-way
  • High 3-way
  • Unprotected:External

4.2 文件级

CREATE TABLESPACE ts DATAFILE '+DATA(datafile)'
  SIZE 100M
  ATTRIBUTE 'compatible.rdbms' = '19.0.0', 'striping' = 'COARSE';

4.3 Failure Group

- 磁盘分组
- 不同 IO 控制器
- 防止单点故障

5. Rebalance

5.1 触发

- 添加磁盘
- 删除磁盘
- 修改 POWER

5.2 过程

1. RBAL 协调
2. ARBn 执行
3. 数据重分布
4. 完成

5.3 POWER

ALTER DISKGROUP data REBALANCE POWER 8;

-- 11g+ 动态
ALTER DISKGROUP data REBALANCE POWER 8 WAIT;

5.4 监控

SELECT group_number, operation, state, power, actual, sofar, est_work
FROM v$asm_operation;

6. ASM 文件

6.1 类型

  • Datafile
  • Control File
  • Redo Log
  • Archive Log
  • Backup
  • SPFILE
  • OCR / Voting(GI)

6.2 模板

-- 默认模板
SELECT name, redundancy, stripe FROM v$asm_template;

-- 自定义
ALTER DISKGROUP data ADD TEMPLATE high_pri TEMPLATE 
  HIGH REDUNDANCY FINE STRIPE;

6.3 别名

ALTER DISKGROUP data ADD ALIAS '+data/orcl/control01.ctl' 
  FOR '+data/orcl/CONTROLFILE/current.256.1';

7. ASM 实例

7.1 启动

STARTUP NOMOUNT;
-- 或
STARTUP MOUNT;
-- 或
STARTUP;

7.2 参数

- INSTANCE_TYPE = ASM
- ASM_DISKSTRING
- ASM_DISKGROUPS
- ASM_POWER_LIMIT

7.3 进程

- RBAL
- ARBn
- ASMB
- GMON
- KATE
- MARK

8. Flex ASM(12c+)

8.1 概述

- ASM 客户端/服务器
- 失败隔离
- ASM 集群

8.2 优势

- ASM 实例失败不影响 DB
- 多 ASM 实例
- 高可用

9. ASMFD(ASM Filter Driver)

9.1 概述

- 替代 ASMLib
- 内核模块
- 设备过滤

9.2 配置

# 安装
yum install oracleasm-support

# 配置
oracleasm configure -i

# 标记
oracleasm createdisk DISK1 /dev/sdb1

10. ACFS(ASM Cluster File System)

10.1 概述

- 集群文件系统
- 共享文件
- 跨节点

10.2 创建

# 1. 创建 ADVM 卷
asmcmd volcreate -G data -s 10G vol1

# 2. 格式化
mkfs -t acfs /dev/asm/vol1-123

# 3. 挂载
mount -t acfs /dev/asm/vol1-123 /mnt/acfs

10.3 用途

  • 共享文件
  • Oracle Home
  • 应用文件

11. ASM 监控

11.1 磁盘组

SELECT 
  group_number, name, state, type, 
  total_mb, free_mb
FROM v$asm_diskgroup;

11.2 磁盘

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

11.3 客户端

SELECT * FROM v$asm_client;

11.4 操作

SELECT * FROM v$asm_operation;

12. asmcmd

12.1 命令

asmcmd
ASMCMD> ls
ASMCMD> cd data
ASMCMD> ls -l
ASMCMD> mkdir orcl
ASMCMD> cp +data/orcl/file.dbf /tmp/
ASMCMD> lsdg
ASMCMD> lsdsk

13. 备份恢复

13.1 ASM 备份

-- 不能直接备份 ASM
-- 通过 RMAN
RMAN> BACKUP AS COPY DATABASE FORMAT '+FRA';

13.2 磁盘组恢复

- 磁盘失败:替换
- 多镜像:自动恢复
- 备份恢复:RMAN

14. 常见坑与排错

14.1 ORA-15032 / 15063

- 磁盘不足
- 增加磁盘
- 检查状态

14.2 ORA-15041

- 空间不足
- 增大磁盘
- 清理

14.3 Rebalance 慢

-- POWER
ALTER DISKGROUP data REBALANCE POWER 1024;

-- 异步
ALTER DISKGROUP data REBALANCE POWER 8 NOWAIT;

15. 最佳实践

  1. Normal Redundancy:冗余
  2. AU 4M:大文件
  3. Failure Group:隔离
  4. Rebalance POWER:性能
  5. Flex ASM:12c+ 高可用
  6. ACFS:共享
  7. ASMFD:替代 ASMLib
  8. 监控空间:避免满
  9. 测试恢复:可行
  10. 文档化:架构

16. 参考资料

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