Oracle ASM存储管理的终极奥义前言在前面的文章中我们讨论了Oracle RAC集群和OCFS2集群文件系统。当我们把目光聚焦到数据库文件本身的存储管理时一个名字必然会出现——Oracle Automatic Storage ManagementASM。ASM是Oracle官方推荐的首选存储管理方案被广泛应用于从单实例到RAC的各种部署场景。它彻底改变了传统DBA手动管理文件系统的繁琐模式将存储管理的自动化、高性能和高可用性提升到了一个全新的高度。本文将深入解析ASM的架构原理、核心优势以及如何管理ASM磁盘组。1. 什么是 Oracle ASM1.1 核心定义Automatic Storage ManagementASM是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工作流程解析数据库实例请求创建一个新的数据文件如表空间扩容。该请求被发送给ASM实例。ASM实例查询自己维护的磁盘组元数据找到所有磁盘上空闲的分配单元AU。ASM实例将物理盘区Extent的映射信息返回给数据库实例。此后数据库实例的后台进程如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 条带化StripingASM自动将数据文件以分配单元Allocation Unit, AU为单位均匀地分布到磁盘组内的所有磁盘上。这使得对单个文件的I/O请求可以并行地在多个物理磁盘上处理从而极大地提升了I/O带宽和性能。ASM磁盘组DATA逻辑文件Extent1Extent2Extent3Extent4Extent5Extent6数据文件users.dbf磁盘1磁盘2磁盘3磁盘42.3 动态重平衡Online Rebalance这是ASM最强大的特性之一。当您向磁盘组添加或删除磁盘时ASM可以在数据库完全在线的情况下自动地将部分数据从现有磁盘迁移到新磁盘或从待删除磁盘移出最终使所有磁盘上的数据再次达到均匀分布。这个过程称为重平衡Rebalance可以设置POWER级别0-11来控制重平衡的速度和其对系统I/O资源的影响。2.4 ASM 的核心优势总结极致的I/O性能通过智能条带化和直接I/O路径消除了传统文件系统的性能开销。内置高可用通过Normal/High Redundancy无需依赖昂贵的存储RAID控制器即可实现数据镜像保护。简化管理DBA不再需要管理成千上万个文件路径和磁盘LUN只需在磁盘组级别操作。在线弹性伸缩支持在线添加或删除磁盘数据自动重分布完全不影响业务。RAC集成与Oracle RAC深度集成是RAC环境的最佳存储选择。3. 如何管理 ASM 磁盘组ASM的管理主要通过登录到ASM实例ASM执行SQL命令来完成。同时asmcmd命令行工具也提供了类Linux风格的文件浏览和管理体验。3.1 创建磁盘组在创建磁盘组之前您需要确保磁盘已经被正确格式化、分区并通过oracleasm或udev规则配置好使ASM实例能够识别。-- 1. 连接到ASM实例 export ORACLE_SIDASM 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.asm19.0, compatible.rdbms19.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.asm19.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.dbf3.4 ASM 文件命名规则您会发现ASM中的文件名如USERS.259.987654321这种看似复杂的名称规则实际上非常科学由三部分组成基名USERS表空间名便于人工识别。文件号259数据库内部的绝对文件号。化身号987654321一个独一无二的序列号确保文件在创建/重建后名称唯一防止数据错乱。4. ASM 架构全景图这张图展示了一个完整的RAC环境其中所有节点都通过ASM实例来访问共享存储上的数据库文件。共享存储RAC节点2RAC节点1管理元数据提供映射管理元数据提供映射管理元数据提供映射管理元数据提供映射获得映射后直接I/O获得映射后直接I/O数据库实例 ORCL1ASM实例 ASM1数据库实例 ORCL2ASM实例 ASM2磁盘组 DATANormal Redundancy磁盘组 RECOExternal Redundancy总结Oracle ASM通过将卷管理和文件系统合二为一并融入智能的条带化、镜像和在线重平衡机制彻底革新了Oracle数据库的存储管理方式。它不仅极大地解放了DBA的生产力更从架构层面为数据库的性能和高可用性提供了坚实保障。对于任何现代Oracle数据库部署尤其是RAC环境ASM已经是事实上的标准和必选组件。掌握ASM是掌握Oracle数据库存储管理精髓的必经之路。---