Oracle ACFS(ASM Cluster File System)部署与使用

Oracle ACFS(ASM Cluster File System)部署与使用

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


1. 概述

ACFS(ASM Cluster File System) 是 Oracle 提供的集群文件系统[1],基于 ASM 构建:

核心特性

  • 跨节点共享文件系统
  • 支持 RAC 集群
  • 通用文件存储(非数据库文件)
  • 支持快照、复制、加密
  • 支持标签、ACL

典型用途

  • Oracle Home 共享
  • 应用程序文件
  • BFILE 存储
  • 通用文件共享

2. ACFS 架构

2.1 组件

+-------------------+
| ACFS File System  |  ← 用户挂载点
+-------------------+


+-------------------+
| ADVM Volume       |  ← 卷管理
+-------------------+


+-------------------+
| ASM Disk Group    |  ← ASM 存储
+-------------------+


+-------------------+
| ASM Disks         |  ← 物理磁盘
+-------------------+

2.2 与 ASM 关系

说明
ASM Disk物理磁盘
ASM Disk Group磁盘组
ASM FileASM 文件(含 ADVM 卷文件)
ADVM Volume卷设备(/dev/asm/volume-XXX)
ACFS文件系统

3. 前置条件

3.1 操作系统要求

# Linux 内核模块
lsmod | grep oracle
# oracleoks, oracleadvm, oracleacfs

# 加载模块
modprobe oracleacfs
modprobe oracleadvm
modprobe oracleoks

3.2 Grid Infrastructure

ACFS 需要 Grid Infrastructure(单机或 RAC):

# 检查 Clusterware
crsctl check crs

# 检查 ASM
asmcmd lsdg

3.3 ASM 兼容性

-- Disk Group 兼容性
SELECT group_number, name, compatibility, database_compatibility, asm_compatibility
FROM v$asm_diskgroup;
-- 必须为 11.2+

4. 创建 ACFS

4.1 创建 Disk Group

-- 创建 Disk Group
CREATE DISKGROUP acfs_data EXTERNAL REDUNDANCY
  DISK '/dev/asm-disk1', '/dev/asm-disk2'
  ATTRIBUTE 'au_size'='4M',
            'compatible.asm'='19.0',
            'compatible.rdbms'='19.0',
            'compatible.advm'='19.0';

4.2 创建 ADVM Volume

-- 创建卷
ALTER DISKGROUP acfs_data ADD VOLUME acfsvol1 
  SIZE 50G 
  ATTRIBUTE 'usage'='ACFS';

-- 查看
SELECT group_number, volume_name, volume_device, size_mb 
FROM v$asm_volume;
-- VOLUME_DEVICE: /dev/asm/acfsvol1-123

4.3 创建 ACFS 文件系统

# 创建文件系统
mkfs -t acfs /dev/asm/acfsvol1-123

# 或使用 asmca
asmca

4.4 挂载文件系统

# 创建挂载点
mkdir -p ******

# 挂载
mount -t acfs /dev/asm/acfsvol1-123 /u01/acfs/data

# 验证
df -h /u01/acfs/data

5. 通过 asmcmd 管理

5.1 创建卷

# asmcmd 创建卷
asmcmd volcreate -G acfs_data -s 50G acfsvol1

# 查看卷
asmcmd volinfo -G acfs_data acfsvol1

5.2 创建文件系统

# 创建文件系统
asmcmd mkfs /dev/asm/acfsvol1-123

5.3 注册文件系统

# 注册到 Clusterware(自动挂载)
srvctl add filesystem -d /dev/asm/acfsvol1-123 \
  -m /u01/acfs/data \
  -g acfs_data \
  -v acfsvol1 \
  -u oracle

# 启动
srvctl start filesystem -d /dev/asm/acfsvol1-123

6. ACFS 管理

6.1 扩容

-- 扩大卷
ALTER DISKGROUP acfs_data RESIZE VOLUME acfsvol1 SIZE 100G;
# 在线扩展文件系统
acfsutil size +50G /u01/acfs/data

6.2 缩容

# 缩小文件系统(仅 12.2+)
acfsutil size -10G /u01/acfs/data

6.3 卸载

# 卸载
umount /u01/acfs/data

# Clusterware 停止
srvctl stop filesystem -d /dev/asm/acfsvol1-123

6.4 删除

-- 删除卷
ALTER DISKGROUP acfs_data DROP VOLUME acfsvol1;

7. ACFS 快照

7.1 创建快照

# 创建快照
acfsutil snap create snap_20260721 /u01/acfs/data

# 查看快照
acfsutil snap info /u01/acfs/data

7.2 访问快照

# 快照路径
ls /u01/acfs/data/.ACFS/snaps/snap_20260721/

7.3 删除快照

acfsutil snap delete snap_20260721 /u01/acfs/data

8. ACFS 加密

