
以下是对 Oracle 19c 中 V$ASM_FILEGROUP 动态性能视图的深度解析,包含全面的技术细节和实用指南:
1. 作用
V$ASM_FILEGROUP 是 ASM 文件组管理的核心视图,用于:
- 管理逻辑文件集合(如 PDB 文件组)
- 实施精细化的空间配额控制
- 简化多租户环境存储管理
- 实现文件组级别的操作(克隆、迁移、备份)
- 监控文件组资源消耗
- 管理 ASM 卷文件
📌 核心价值:在 ASM 中实现存储虚拟化,为 CDB/PDB 提供容器感知的存储管理。
2. 使用场景
- 多租户环境:为 PDB 分配独立存储空间
- 存储配额管理:限制数据库/PDB 的空间使用
- PDB 热克隆:快速复制 PDB 文件组
- 存储迁移:文件组级别的存储转移
- 资源监控:跟踪 PDB 存储消耗
- 备份恢复:文件组粒度的备份策略
- 云环境:实现租户隔离的存储分配
- 卷管理:管理 ACFS 卷文件
3. 字段含义 (Oracle 19c)
| 字段名 | 数据类型 | 说明 |
|---|---|---|
GROUP_NUMBER | NUMBER | 磁盘组编号 |
FILEGROUP_NUMBER | NUMBER | 文件组唯一标识符 |
FILEGROUP_ID | NUMBER | 文件组全局 ID |
NAME | VARCHAR2(30) | 文件组名称 |
INCARNATION | NUMBER | 文件组版本号 |
FILE_COUNT | NUMBER | 包含的文件数量 |
ALIAS_COUNT | NUMBER | 关联的别名数量 |
QUOTA_MB | NUMBER | 空间配额 (MB) |
USED_MB | NUMBER | 已用空间 (MB) |
REQUIRED_MIRROR_FREE_MB | NUMBER | 冗余所需保留空间 (MB) |
USABLE_FILE_MB | NUMBER | 可用空间 (MB) |
FREE_MB | NUMBER | 空闲空间 (MB) |
STATE | VARCHAR2(11) | 状态:CONNECTED, MOUNTED, DISMOUNTED |
TYPE | VARCHAR2(8) | 类型:DATABASE, CLUSTER, VOLUME |
DATABASE | VARCHAR2(8) | 关联数据库类型:RDBMS, MGMTDB |
DB_UNIQUE_NAME | VARCHAR2(30) | 数据库唯一名 |
CONTAINER | VARCHAR2(8) | 容器类型:ROOT, PDB |
CON_ID | NUMBER | 容器 ID |
PARENT_FILEGROUP_NUMBER | NUMBER | 父文件组编号 |
PARENT_FILEGROUP_ID | NUMBER | 父文件组全局 ID |
PRIMARY_REGION | VARCHAR2(30) | 主区域(扩展集群) |
SECONDARY_REGION | VARCHAR2(30) | 辅助区域(扩展集群) |
4. 关键计算指标
- 空间使用率:
(USED_MB / QUOTA_MB) * 100 - 配额余量:
QUOTA_MB - USED_MB - 冗余开销:
REQUIRED_MIRROR_FREE_MB / USED_MB - 区域平衡:
PRIMARY_REGIONvsSECONDARY_REGION文件分布
5. 相关视图与基表
- 相关视图:
V$ASM_FILEGROUP_FILE:文件组包含的文件V$ASM_ALIAS:文件组别名V$ASM_DATABASE:关联数据库信息V$ASM_VOLUME:卷文件组详情V$PDBS:PDB 容器信息
- 基表:
X$KFGRP:文件组元数据X$KFFGF:文件组文件映射X$KFVOL:卷文件信息X$KFFIL:ASM 文件元数据
6. 工作原理
文件组架构
核心机制
-
文件组创建:
ALTER DISKGROUP DATA ADD FILEGROUP PDB_SALES DATABASE 'CDB1' CONTAINER 'PDB1' QUOTA 100G; -
文件关联:
- 自动关联 PDB 文件
- 手动添加文件:
ALTER FILEGROUP ADD FILE '+DATA/CDB1/PDB1/users01.dbf'
-
配额管理:
-
克隆操作:
CREATE PLUGGABLE DATABASE PDB_CLONE FROM PDB_SALES FILEGROUP_MAP = ('PDB_SALES','PDB_CLONE') STORAGE (FILEGROUP COPY); -
区域感知(扩展集群):
PRIMARY_REGION: 主访问区域SECONDARY_REGION: 故障转移区域- 自动维护区域文件副本
7. 常用 SQL 查询示例
(1) 查看所有文件组
SELECT
g.name AS dg_name,
fg.name AS filegroup,
fg.type,
fg.container,
fg.db_unique_name,
ROUND(fg.quota_mb/1024,2) AS quota_gb,
ROUND(fg.used_mb/1024,2) AS used_gb,
ROUND((fg.used_mb/fg.quota_mb)*100,2) AS used_pct
FROM v$asm_filegroup fg
JOIN v$asm_diskgroup g ON fg.group_number = g.group_number;
(2) 检测配额超限文件组
SELECT
name,
quota_mb,
used_mb,
ROUND((used_mb/quota_mb)*100,2) AS used_pct
FROM v$asm_filegroup
WHERE used_mb > quota_mb * 0.9; -- 使用超过90%
(3) PDB 文件组分析
SELECT
fg.name AS filegroup,
p.name AS pdb_name,
fg.used_mb,
fg.file_count,
fg.state
FROM v$asm_filegroup fg
JOIN v$pdbs p ON fg.con_id = p.con_id
WHERE fg.type = 'DATABASE'
AND fg.container = 'PDB';
(4) 文件组文件清单
SELECT
fg.name AS filegroup,
a.name AS file_alias,
f.bytes/1048576 AS size_mb,
f.file_type
FROM v$asm_filegroup_file fgf
JOIN v$asm_filegroup fg ON fgf.filegroup_number = fg.filegroup_number
JOIN v$asm_alias a ON fgf.file_number = a.file_number
JOIN v$asm_file f ON fgf.file_number = f.file_number
WHERE fg.name = 'PDB_SALES';
(5) 卷文件组监控
SELECT
fg.name AS vol_group,
v.volume_name,
v.volume_device,
v.state,
ROUND(v.total_mb/1024,2) AS size_gb
FROM v$asm_filegroup fg
JOIN v$asm_volume v ON fg.filegroup_number = v.filegroup_number
WHERE fg.type = 'VOLUME';
(6) 文件组克隆操作
-- 创建克隆文件组
ALTER DISKGROUP DATA ADD FILEGROUP PDB_CLONE
CLONE FILEGROUP PDB_SALES;
-- 验证克隆状态
SELECT name, state
FROM v$asm_filegroup
WHERE name IN ('PDB_SALES','PDB_CLONE');
8. 高级管理技巧
技巧1:动态配额调整
ALTER FILEGROUP PDB_SALES SET QUOTA = 200G;
技巧2:文件组重定位
ALTER FILEGROUP PDB_SALES REBALANCE MOVEFILE
TO DISKGROUP DATA_SSD;
技巧3:跨区域文件组
ALTER FILEGROUP PDB_GLOBAL SET ATTRIBUTE
('PRIMARY_REGION'='EUROPE',
'SECONDARY_REGION'='ASIA');
技巧4:文件组备份
RMAN> BACKUP FILEGROUP 'PDB_SALES';
技巧5:配额使用历史分析
SELECT
TO_CHAR(snap_time,'YYYY-MM-DD') AS day,
MAX(used_mb) AS max_used_mb,
AVG(used_mb) AS avg_used_mb
FROM pdb_storage_history -- 需自定义历史表
GROUP BY TO_CHAR(snap_time,'YYYY-MM-DD');
9. 注意事项与最佳实践
关键限制
| 操作 | 限制说明 |
|---|---|
| 文件组重命名 | 不支持 |
| 跨磁盘组移动文件组 | 需使用REBALANCE MOVEFILE |
| 根容器(CDB$ROOT) | 不能有文件组配额 |
| 非 PDB 文件 | 无法加入文件组 |
性能考量
- 文件组元数据存储在 磁盘组 1 号文件(File Directory)
- 频繁配额检查增加 CPU 开销(约 3-5%)
- 超过 100 个文件组时 管理开销显著增加
最佳实践
-
命名规范:
ALTER FILEGROUP PDB_{PDB_NAME} ... -- PDB_SALES, PDB_HR -
配额缓冲:
SET QUOTA = 1.2 * CURRENT_SIZE; -- 保留20%缓冲 -
监控脚本:
BEGIN DBMS_SCHEDULER.CREATE_JOB( job_name => 'CHECK_FILEGROUP_QUOTA', job_type => 'PLSQL_BLOCK', job_action => 'BEGIN check_quota_utilization; END;', repeat_interval => 'FREQ=HOURLY' ); END; -
安全隔离:
GRANT ALTER FILEGROUP ON PDB_SALES TO PDB_ADMIN; -
云环境集成:
- OCI: 文件组映射到 Block Volume Group
- AWS: 映射到 EBS Volume Set
- Azure: 映射 to Disk Pool
故障处理
-
空间不足:
ORA-15041ALTER FILEGROUP &fg_name SET QUOTA = &new_value; -
状态异常:
STATE = 'DISMOUNTED'ALTER FILEGROUP &fg_name MOUNT; -
文件组损坏:
ALTER DISKGROUP CHECK FILEGROUP &fg_name;
总结
V$ASM_FILEGROUP 是 Oracle ASM 多租户存储管理的核心控制平面,通过提供:
- 逻辑存储隔离(PDB 文件组)
- 精细化配额控制
- 文件组粒度的操作单元
- 跨区域部署支持
- 存储资源核算能力
实现的关键价值:
- 租户隔离:PDB 级别的存储隔离
- 容量管控:精确的配额限制与告警
- 敏捷运维:PDB 克隆/迁移加速 50%
- 成本优化:云环境精确计量存储消耗
- 高可用扩展:跨区域文件组部署
- 简化管理:统一管理界面(文件组 > 文件)
结合 ASM 命令行工具 asmcmd 的文件组命令:
asmcmd fgcreate -G DATA -d 'CDB1' -c 'PDB1' PDB_SALES
asmcmd fglist
asmcmd fgquota -s 200G PDB_SALES
可构建完整的 ASM 文件组管理体系,为云原生数据库提供企业级存储虚拟化能力。
欢迎关注我的公众号《IT小Chen》
Oracle数据库V$ASM_FILEGROUP视图深度解析

被折叠的 条评论
为什么被折叠?



