Skip to content

Oracle ASM 存储安装

安装前准备

系统要求

硬件要求

  • 服务器:与 Oracle 数据库相同的硬件要求
  • 存储
    • 至少 2 个磁盘用于创建 ASM 磁盘组
    • 每个磁盘至少 1 GB
    • 推荐使用 SAN 或 NAS 存储

软件要求

  • 操作系统:对应 Oracle 版本支持的操作系统版本
  • Oracle Grid Infrastructure:必须安装 Grid Infrastructure
  • 必需软件包:与 Oracle 数据库相同的软件包要求

存储准备

磁盘准备

  1. 创建磁盘

    • 在存储阵列上创建 LUN
    • 或在本地创建分区
  2. 配置多路径(如果使用 SAN):

    • 安装 multipath 软件
    • 配置 multipath.conf 文件
    • 重启 multipath 服务
  3. 配置 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/admin

ASM 安装

安装 Grid Infrastructure

下载安装介质

  • 从 Oracle 官网下载

解压安装包

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

安装步骤

  1. 配置安全更新

    • 取消勾选"我希望通过 My Oracle Support 接收安全更新"
    • 点击"下一步"
  2. 选择安装选项

    • 选择"配置 Oracle Grid Infrastructure for a Standalone Server"(单实例)或"配置 Oracle Grid Infrastructure for a New Cluster"(RAC)
    • 点击"下一步"
  3. 系统类

    • 选择"服务器类"
    • 点击"下一步"
  4. 存储选项

    • 选择"使用 Oracle 自动存储管理 (ASM)"
    • 点击"下一步"
  5. ASM 磁盘组

    • 创建 ASM 磁盘组
    • 选择冗余级别
    • 选择 ASM 磁盘
    • 设置 ASM 密码
    • 点击"下一步"
  6. 数据库管理选项

    • 选择是否使用 EM Cloud Control
    • 点击"下一步"
  7. 操作系统组

    • 验证操作系统组配置
    • 点击"下一步"
  8. 安装位置

    • 验证 Oracle 基目录和 Grid 主目录
    • 点击"下一步"
  9. 先决条件检查

    • 系统会自动检查先决条件
    • 解决所有警告和错误
    • 点击"下一步"
  10. 概要

    • 检查安装配置信息
    • 点击"安装"
  11. 执行配置脚本

    • 安装过程中会提示执行配置脚本
    • 以 root 用户执行脚本:
      bash
      /u01/app/oraInventory/orainstRoot.sh
      /u01/app/19.0.0/grid/root.sh
  12. 完成

    • 安装完成后,点击"关闭"

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

  1. 启动 DBCA

    bash
    su - oracle
    dbca
  2. 存储选项

    • 选择"使用 Oracle 自动存储管理 (ASM)"
    • 选择 ASM 磁盘组
  3. 完成数据库创建

    • 按照向导完成数据库创建

将现有数据库迁移到 ASM

  1. 使用 RMAN

    bash
    rman target /
    RMAN> BACKUP AS COPY DATABASE FORMAT '+DATA_DISKGRP';
    RMAN> SWITCH DATABASE TO COPY;
    RMAN> RECOVER DATABASE;
  2. 使用 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

    bash
    asmcmd
    ASMCMD> lsdg
    ASMCMD> exit;
  • 使用 SQL 查询

    sql
    SELECT 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 磁盘组的方法:

  1. 准备磁盘

    • 确保磁盘已正确配置
    • 验证磁盘可被 ASM 识别
  2. 添加磁盘

    bash
    sqlplus / as sysasm
    SQL> ALTER DISKGROUP DATA_DISKGRP ADD DISK '/dev/oracleasm/disks/DISK3';
    SQL> EXIT;
  3. 验证添加结果

    bash
    asmcmd
    ASMCMD> lsdg
    ASMCMD> ls -l
    ASMCMD> exit;

Q4: 如何修复损坏的 ASM 磁盘组?

A4: 修复损坏的 ASM 磁盘组的方法:

  1. 检查磁盘组状态

    sql
    SELECT name, state FROM v$asm_diskgroup;
  2. 尝试挂载磁盘组

    sql
    ALTER DISKGROUP DATA_DISKGRP MOUNT;
  3. 如果挂载失败

    • 检查磁盘状态
    • 尝试使用 FORCE 选项挂载
    • 如果需要,从备份恢复
  4. 修复磁盘组

    sql
    ALTER DISKGROUP DATA_DISKGRP CHECK ALL REPAIR;

Q5: 如何优化 ASM 性能?

A5: 优化 ASM 性能的方法:

  • 磁盘组设计

    • 为不同类型的数据创建不同的磁盘组
    • 使用适当的冗余级别
  • 磁盘选择

    • 使用相同大小和性能的磁盘
    • 避免混合使用不同类型的磁盘
  • 参数调整

    • asm_power_limit:调整平衡操作的并行度
    • asm_preferred_read_failure_groups:设置首选读取故障组
  • I/O 优化

    • 确保存储子系统性能足够
    • 使用多路径提高 I/O 性能
    • 避免过度平衡操作