1.1、ASM 架构
ASM(Automatic Storage Management)是Oracle提供的卷管理和文件系统解决方案,集成了文件系统和卷管理器的功能。12c+版本的ASM支持:
- **自动条带化:**ASM磁盘组自动条带化和镜像
- **冗余保护:**Normal/High/External三种冗余级别
- **动态扩展:**在线添加/删除磁盘,自动重平衡
- **集群文件系统:**支持ACFS(ASM Cluster File System)
**Flex ASM:**Flex ASM(12c+),实例可远程访问ASM
1.2、磁盘组管理
sql
-- 创建磁盘组
CREATE DISKGROUP DATA NORMAL REDUNDANCY
FAILGROUP fg1 DISK
'/dev/sdb' NAME DATA_001,
'/dev/sdc' NAME DATA_002
FAILGROUP fg2 DISK
'/dev/sdd' NAME DATA_003,
'/dev/sde' NAME DATA_004
ATTRIBUTE 'au_size' = '4M';
-- 创建高冗余磁盘组(用于REDO)
CREATE DISKGROUP REDO HIGH REDUNDANCY
FAILGROUP fg1 DISK '/dev/sdf' NAME REDO_001
FAILGROUP fg2 DISK '/dev/sg' NAME REDO_002
FAILGROUP fg3 DISK '/dev/sdh' NAME REDO_003;
-- 查看磁盘组状态
SELECT name, state, type, total_mb, free_mb,
ROUND(free_mb/total_mb*100, 1) free_pct
FROM v$asm_diskgroup;
-- 添加磁盘到磁盘组(在线重平衡)
ALTER DISKGROUP DATA ADD
FAILGROUP fg1 DISK '/dev/sdi' NAME DATA_005
FAILGROUP fg2 DISK '/dev/sdj' NAME DATA_006
REBALANCE POWER 8;
-- 查看重平衡进度
SELECT group_number, operation, state, power, est_minutes
FROM v$asm_operation;
实例:ASM 磁盘组在线扩容
S --- Situation **(场景):**某核心数据库使用ASM管理存储,DATA磁盘组使用率达到85%,包含200个数据文件,每天新增数据约50GB,预计3周后磁盘空间将耗尽。业务要求扩容过程中不能停库。
T --- Task **(任务):**在线扩展DATA磁盘组容量,确保重平衡期间数据库性能可接受。
A --- Action(行动):
1、评估当前I/O负载,选择业务低峰期(凌晨2点)执行;
2、 添加4块新磁盘(每块2TB),分两个Failgroup各2块:
sql
ALTER DISKGROUP DATA ADD
FAILGROUP fg1 DISK '/dev/sdk' NAME DATA_007,
'/dev/sdl' NAME DATA_008
FAILGROUP fg2 DISK '/dev/sdm' NAME DATA_009,
'/dev/sdn' NAME DATA_010
REBALANCE POWER 4; -- 使用较低功率减少性能影响
3、监控重平衡进度:
SELECT * FROM v$asm_operation;
4、重平衡完成后提升到POWER 10加速剩余数据迁移。
R --- Result **(结果):**DATA磁盘组容量从20TB扩展至28TB,使用率降至60%。重平衡总耗时约4小时,期间数据库响应时间增加约15%(可接受范围)。重平衡完成后I/O吞吐量提升约20%(更多磁盘并行读写)。
1.3、ASM 过滤(ASM Filter Driver)
Oracle 12.2+引入ASM Filter Driver(AFD),替代传统的ASMLib和udev规则:
sql
-- 标记磁盘为ASM候选盘
$ asmcmd afd_label DATA01 /dev/sdb --init
$ asmcmd afd_label DATA02 /dev/sdc --init
-- 查看AFD磁盘
$ asmcmd afd_lslbl
-- 在ASM中使用AFD磁盘
CREATE DISKGROUP DATA EXTERNAL REDUNDANCY
DISK 'AFD:DATA01', 'AFD:DATA02';