文章目录
06 ASM存储入门——Oracle 19c的“存储管家”(可选,针对需要ASM的场景)
在Oracle数据库运维中,“存储”是绕不开的核心环节。很多新手刚开始会用传统文件系统(如ext4、xfs)存储数据,但随着业务增长,数据量变大、高可用需求提升,传统文件系统的短板逐渐显现——手动管理磁盘、负载不均、故障恢复复杂。
这时候,Oracle自带的ASM存储就该登场了。ASM(自动存储管理)就像一位专业的“存储管家”,能自动帮你打理磁盘资源:整合分散磁盘、均衡IO负载、保障数据安全,还能无缝对接RAC集群。今天这篇入门指南,就带大家彻底搞懂ASM:从核心概念到环境搭建,再到日常运维,每一步都有具体操作,新手也能快速上手!
一、先搞懂:ASM的核心概念(“管家”的工作体系)
要用好ASM,先理清三个核心概念——磁盘组、ASM实例、故障组,它们就像“管家”的工作工具和管理逻辑,理解了这些,后续操作就顺理成章了。
1.1 磁盘组:“管家”的“收纳盒”
磁盘组是ASM的核心存储单元,相当于“管家”用来收纳数据的“大盒子”。它把多个物理磁盘(或分区、LVM卷)整合为一个逻辑单元,对外提供统一的存储接口。
比如你有3块100GB的物理磁盘,ASM可以把它们组成一个300GB的“DATA磁盘组”,数据库只需要往这个“盒子”里存数据,不用关心数据具体存在哪块物理磁盘上。
Oracle推荐创建至少两个磁盘组,分工明确:
-
DATA磁盘组:存储数据文件、控制文件、联机日志等核心业务数据;
-
FRA磁盘组:存储归档日志、备份集、闪回日志等恢复相关文件(FRA即快速恢复区)。
1.2 ASM实例:“管家”本人
ASM实例是管理磁盘组的“核心进程”,相当于“管家”本人。它不存储业务数据,只负责维护磁盘组的元数据(比如磁盘位置、数据分布、故障信息),并完成磁盘管理、负载均衡、故障恢复等工作。
关键特点:
-
单实例环境:ASM实例独立存在,与数据库实例分开启动;
-
RAC环境:整个集群共享一个ASM实例(或每个节点一个,但管理同一套磁盘组),确保两节点访问统一存储;
-
登录身份:用sysasm身份登录(区别于数据库的sysdba),拥有ASM的最高权限。
1.3 故障组:“管家”的“备份方案”
故障组是为了实现高可用的“磁盘分组策略”,相当于“管家”给重要数据做的备份。它把磁盘组内的磁盘分成不同组,当某块磁盘故障时,ASM能从其他故障组的镜像中恢复数据。
常见的冗余模式(对应不同的故障组配置):
-
外部冗余:不做ASM镜像,依赖存储本身的RAID(如RAID5、RAID10)保障安全,适合生产环境(存储已做冗余);
-
正常冗余:ASM自动做双镜像,至少需要2个故障组(比如2块独立磁盘),一块坏了另一块能恢复,适合没有RAID的环境;
-
高冗余:ASM自动做三镜像,至少3个故障组,安全性最高,但磁盘利用率最低(仅33%),适合核心关键业务。
1.4 ASM vs 传统文件系统:“专业管家”的优势
相比传统文件系统,ASM的优势非常明显,这也是它成为生产环境首选的原因:
| 对比维度 | 传统文件系统(ext4/xfs) | ASM存储 |
|---|---|---|
| 磁盘管理 | 手动分区、挂载,扩容需手动调整(如LVM) | 自动整合磁盘,扩容只需添加磁盘到组 |
| IO负载 | 需手动优化IO分配,容易出现热点磁盘 | 自动均衡IO,把数据分散到不同磁盘 |
| 高可用 | 依赖RAID,故障恢复复杂 | 支持多镜像,故障自动检测与恢复 |
| Oracle适配 | 通用存储,无特殊优化 | Oracle原生支持,无缝对接RAC、备份恢复 |
| 一句话总结:传统文件系统是“手动收纳”,ASM是“智能收纳+自动备份”,适合Oracle数据库的规模化、高可用需求。 |
二、动手搭:ASM环境搭建全流程(单实例为例)
了解了核心概念,接下来动手搭建ASM环境。以Oracle 19c单实例、CentOS 7系统为例,核心步骤:准备磁盘 → 创建ASM实例 → 配置磁盘组 → 数据库使用ASM存储。
2.1 前置准备:磁盘规划与标记
ASM需要独立的物理磁盘(或分区),先完成磁盘准备(root用户操作):
2.1.1 识别物理磁盘
# 查看服务器磁盘列表,假设新增2块磁盘:/dev/sdb(200GB)、/dev/sdc(300GB)
lsblk
# 或用fdisk查看
fdisk -l
2.1.2 磁盘分区(可选,也可直接用整块磁盘)
# 对/dev/sdb分区(用于DATA磁盘组)
fdisk /dev/sdb
# 输入n→p→1→回车→回车→t→8e→w(8e是Linux LVM类型,ASM支持)
# 对/dev/sdc分区(用于FRA磁盘组),操作同上
fdisk /dev/sdc
2.1.3 安装ASM依赖包
yum install -y oracleasm-support oracleasmlib oracleasm-`uname -r`
2.1.4 标记ASM磁盘(关键步骤)
用oracleasm工具把分区标记为ASM可用磁盘,方便ASM识别:
# 初始化ASM库(仅第一次执行)
oracleasm init
# 配置ASM所属用户组(oinstall)
oracleasm configure -i
# 按提示输入:oracle用户、oinstall组
# 标记磁盘(命名规则:asm-磁盘组-序号)
oracleasm createdisk ASM_DATA_01 /dev/sdb1
oracleasm createdisk ASM_FRA_01 /dev/sdc1
# 查看标记结果(状态为AVAILABLE表示正常)
oracleasm listdisks
# 输出:ASM_DATA_01 ASM_FRA_01
2.2 步骤1:创建ASM实例
Oracle 19c可以通过DBCA工具图形化创建ASM实例,也可以用命令行,这里推荐图形化(新手友好):
2.2.1 启动DBCA工具(oracle用户)
su - oracle
dbca
2.2.2 图形化创建步骤
-
选择“Configure Automatic Storage Management (ASM)”,点击“Next”;
-
选择“Create ASM Instance”,点击“Next”;
-
设置ASM实例参数:
-
ASM实例名:默认+ASM(单实例固定);
-
SYS密码:设为Asm_123#(符合复杂度);
-
内存分配:建议1-2GB(根据服务器内存调整)。
-
-
确认配置,点击“Finish”,等待ASM实例创建完成。
2.2.3 验证ASM实例(oracle用户)
# 切换到ASM实例环境变量
export ORACLE_SID=+ASM
# 用sysasm身份登录
sqlplus / as sysasm
# 查看ASM实例状态(应为OPEN)
select status from v$instance;
# 输出:STATUS
# ------
# OPEN
2.3 步骤2:创建DATA和FRA磁盘组
ASM实例创建完成后,用ASMCA工具创建磁盘组(图形化+命令行两种方式,任选其一):
2.3.1 图形化方式(ASMCA)
su - oracle
asmca
操作步骤:
-
点击“Create”,进入磁盘组创建界面;
-
创建DATA磁盘组:
-
磁盘组名:DATA;
-
冗余模式:External(假设存储已做RAID);
-
选择磁盘:勾选ASM_DATA_01(之前标记的磁盘);
-
点击“OK”。
-
-
重复步骤2,创建FRA磁盘组:
-
磁盘组名:FRA;
-
冗余模式:External;
-
选择磁盘:勾选ASM_FRA_01。
-
-
点击“Exit”完成创建。
2.3.2 命令行方式(sqlplus)
# 登录ASM实例
sqlplus / as sysasm
# 创建DATA磁盘组(外部冗余)
create diskgroup DATA external redundancy disk '/dev/oracleasm/disks/ASM_DATA_01';
# 创建FRA磁盘组(外部冗余)
create diskgroup FRA external redundancy disk '/dev/oracleasm/disks/ASM_FRA_01';
# 查看磁盘组状态(应为MOUNTED)
select name, state, total_mb, free_mb from v$asm_diskgroup;
# 输出:
# NAME STATE TOTAL_MB FREE_MB
# ----- ----- -------- -------
# DATA MOUNTED 204800 204784
# FRA MOUNTED 307200 307184
2.4 步骤3:数据库使用ASM存储(两种场景)
ASM环境搭建完成后,数据库可以通过两种方式使用ASM存储:新建数据库时指定,或现有数据库迁移到ASM。
2.4.1 新建数据库时指定ASM存储(DBCA)
启动DBCA创建数据库,在“Storage Type”步骤选择“Automatic Storage Management (ASM)”,然后:
-
数据文件路径:选择+DATA磁盘组;
-
恢复区路径:选择+FRA磁盘组;
-
后续步骤正常配置,数据库会自动把数据存储到ASM磁盘组。
2.4.2 现有数据库迁移到ASM(示例:数据文件迁移)
如果数据库已使用文件系统,可通过RMAN迁移数据文件到ASM:
# 1. 登录数据库(sysdba身份)
sqlplus / as sysdba
# 2. 关闭数据库,启动到mount状态
shutdown immediate;
startup mount;
# 3. 启动RMAN,迁移数据文件
rman target /
# 4. 迁移所有数据文件到+DATA磁盘组
backup as copy database format '+DATA';
# 5. 切换数据文件到ASM副本
switch database to copy;
# 6. 打开数据库
alter database open;
# 7. 验证:查看数据文件路径(已变为+DATA)
select name from v$datafile;
# 输出:+DATA/ORCL/DATAFILE/system.256.1001234567
三、日常用:ASM核心操作(运维必备)
环境搭建完成后,日常运维主要围绕磁盘组管理和状态监控,以下是高频操作示例:
3.1 磁盘组扩容(最常用)
当磁盘组空间不足时,只需添加新磁盘即可扩容(无需停机):
# 1. 先标记新磁盘(root用户)
oracleasm createdisk ASM_DATA_02 /dev/sdd1
# 2. 登录ASM实例,添加磁盘到DATA磁盘组
sqlplus / as sysasm
# 3. 查看可用磁盘(确认新磁盘已识别)
select name, path, status from v$asm_disk where group_number=0;
# GROUP_NUMBER=0表示未加入任何磁盘组
# 4. 扩容DATA磁盘组(添加新磁盘)
alter diskgroup DATA add disk '/dev/oracleasm/disks/ASM_DATA_02';
# 5. 查看扩容后的磁盘组空间
select name, total_mb, free_mb from v$asm_diskgroup where name='DATA';
# 此时total_mb会增加新磁盘的容量
3.2 磁盘组缩容(移除无用磁盘)
如果某块磁盘故障或不再需要,可先将数据迁移出去,再移除磁盘:
# 1. 登录ASM实例
sqlplus / as sysasm
# 2. 迁移故障磁盘的数据到其他磁盘(重要:避免数据丢失)
alter diskgroup DATA rebalance power 10; # power表示并行度,1-11,越大越快
alter diskgroup DATA drop disk 'ASM_DATA_02' rebalance power 10;
# 3. 验证磁盘是否已移除
select name, path from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name='DATA');
# 不再显示ASM_DATA_02
# 4. (可选)删除磁盘标记(root用户)
oracleasm deletedisk ASM_DATA_02
3.3 ASM状态监控(日常巡检)
定期监控ASM状态,及时发现磁盘故障或空间不足问题,核心查询语句:
3.3.1 监控磁盘组状态
# 登录ASM实例
sqlplus / as sysasm
# 查看所有磁盘组的基本信息(名称、状态、空间)
select name 磁盘组名,
state 状态,
total_mb 总容量MB,
free_mb 空闲容量MB,
round((free_mb/total_mb)*100,2) 空闲率%
from v$asm_diskgroup;
# 关键状态说明:
# MOUNTED:正常挂载;
# DISMOUNTED:未挂载;
# RESTRICTED:受限模式(部分磁盘故障)。
3.3.2 监控磁盘状态
# 查看所有磁盘的详细信息(归属、状态、路径)
select g.name 磁盘组名,
d.name 磁盘名,
d.path 磁盘路径,
d.status 磁盘状态,
d.total_mb 磁盘容量MB,
d.free_mb 磁盘空闲MB
from v$asm_diskgroup g, v$asm_disk d
where g.group_number=d.group_number(+);
# 关键状态说明:
# ONLINE:正常;
# OFFLINE:离线(可能故障);
# UNKNOWN:未知(无法识别)。
3.3.3 监控ASM实例性能
# 查看ASM实例的IO统计(判断负载是否均衡)
select disk_group_name 磁盘组名,
read_bytes 读取字节,
write_bytes 写入字节,
read_time 读取时间,
write_time 写入时间
from v$asm_disk_io_stats;
# 理想状态:各磁盘的read_bytes、write_bytes差异不大(负载均衡)
3.4 常用工具:ASMCMD(ASM命令行工具)
ASMCMD是Oracle提供的ASM专用命令行工具,类似Linux的ls、cd命令,方便管理ASM文件:
# 启动ASMCMD(oracle用户,已设置ORACLE_SID=+ASM)
asmcmd
# 常用命令示例:
lsdg # 查看磁盘组信息(同v$asm_diskgroup)
ls +DATA # 查看DATA磁盘组下的文件
cd +DATA/ORCL/DATAFILE # 进入数据文件目录
du # 查看当前目录占用空间
cp +DATA/ORCL/SPFILEORCL.ORA /tmp # 复制ASM文件到本地
exit # 退出ASMCMD
四、ASM入门的核心要点
ASM看似复杂,但抓住核心逻辑后其实很简单:
-
核心逻辑:把物理磁盘整合为逻辑磁盘组,由ASM实例自动管理,数据库只需要“认磁盘组”,不用管具体磁盘;
-
部署步骤:准备磁盘→创建ASM实例→创建磁盘组→数据库对接,一步都不能少;
-
日常运维:重点监控磁盘组状态和空间,扩容简单(加磁盘),缩容要先迁数据(避坑关键);
-
适用场景:数据量较大、需要高可用、计划部署RAC的环境,优先用ASM;小测试环境用文件系统也可。
作为Oracle数据库的“存储管家”,ASM是生产环境运维的必备技能。后续我们还会讲解ASM的进阶内容,比如故障磁盘替换、RAC环境下的ASM管理、性能优化等,关注我,带你逐步搞定Oracle存储全知识点!如果搭建过程中遇到问题,欢迎在评论区留言交流。
原文链接:https://mp.weixin.qq.com/s/SFfqwZNkmaixqE0bPeIGCw
👍 点赞,你的认可是我创作的动力!
⭐️ 收藏,你的青睐是我努力的方向!
✏️ 评论,你的意见是我进步的财富!
PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。点“在看”支持我吧!
&spm=1001.2101.3001.5002&articleId=160147626&d=1&t=3&u=e3168a78cd7b4aed805d005100a3c119)
315

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