8.1 启用加密

# 启用加密
acfsutil encrypt init /u01/acfs/data

# 加密指定目录
acfsutil encrypt on /u01/acfs/data/sensitive

8.2 查看加密状态

acfsutil encrypt info /u01/acfs/data

8.3 禁用加密

acfsutil encrypt off /u01/acfs/data/sensitive

9. ACFS 复制

9.1 启用复制

# 主站点
acfsutil repl init primary \
  -src /u01/acfs/data \
  -dst standby-host:/u01/acfs/data_rep \
  -tag rep1

9.2 备站点

# 备站点
acfsutil repl init standby \
  -src /u01/acfs/data_rep \
  -primary primary-host:/u01/acfs/data

9.3 监控

acfsutil repl info /u01/acfs/data
acfsutil repl stats /u01/acfs/data

10. ACFS 标签

10.1 启用标签

acfsutil tag init /u01/acfs/data

10.2 设置标签

# 为文件设置标签
acfsutil tag set -t "confidential" /u01/acfs/data/sensitive/file.txt

# 查看标签
acfsutil tag get /u01/acfs/data/sensitive/file.txt

10.3 按标签查询

acfsutil tag ls -t "confidential" /u01/acfs/data

11. RAC 共享 Oracle Home

11.1 共享 Oracle Home 优势

  • 节省磁盘空间
  • 一致性升级
  • 简化补丁管理

11.2 配置共享 Oracle Home

# 1. 创建 ACFS
mkfs -t acfs /dev/asm/orahome-vol
mount -t acfs /dev/asm/orahome-vol /u01/app/oracle/product/19.0.0

# 2. 在 ACFS 上安装 Oracle
./runInstaller -silent -responseFile /tmp/install.rsp

# 3. 所有节点共享
# 节点 2 挂载同一文件系统
mount -t acfs /dev/asm/orahome-vol /u01/app/oracle/product/19.0.0

# 4. 节点 2 执行 root 脚本
$ORACLE_HOME/root.sh

12. 监控 ACFS

12.1 文件系统状态

# 查看
acfsutil info fs /u01/acfs/data

# 输出:
# ACFS Version: 19.0.0.0.0
# on-disk version: 50.0
# ...
# mount: /u01/acfs/data
# ...

12.2 卷状态

SELECT 
  group_number, 
  volume_name, 
  volume_device, 
  size_mb,
  usage_state
FROM v$asm_volume;

12.3 性能监控

# I/O 统计
acfsutil perf info /u01/acfs/data

# 详细统计
acfsutil perf acchi /u01/acfs/data

13. 常见坑与排错

13.1 ORA-15447: ASM 兼容性不足

修复

ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.asm'='19.0';
ALTER DISKGROUP acfs_data SET ATTRIBUTE 'compatible.advm'='19.0';

13.2 ACFS 模块未加载

现象:mount 失败。

修复

# 加载模块
modprobe oracleacfs
modprobe oracleadvm

# 验证
lsmod | grep oracle

13.3 挂载失败

修复

# 1. 检查卷设备
ls -l /dev/asm/

# 2. 检查挂载点
ls -ld /u01/acfs/data

# 3. 检查权限
chown oracle:dba /u01/acfs/data

13.4 Clusterware 注册失败

修复

# 检查 Clusterware
crsctl stat res -t

# 重新注册
srvctl remove filesystem -d /dev/asm/acfsvol1-123
srvctl add filesystem -d /dev/asm/acfsvol1-123 -m /u01/acfs/data -g acfs_data -v acfsvol1

13.5 ACFS 扩容失败

修复

-- 1. 检查 ASM 空间
SELECT name, total_mb, free_mb FROM v$asm_diskgroup;

-- 2. 增加磁盘
ALTER DISKGROUP acfs_data ADD DISK '/dev/asm-disk3';

-- 3. 扩大卷
ALTER DISKGROUP acfs_data RESIZE VOLUME acfsvol1 SIZE 100G;

-- 4. 扩大文件系统
acfsutil size +50G /u01/acfs/data

14. 最佳实践

  1. RAC 共享 Oracle Home:节省空间、统一管理
  2. 生产用 ACFS 存放非数据库文件:日志、归档等
  3. 定期快照:快速回滚
  4. 敏感数据加密:acfsutil encrypt
  5. 远距离复制:acfsutil repl
  6. 监控空间:避免耗尽
  7. 启用 Clusterware 管理:自动挂载
  8. 使用 19c+:特性完善
  9. 生产与备份分离:避免影响
  10. ACFS vs OCFS2:ACFS 为 Oracle 推荐

15. 参考资料

[1] Oracle ASM Administrator’s Guide 19c, “Managing Oracle ACFS and Oracle ADVM” https://docs.oracle.com/en/database/oracle/oracle-database/19/ostmg/managing-oracle-acfs-oracle-advm.html