外观
Oracle ASM 存储安装
安装前准备
系统要求
硬件要求
- 服务器:与 Oracle 数据库相同的硬件要求
- 存储:
- 至少 2 个磁盘用于创建 ASM 磁盘组
- 每个磁盘至少 1 GB
- 推荐使用 SAN 或 NAS 存储
软件要求
- 操作系统:对应 Oracle 版本支持的操作系统版本
- Oracle Grid Infrastructure:必须安装 Grid Infrastructure
- 必需软件包:与 Oracle 数据库相同的软件包要求
存储准备
磁盘准备
创建磁盘:
- 在存储阵列上创建 LUN
- 或在本地创建分区
配置多路径(如果使用 SAN):
- 安装 multipath 软件
- 配置 multipath.conf 文件
- 重启 multipath 服务
配置 ASM 磁盘:
方法 1:使用 ASMLib:
- 安装 ASMLib 驱动
- 配置 ASMLib
- 标记磁盘为 ASM 磁盘
方法 2:使用 udev 规则:
- 创建 udev 规则文件
- 重启 udev 服务
- 验证 udev 规则
方法 3:使用原始设备:
- 直接使用原始设备路径
用户和组
必需的组
- asmadmin:ASM 管理员组
- asmdba:ASM 数据库管理员组
- asmoper:ASM 操作员组
必需的用户
- grid:Grid Infrastructure 软件所有者,必须属于 asmadmin, asmdba, asmoper 组
- oracle:数据库软件所有者,必须属于 asmdba 组
环境变量
Grid 用户环境变量
编辑 grid 用户的 .bash_profile 文件:
bash
# Grid 环境变量
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.0.0/grid
export ORACLE_SID=+ASM
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$CLASSPATH
export TNS_ADMIN=$ORACLE_HOME/network/adminASM 安装
安装 Grid Infrastructure
下载安装介质
- 从 Oracle 官网下载:
- 访问 Oracle 技术网
- 下载 Grid Infrastructure 安装包
解压安装包
bash
# 创建安装目录
mkdir -p /u01/app/19.0.0/grid
chown -R grid:oinstall /u01/app
chmod -R 775 /u01/app
# 切换到 grid 用户
su - grid
# 解压安装包
unzip LINUX.X64_193000_grid_home.zip -d /u01/app/19.0.0/grid启动安装向导
bash
# 启动 Grid 安装向导
cd /u01/app/19.0.0/grid
./gridSetup.sh安装步骤
配置安全更新:
- 取消勾选"我希望通过 My Oracle Support 接收安全更新"
- 点击"下一步"
选择安装选项:
- 选择"配置 Oracle Grid Infrastructure for a Standalone Server"(单实例)或"配置 Oracle Grid Infrastructure for a New Cluster"(RAC)
- 点击"下一步"
系统类:
- 选择"服务器类"
- 点击"下一步"
存储选项:
- 选择"使用 Oracle 自动存储管理 (ASM)"
- 点击"下一步"
ASM 磁盘组:
- 创建 ASM 磁盘组
- 选择冗余级别
- 选择 ASM 磁盘
- 设置 ASM 密码
- 点击"下一步"
数据库管理选项:
- 选择是否使用 EM Cloud Control
- 点击"下一步"
操作系统组:
- 验证操作系统组配置
- 点击"下一步"
安装位置:
- 验证 Oracle 基目录和 Grid 主目录
- 点击"下一步"
先决条件检查:
- 系统会自动检查先决条件
- 解决所有警告和错误
- 点击"下一步"
概要:
- 检查安装配置信息
- 点击"安装"
执行配置脚本:
- 安装过程中会提示执行配置脚本
- 以 root 用户执行脚本:bash
/u01/app/oraInventory/orainstRoot.sh /u01/app/19.0.0/grid/root.sh
完成:
- 安装完成后,点击"关闭"
ASM 配置
ASM 实例管理
启动和停止 ASM 实例
bash
# 启动 ASM 实例
su - grid
asmcmd start
# 或使用 sqlplus
sqlplus / as sysasm
SQL> STARTUP;
SQL> EXIT;
# 停止 ASM 实例
su - grid
asmcmd shutdown
# 或使用 sqlplus
sqlplus / as sysasm
SQL> SHUTDOWN IMMEDIATE;
SQL> EXIT;检查 ASM 实例状态
bash
# 检查 ASM 实例状态
su - grid
sqlplus / as sysasm
SQL> SELECT instance_name, status FROM v$instance;
SQL> EXIT;
# 检查 ASM 磁盘组状态
asmcmd
ASMCMD> lsdg
ASMCMD> exit;ASM 磁盘组管理
创建 ASM 磁盘组
bash
# 使用 asmcmd 创建磁盘组
su - grid
asmcmd
ASMCMD> creategroup -t data - redundancy external DATA_DISKGRP DISK '/dev/oracleasm/disks/DISK*'
ASMCMD> exit;
# 或使用 sqlplus 创建磁盘组
sqlplus / as sysasm
SQL> CREATE DISKGROUP DATA_DISKGRP EXTERNAL REDUNDANCY DISK '/dev/oracleasm/disks/DISK1', '/dev/oracleasm/disks/DISK2';
SQL> EXIT;扩展 ASM 磁盘组
bash
# 使用 asmcmd 扩展磁盘组
su - grid
asmcmd
ASMCMD> adddisk DATA_DISKGRP DISK '/dev/oracleasm/disks/DISK3'
ASMCMD> exit;
# 或使用 sqlplus 扩展磁盘组
sqlplus / as sysasm
SQL> ALTER DISKGROUP DATA_DISKGRP ADD DISK '/dev/oracleasm/disks/DISK3';
SQL> EXIT;收缩 ASM 磁盘组
bash
# 使用 asmcmd 收缩磁盘组
su - grid
asmcmd
ASMCMD> dropdisk DATA_DISKGRP DISK '/dev/oracleasm/disks/DISK3'
ASMCMD> exit;
# 或使用 sqlplus 收缩磁盘组
sqlplus / as sysasm
SQL> ALTER DISKGROUP DATA_DISKGRP DROP DISK DISK3;
SQL> EXIT;平衡 ASM 磁盘组
bash
# 手动平衡磁盘组
sqlplus / as sysasm
SQL> ALTER DISKGROUP DATA_DISKGRP REBALANCE POWER 11;
SQL> EXIT;
# 检查平衡状态
asmcmd
ASMCMD> ls -l
ASMCMD> exit;ASM 文件管理
创建 ASM 文件
bash
# 创建 ASM 目录
asmcmd
ASMCMD> mkdir +DATA_DISKGRP/orcl
ASMCMD> exit;
# 检查 ASM 文件
asmcmd
ASMCMD> ls -l +DATA_DISKGRP/orcl
ASMCMD> exit;管理 ASM 文件
bash
# 复制 ASM 文件
asmcmd
ASMCMD> cp +DATA_DISKGRP/orcl/file1 +DATA_DISKGRP/orcl/file2
ASMCMD> exit;
# 删除 ASM 文件
asmcmd
ASMCMD> rm +DATA_DISKGRP/orcl/file2
ASMCMD> exit;ASM 与数据库集成
使用 ASM 存储数据库文件
创建数据库时使用 ASM
启动 DBCA:
bashsu - oracle dbca存储选项:
- 选择"使用 Oracle 自动存储管理 (ASM)"
- 选择 ASM 磁盘组
完成数据库创建:
- 按照向导完成数据库创建
将现有数据库迁移到 ASM
使用 RMAN:
bashrman target / RMAN> BACKUP AS COPY DATABASE FORMAT '+DATA_DISKGRP'; RMAN> SWITCH DATABASE TO COPY; RMAN> RECOVER DATABASE;使用 DBMS_FILE_TRANSFER:
- 创建存储过程
- 执行文件传输
ASM 监控
监控视图
- V$ASM_INSTANCE:ASM 实例信息
- V$ASM_DISKGROUP:ASM 磁盘组信息
- V$ASM_DISK:ASM 磁盘信息
- V$ASM_FILE:ASM 文件信息
- V$ASM_OPERATION:ASM 操作信息
监控脚本
sql
-- 检查 ASM 磁盘组状态
SELECT name, state, total_mb, free_mb, usable_file_mb FROM v$asm_diskgroup;
-- 检查 ASM 磁盘状态
SELECT dg.name, d.disk_number, d.name, d.state, d.total_mb, d.free_mb FROM v$asm_disk d, v$asm_diskgroup dg WHERE d.group_number = dg.group_number;
-- 检查 ASM 操作
SELECT * FROM v$asm_operation;常见问题及解决方案
ASM 实例无法启动
问题:ASM 实例启动失败
原因:
- 磁盘访问权限问题
- 磁盘组损坏
- 配置文件错误
解决方案:
- 检查磁盘权限
- 检查 ASM 日志文件
- 使用
asmcmd修复磁盘组
磁盘组无法挂载
问题:ASM 磁盘组挂载失败
原因:
- 磁盘损坏
- 磁盘组元数据损坏
- 磁盘访问问题
解决方案:
- 检查磁盘状态
- 使用
asmcmd mount命令 - 如果需要,使用
asmcmd repair命令
磁盘组空间不足
问题:ASM 磁盘组空间不足
原因:
- 数据增长过快
- 未及时清理过期数据
- 磁盘组配置过小
解决方案:
- 添加新磁盘到磁盘组
- 清理过期数据
- 考虑使用压缩功能
性能问题
问题:ASM 性能下降
原因:
- 磁盘 I/O 瓶颈
- 磁盘组不平衡
- ASM 实例资源不足
解决方案:
- 检查磁盘 I/O 性能
- 手动平衡磁盘组
- 调整 ASM 实例参数
最佳实践
存储规划
磁盘组设计:
- 为不同类型的数据创建不同的磁盘组
- 例如:数据文件、重做日志、归档日志
磁盘选择:
- 使用相同大小和性能的磁盘
- 避免混合使用不同类型的磁盘
冗余选择:
- 根据数据重要性选择合适的冗余级别
- 考虑存储成本和性能需求
配置优化
ASM 实例参数:
asm_power_limit:控制平衡操作的并行度asm_preferred_read_failure_groups:设置首选读取故障组
磁盘组属性:
compatible.asm:ASM 兼容性compatible.rdbms:数据库兼容性
维护管理
定期检查:
- 检查磁盘组空间使用情况
- 检查磁盘状态和健康状况
- 检查 ASM 实例状态
备份策略:
- 备份 ASM 磁盘组元数据
- 定期备份数据库到 ASM 磁盘组
性能监控:
- 监控 ASM I/O 性能
- 监控磁盘组平衡状态
- 监控 ASM 操作执行情况
故障恢复
磁盘故障:
- 及时替换故障磁盘
- 确保磁盘组有足够的冗余
磁盘组损坏:
- 使用 ASM 内置工具修复
- 从备份恢复
ASM 实例故障:
- 重启 ASM 实例
- 检查日志文件,定位故障原因
常见问题(FAQ)
Q1: 如何选择 ASM 磁盘组的冗余级别?
A1: 选择 ASM 磁盘组冗余级别的方法:
外部冗余:
- 适用场景:使用高端存储阵列,已有 RAID 保护
- 优势:最高的磁盘空间利用率
- 劣势:依赖存储阵列的可靠性
正常冗余:
- 适用场景:一般企业存储,需要中等可靠性
- 优势:提供双重镜像,可靠性较高
- 劣势:磁盘空间利用率约 50%
高冗余:
- 适用场景:关键业务系统,需要最高可靠性
- 优势:提供三重镜像,可靠性最高
- 劣势:磁盘空间利用率约 33%
Q2: 如何监控 ASM 磁盘组的空间使用情况?
A2: 监控 ASM 磁盘组空间使用情况的方法:
使用 asmcmd:
bashasmcmd ASMCMD> lsdg ASMCMD> exit;使用 SQL 查询:
sqlSELECT name, total_mb, free_mb, usable_file_mb, (total_mb - free_mb) / total_mb * 100 AS used_percent FROM v$asm_diskgroup;使用 Enterprise Manager:
- 登录 EM Cloud Control
- 导航到 ASM 实例
- 查看磁盘组空间使用情况
Q3: 如何将新磁盘添加到 ASM 磁盘组?
A3: 将新磁盘添加到 ASM 磁盘组的方法:
准备磁盘:
- 确保磁盘已正确配置
- 验证磁盘可被 ASM 识别
添加磁盘:
bashsqlplus / as sysasm SQL> ALTER DISKGROUP DATA_DISKGRP ADD DISK '/dev/oracleasm/disks/DISK3'; SQL> EXIT;验证添加结果:
bashasmcmd ASMCMD> lsdg ASMCMD> ls -l ASMCMD> exit;
Q4: 如何修复损坏的 ASM 磁盘组?
A4: 修复损坏的 ASM 磁盘组的方法:
检查磁盘组状态:
sqlSELECT name, state FROM v$asm_diskgroup;尝试挂载磁盘组:
sqlALTER DISKGROUP DATA_DISKGRP MOUNT;如果挂载失败:
- 检查磁盘状态
- 尝试使用
FORCE选项挂载 - 如果需要,从备份恢复
修复磁盘组:
sqlALTER DISKGROUP DATA_DISKGRP CHECK ALL REPAIR;
Q5: 如何优化 ASM 性能?
A5: 优化 ASM 性能的方法:
磁盘组设计:
- 为不同类型的数据创建不同的磁盘组
- 使用适当的冗余级别
磁盘选择:
- 使用相同大小和性能的磁盘
- 避免混合使用不同类型的磁盘
参数调整:
asm_power_limit:调整平衡操作的并行度asm_preferred_read_failure_groups:设置首选读取故障组
I/O 优化:
- 确保存储子系统性能足够
- 使用多路径提高 I/O 性能
- 避免过度平衡操作
