Oracle ASM:存储管理的终极奥义
2026/7/17 16:37:17 网站建设 项目流程

Oracle ASM:存储管理的终极奥义


前言


在前面的文章中,我们讨论了Oracle RAC集群和OCFS2集群文件系统。当我们把目光聚焦到数据库文件本身的存储管理时,一个名字必然会出现——Oracle Automatic Storage Management(ASM)


ASM是Oracle官方推荐的首选存储管理方案,被广泛应用于从单实例到RAC的各种部署场景。它彻底改变了传统DBA手动管理文件系统的繁琐模式,将存储管理的自动化、高性能和高可用性提升到了一个全新的高度。本文将深入解析ASM的架构原理、核心优势以及如何管理ASM磁盘组。


1. 什么是 Oracle ASM?


1.1 核心定义


Automatic Storage Management(ASM)是Oracle数据库内置的一个卷管理器(Volume Manager)文件系统的统一体。它运行在Oracle Grid Infrastructure基础之上,为数据库文件提供了一种面向性能、自动化和高可用性的专用存储管理平台。


简单来说,ASM做的事情就是将底层一堆复杂混乱的裸磁盘,抽象成一个或多个易于管理的磁盘组(Disk Group)。DBA只需告诉ASM“我要创建一个表空间”,ASM就会自动完成数据在这些磁盘间的分布(条带化)、镜像保护(冗余)以及后续的存储空间动态扩缩容。


1.2 ASM 的架构组成


ASM由两个关键部分协同工作:


  • ASM实例:一个轻量级的Oracle实例(通常命名为+ASM),它不挂载数据库,只负责管理ASM磁盘组的元数据,并将存储映射提供给数据库实例。在RAC环境中,每个节点上都会运行一个ASM实例。
  • ASM磁盘组:由一组裸磁盘组成的逻辑存储池。数据库的所有文件(数据文件、控制文件、日志文件、归档日志等)都可以直接创建在ASM磁盘组上。


存储层数据库服务器ASM实例数据库实例1.请求存储空间分配2.查询元数据,定位可用空间3.返回物理盘区映射4.直接I/O读写

用户请求: CREATE TABLESPACE ...

DBWR/其他进程

ASM实例

ASM元数据
磁盘组目录

磁盘组 DATA

磁盘1

磁盘2

磁盘3

磁盘4


工作流程解析:


  1. 数据库实例请求创建一个新的数据文件(如表空间扩容)。
  2. 该请求被发送给ASM实例。
  3. ASM实例查询自己维护的磁盘组元数据,找到所有磁盘上空闲的分配单元(AU)。
  4. ASM实例将物理盘区(Extent)的映射信息返回给数据库实例。
  5. 此后,数据库实例的后台进程(如DBWR)就可以绕过ASM实例,直接对这些物理盘区进行读写I/O操作。


这种“一次映射,多次直接访问”的架构,确保了数据路径上没有性能瓶颈。


2. ASM 的核心概念与优势


2.1 磁盘组与冗余策略


磁盘组是ASM的最高管理单位。创建磁盘组时,必须指定其冗余类型,这决定了ASM如何保护您的数据。


  • External Redundancy(外部冗余):假设底层的存储阵列已经提供了RAID镜像保护,ASM本身不做任何镜像。只提供条带化,不占用额外空间。
  • Normal Redundancy(常规冗余):ASM提供双向镜像。每个数据块都有一个额外副本存放在不同的故障组(Failure Group)中。可以容忍丢失一个故障组内的所有磁盘。所需空间是数据量的2倍。
  • High Redundancy(高冗余):ASM提供三向镜像。可以容忍同时丢失两个不同故障组的磁盘。所需空间是数据量的3倍。


2.2 条带化(Striping)


ASM自动将数据文件以分配单元(Allocation Unit, AU)为单位,均匀地分布到磁盘组内的所有磁盘上。这使得对单个文件的I/O请求可以并行地在多个物理磁盘上处理,从而极大地提升了I/O带宽和性能。


ASM磁盘组DATA逻辑文件Extent1Extent2Extent3Extent4Extent5Extent6

数据文件
users.dbf

磁盘1

磁盘2

磁盘3

磁盘4


2.3 动态重平衡(Online Rebalance)


这是ASM最强大的特性之一。当您向磁盘组添加或删除磁盘时,ASM可以在数据库完全在线的情况下,自动地将部分数据从现有磁盘迁移到新磁盘,或从待删除磁盘移出,最终使所有磁盘上的数据再次达到均匀分布。


这个过程称为重平衡(Rebalance),可以设置POWER级别(0-11)来控制重平衡的速度和其对系统I/O资源的影响。


2.4 ASM 的核心优势总结


  1. 极致的I/O性能:通过智能条带化和直接I/O路径,消除了传统文件系统的性能开销。
  2. 内置高可用:通过Normal/High Redundancy,无需依赖昂贵的存储RAID控制器即可实现数据镜像保护。
  3. 简化管理:DBA不再需要管理成千上万个文件路径和磁盘LUN,只需在磁盘组级别操作。
  4. 在线弹性伸缩:支持在线添加或删除磁盘,数据自动重分布,完全不影响业务。
  5. RAC集成:与Oracle RAC深度集成,是RAC环境的最佳存储选择。


