Oracle ASM 磁盘组 / 磁盘 / 文件


如果你刚接触 ASM,建议把这句话默念三遍。本文基于 11gR2 官方文档,并结合 12c/19c 的新特性与日常运维经验,把「磁盘组、磁盘、文件」这三个概念揉碎、讲透。


ASM Disk Group:自描述的存储池

ASM Disk Group(DG)是由一个或多个 ASM Disk 组成的逻辑存储池,具备以下特点:

  • 自包含:所有元数据(磁盘头、文件目录、别名、仲裁信息等)都存放在 DG 内部,磁盘组本身即可“自描述”。
  • 独立单元:一个 DG 的元数据损坏不会影响其他 DG。
  • 文件系统接口:对 DBA 而言,DG 就像一个大目录,创建表空间时直接写 +DATA,不需要关心底层磁盘名。

建议

  • 11gR2 之前:两个 DG 足够
    • +DATA:数据文件、控制文件、redo
    • +FRA:备份、归档、闪回日志
  • 11gR2 之后:考虑第三个 DG
    • +OCR:ASM spfile、OCR、voting file(Grid Infrastructure 专属)
  • 12c 及以后
    • 支持 511 个 DG(11g 只有 63 个)
    • 支持 32 PB 单盘、4 PB 单 DG,限制进一步放开。

ASM Disk:磁盘如何“入团”

先分区,再入团

  • 强烈建议:无论整盘还是 LUN,一律先分区(哪怕只分一个区)。 好处:避免操作系统把整块盘当成“空闲”而被误格式化;分区表还能存放 ASM 磁盘头信息。
  • 常见来源
    • 本地盘:SATA/SAS/NVMe
    • SAN:FC / iSCSI / FCoE LUN
    • NAS:NFS 挂载(仅 12c 后支持,性能有限)
    • Exadata:LIBCELL 输出的 Grid Disk

磁盘发现机制

  • 参数:ASM_DISKSTRING
    • 默认值:*(Linux 下 /dev/raw/*/dev/sd*/dev/dm-* 等都会被扫)
    • 建议显式指定,例如:/dev/oracleasm/disks/*,减少误扫。
  • 集群场景:不同节点 OS 设备名可以不同,ASM 只认磁盘头里的 GUID,不认 /dev/sdX

容量与数量限制

版本单盘最大单 DG 最大磁盘数
11gR22 TB(BUG 6453944 前)10,000
12c+32 PB10,000+

遇到“2 TB 以上盘添加成功”的坑,可打补丁或直接升级。


ASM File:一切皆文件

存放规则

  • 唯一归属:一个文件只能属于一个 DG,但一个 DG 可以存放多个数据库的文件。
  • 均衡分布:ASM 在 DG 内所有磁盘上条带化数据,既保证 I/O 均衡,又逼近裸设备性能。
  • 编号机制
    • 数据文件:从 256 开始编号
    • 元数据文件:1–255 预留(如 File#1 是磁盘头,File#2 是文件目录,等等)

支持类型

类别示例文件备注
数据库文件数据文件、控制文件、redo、standby redo、归档、备份集、Data Pump 文件直接存放
ASM 元数据磁盘头、文件目录、别名目录、仲裁文件自动管理
非数据库文件二进制、文本、trace、日志、应用安装包11gR2 前不支持,需 ACFS 或本地文件系统

ACFS 的登场

  • 11gR2 引入 ASM Cluster File System (ACFS)
    • 基于 ASM DG 的通用集群文件系统。
    • 支持数据库二进制、应用文件、日志等几乎所有传统文件类型。
    • 支持快照、动态扩容、跨节点共享。
  • 使用场景:Oracle Home、中间件、应用日志,甚至 Docker 镜像。

注意

  1. 磁盘命名惯例/dev/oracleasm/disks/ 下建软链接,命名包含 LUN ID(如 DATA01, DATA02),便于排障。
  2. 磁盘头备份 kfed read /dev/oracleasm/disks/DATA01 > /backup/DATA01.kfed 一旦磁盘头损坏,可快速恢复。
  3. 监控空间 asmcmd lsdg 看使用率,超过 85% 及时加盘或 rebalance。
  4. ACFS 与 DBFS 的选择
    • 需要集群级共享 → ACFS
    • 单机或少量文件 → DBFS 更简单

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部