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 File | ASM 文件(含 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. 最佳实践
- RAC 共享 Oracle Home:节省空间、统一管理
- 生产用 ACFS 存放非数据库文件:日志、归档等
- 定期快照:快速回滚
- 敏感数据加密:acfsutil encrypt
- 远距离复制:acfsutil repl
- 监控空间:避免耗尽
- 启用 Clusterware 管理:自动挂载
- 使用 19c+:特性完善
- 生产与备份分离:避免影响
- 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