3. 如何管理 ASM 磁盘组


ASM的管理主要通过登录到ASM实例(+ASM)执行SQL命令来完成。同时,asmcmd命令行工具也提供了类Linux风格的文件浏览和管理体验。


3.1 创建磁盘组


在创建磁盘组之前,您需要确保磁盘已经被正确格式化、分区,并通过oracleasmudev规则配置好,使ASM实例能够识别。


-- 1. 连接到ASM实例 export ORACLE_SID=+ASM sqlplus / as sysasm -- 2. 创建一个外部冗余的磁盘组,用于测试或开发环境 CREATE DISKGROUP data EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/DATA01' NAME disk_data_01, '/dev/oracleasm/disks/DATA02' NAME disk_data_02 ATTRIBUTE 'compatible.asm'='19.0', 'compatible.rdbms'='19.0'; -- 3. 创建一个常规冗余的磁盘组,用于核心生产库 CREATE DISKGROUP data_normal NORMAL REDUNDANCY FAILGROUP fg1 DISK '/dev/oracleasm/disks/DATA01' NAME data1, '/dev/oracleasm/disks/DATA02' NAME data2 FAILGROUP fg2 DISK '/dev/oracleasm/disks/DATA03' NAME data3, '/dev/oracleasm/disks/DATA04' NAME data4 ATTRIBUTE 'compatible.asm'='19.0';


关键点说明:

  • FAILGROUP:故障组,定义了一组共享同一个单点故障源的磁盘(如同一磁盘柜里的磁盘)。ASM会确保镜像数据绝不会存储在同一个故障组的两个磁盘上。
  • compatible.asm/compatible.rdbms:指定兼容性版本,决定了可以使用的ASM功能特性。


3.2 日常运维管理操作


-- 1. 查看所有磁盘组及其状态 SELECT NAME, STATE, TYPE, TOTAL_MB, FREE_MB, (1-(FREE_MB/TOTAL_MB))*100 AS PCT_USED FROM V$ASM_DISKGROUP; -- 2. 动态向磁盘组添加磁盘 ALTER DISKGROUP data ADD DISK '/dev/oracleasm/disks/DATA05' NAME disk_data_05; -- 3. 动态从磁盘组删除磁盘(会触发自动重平衡) ALTER DISKGROUP data DROP DISK disk_data_05; -- 4. 调整重平衡的并行度(POWER LEVEL) -- POWER 1 最慢,对系统影响最小; POWER 11 最快,会占用大量IO资源 ALTER DISKGROUP data REBALANCE POWER 8; -- 5. 实时监控重平衡进度 SELECT GROUP_NUMBER, OPERATION, STATE, POWER, SOFAR, EST_WORK, EST_RATE FROM V$ASM_OPERATION; -- 6. 手动挂载/卸载磁盘组 ALTER DISKGROUP data DISMOUNT; ALTER DISKGROUP data MOUNT;


3.3 使用 ASMCMD 管理文件


ASMCMD是一个非常有用的交互式命令行工具,让您可以用类似Linux文件系统的命令来浏览ASM内部结构。


# 启动asmcmd asmcmd -p # 进入之后,可以使用常见的命令 ASMCMD> ls DATA/ RECO/ ASMCMD> cd DATA/ORCL/DATAFILE ASMCMD> ls SYSTEM.256.987654321 SYSAUX.257.987654323 USERS.259.987654325 ASMCMD> pwd +DATA/ORCL/DATAFILE # 查找文件 ASMCMD> find / +DATA/ORCL/DATAFILE *USERS* # 复制文件 ASMCMD> cp +DATA/ORCL/DATAFILE/USERS.259.987654325 /backup/users.dbf


3.4 ASM 文件命名规则


您会发现ASM中的文件名如USERS.259.987654321,这种看似复杂的名称规则实际上非常科学,由三部分组成:


  • 基名(USERS):表空间名,便于人工识别。
  • 文件号(259):数据库内部的绝对文件号。
  • 化身号(987654321):一个独一无二的序列号,确保文件在创建/重建后名称唯一,防止数据错乱。


4. ASM 架构全景图


这张图展示了一个完整的RAC环境,其中所有节点都通过ASM实例来访问共享存储上的数据库文件。


共享存储RAC节点2RAC节点1管理元数据,提供映射管理元数据,提供映射管理元数据,提供映射管理元数据,提供映射获得映射后直接I/O获得映射后直接I/O

数据库实例 ORCL1

ASM实例 +ASM1

数据库实例 ORCL2

ASM实例 +ASM2

磁盘组 DATA
Normal Redundancy

磁盘组 RECO
External Redundancy


总结


Oracle ASM通过将卷管理文件系统合二为一,并融入智能的条带化、镜像和在线重平衡机制,彻底革新了Oracle数据库的存储管理方式。它不仅极大地解放了DBA的生产力,更从架构层面为数据库的性能和高可用性提供了坚实保障。


对于任何现代Oracle数据库部署,尤其是RAC环境,ASM已经是事实上的标准和必选组件。掌握ASM,是掌握Oracle数据库存储管理精髓的必经之路。


---

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询