Skip to content

Oracle ASMCMD命令使用指南

文档目的

本文档详细介绍 Oracle ASMCMD 命令的使用方法、常用命令、高级功能和最佳实践,帮助数据库管理员有效地管理和维护 ASM 存储系统,确保 ASM 存储的可靠性、性能和可用性。

ASMCMD 命令行工具

什么是 ASMCMD

  • 定义:ASMCMD 是 Oracle 提供的命令行工具,用于管理和维护 ASM(Automatic Storage Management)存储系统
  • 功能
    • 管理 ASM 磁盘组、文件和目录
    • 执行 ASM 存储的日常维护任务
    • 监控 ASM 存储状态和性能
    • 执行 ASM 存储的故障处理

启动 ASMCMD

  • 基本启动

    bash
    # 使用 ASM 实例登录
    asmcmd
    
    # 指定 ASM 实例
    asmcmd --connect +ASM1
    
    # 使用用户名和密码登录
    asmcmd --connect sys/password@+ASM1 as sysasm
  • 启动选项

    • --connect:指定连接字符串
    • --privilege:指定权限级别
    • --no-prompt:非交互式模式
    • --translatable:可翻译输出模式

常用 ASMCMD 命令

磁盘组管理

  • 列出磁盘组

    bash
    lsdg
  • 创建磁盘组

    bash
    create diskgroup DATA external redundancy disk '/dev/sdb1', '/dev/sdc1'
  • 挂载/卸载磁盘组

    bash
    mount DATA
    umount DATA
  • 删除磁盘组

    bash
    drop diskgroup DATA including contents

文件管理

  • 列出文件

    bash
    ls -l +DATA/ORCL/DATAFILE/
  • 复制文件

    bash
    cp +DATA/ORCL/DATAFILE/SYSTEM.256.1234567890 +FRA/ORCL/BACKUP/
  • 移动文件

    bash
    mv +DATA/ORCL/DATAFILE/USERS.257.1234567890 +DATA/ORCL/DATAFILE/USERS01.DBF
  • 删除文件

    bash
    rm +DATA/ORCL/DATAFILE/OLD_TABLESPACE.258.1234567890

目录管理

  • 创建目录

    bash
    mkdir +DATA/ORCL/ARCHIVELOG/2024_01
  • 更改目录

    bash
    cd +DATA/ORCL/DATAFILE
  • 删除目录

    bash
    rmdir +DATA/ORCL/OLD_DIR

磁盘管理

  • 列出磁盘

    bash
    lsdsk -g DATA
  • 添加磁盘

    bash
    add disk '/dev/sdd1' to diskgroup DATA
  • 删除磁盘

    bash
    drop disk DATA_0003 from diskgroup DATA
  • 平衡磁盘组

    bash
    rebalance diskgroup DATA power 5

信息查询

  • 查询磁盘组信息

    bash
    lsdg -g DATA
  • 查询文件信息

    bash
    ls -l +DATA/ORCL/CONTROLFILE/
  • 查询磁盘信息

    bash
    lsdsk -d DATA_0001
  • 查询 ASM 实例信息

    bash
    show

sys


## ASMCMD 高级功能

### 模板管理
- **列出模板**:
```bash
lstmpl -g DATA
  • 创建模板

    bash
    mkattr -g DATA -t datafile -a 'AU_SIZE'='1M' 'COARSEGRAIN'='true' MY_TEMPLATE
  • 修改模板

    bash
    mkattr -g DATA -t datafile -a 'REDUNDANCY'='MIRROR' MY_TEMPLATE
  • 删除模板

    bash
    rmtmpl -g DATA MY_TEMPLATE

属性管理

  • 设置磁盘组属性

    bash
    setattr -g DATA compatible.asm 19.0.0.0.0
  • 查看磁盘组属性

    bash
    getattr -g DATA compatible.asm
  • 设置文件属性

    bash
    setattr -f +DATA/ORCL/DATAFILE/USERS.257.1234567890 asm.attr 'value'

备份和恢复

  • 备份 ASM 配置

    bash
    spbackup --asm_diskstring '/dev/sd*' --backup_dir '/backup/asm'
  • 恢复 ASM 配置

    bash

sprecover --backup_dir '/backup/asm' --asm_diskstring '/dev/sd*'


### 安全管理
- **设置权限**:
```bash
chmod 755 +DATA/ORCL/DATAFILE/
  • 更改所有者
    bash
    chown oracle:asmadmin +DATA/ORCL/DATAFILE/USERS.257.1234567890

ASMCMD 脚本和自动化

执行脚本

  • 执行 ASMCMD 脚本

    bash
    asmcmd @/path/to/script.txt
  • 脚本示例

    bash
    # 备份控制文件到 FRA
    cp +DATA/ORCL/CONTROLFILE/* +FRA/ORCL/CONTROLFILE/
    
    # 列出所有磁盘组状态
    lsdg
    
    # 检查磁盘组空间使用情况
    ls -l +DATA/

命令行模式

  • 执行单个命令

    bash
    asmcmd lsdg
  • 执行多个命令

    bash
    asmcmd "lsdg; ls -l +DATA/"

与其他工具集成

  • 与 RMAN 集成

    • ASMCMD 可用于管理 RMAN 备份文件
    • 支持备份集的复制和管理
  • 与 SQL*Plus 集成

    • 可通过 SQL*Plus 执行 ASMCMD 相关操作
    • 结合 PL/SQL 进行自动化管理

ASMCMD 最佳实践

日常维护

  • 定期检查磁盘组状态

    bash
    asmcmd lsdg
  • 监控磁盘空间使用

    bash
    asmcmd ls -l +DATA/
  • 检查磁盘健康状态

    bash
    asmcmd lsdsk -g DATA

性能优化

  • 合理设置平衡功率

    bash
    asmcmd rebalance diskgroup DATA power 3
  • 使用适当的 AU 大小

    • 大文件:4M 或 8M
    • 小文件:1M
  • 配置适当的冗余级别

    • 生产环境:NORMAL 或 HIGH 冗余
    • 测试环境:EXTERNAL 冗余

安全管理

  • 限制 ASMCMD 访问

    • 只允许 ASM 管理员和数据库管理员使用
    • 设置适当的文件权限
  • 定期备份 ASM 配置

    • 使用 spbackup 工具备份配置
    • 存储备份到安全位置

故障处理

  • 快速识别问题

    bash
    asmcmd lsdg
    asmcmd lsdsk -g DATA
  • 及时响应告警

    • 磁盘组空间不足
    • 磁盘故障
    • 平衡操作失败

ASMCMD 故障排除

常见问题

  • ASMCMD 无法启动

    • 检查 ASM 实例状态
    • 检查环境变量设置
    • 验证 ASM 权限
  • 命令执行失败

    • 检查磁盘组状态
    • 验证文件路径
    • 检查权限设置
  • 磁盘组挂载失败

    • 检查磁盘状态
    • 验证磁盘组兼容性
    • 检查 ASM 实例参数

错误诊断

  • 查看 ASM 告警日志

    • 位置:$ORACLE_BASE/diag/asm/+asm/+ASM1/trace/alert_+ASM1.log
  • 使用 ASMCMD 诊断命令

    bash
    asmcmd ls -l +DATA/
    asmcmd lsdsk -g DATA
    asmcmd show

sys


- **检查 ASM 视图**:
```sql
SELECT * FROM v$asm_diskgroup;
SELECT * FROM v$asm_disk;
SELECT * FROM v$asm_operation;

解决方案

  • 磁盘故障

    • 识别故障磁盘:asmcmd lsdsk -g DATA
    • 删除故障磁盘:asmcmd drop disk DATA_0003
    • 添加新磁盘:asmcmd add disk '/dev/sdd1'
    • 重新平衡:asmcmd rebalance diskgroup DATA
  • 空间不足

    • 检查空间使用:asmcmd lsdg
    • 添加磁盘:asmcmd add disk '/dev/sdd1'
    • 清理无用文件:asmcmd rm +DATA/ORCL/OLD_FILE
  • 平衡操作卡住

    • 检查平衡状态:asmcmd show sys
    • 调整平衡功率:asmcmd rebalance diskgroup DATA power 1
    • 必要时重启 ASM 实例

常见问题(FAQ)

Q1: ASMCMD 与 SQL*Plus 中的 ASM 管理命令有什么区别?

A1: ASMCMD 与 SQL*Plus 中的 ASM 管理命令的区别:

  • ASMCMD
    • 命令行工具,专门用于 ASM 管理
    • 语法简单,操作直观
    • 支持文件系统类操作(ls, cp, mv 等)
    • 适合日常维护任务
  • SQL*Plus
    • 通过 ASM 实例执行 SQL 命令
    • 支持更复杂的查询和管理操作
    • 可以使用 PL/SQL 进行自动化
    • 适合高级管理和监控任务

Q2: 如何在不同版本的 Oracle 中使用 ASMCMD?

A2: 在不同版本的 Oracle 中使用 ASMCMD 的方法:

  • Oracle 11g
    • 基本命令集可用
    • 部分高级功能可能受限
  • Oracle 12c
    • 增强了模板管理功能
    • 支持更多属性设置
  • Oracle 18c/19c
    • 增加了更多管理命令
    • 改进了性能和可靠性
  • Oracle 21c
    • 支持更多云集成功能
    • 增强了安全管理能力

Q3: 如何自动化 ASM 管理任务?

A3: 自动化 ASM 管理任务的方法:

  • 使用 ASMCMD 脚本
    • 创建包含多个命令的脚本文件
    • 使用 asmcmd @script.txt 执行
  • 使用 shell 脚本
    • 结合 bash/sh 脚本执行 ASMCMD 命令
    • 示例:asmcmd "lsdg; ls -l +DATA/"
  • 使用 cron 调度
    • 定期执行维护脚本
    • 例如:每日检查磁盘空间,每周备份配置
  • 使用企业级调度工具
    • Control-M、Tivoli Workload Scheduler 等
    • 提供更复杂的调度和监控能力

Q4: 如何监控 ASM 存储的性能?

A4: 监控 ASM 存储性能的方法:

  • 使用 ASMCMD 命令
    • asmcmd lsdg:检查磁盘组状态
    • asmcmd ls -l:检查文件大小和分布
  • 使用 ASM 视图
    • v$asm_operation:监控平衡操作
    • v$asm_disk_iostat:监控磁盘 I/O 统计
    • v$asm_diskgroup_stat:监控磁盘组统计信息
  • 使用 Enterprise Manager
    • ASM 存储监控页面
    • 性能图表和告警
  • 使用第三方监控工具
    • Nagios、Zabbix 等
    • 配置自定义监控脚本

Q5: 如何处理 ASM 磁盘组兼容性问题?

A5: 处理 ASM 磁盘组兼容性问题的方法:

  • 检查当前兼容性
    bash
    asmcmd getattr -g DATA compatible.asm
    asmcmd getattr -g DATA compatible.rdbms
  • 设置兼容性
    bash
    asmcmd setattr -g DATA compatible.asm 19.0.0.0.0
    asmcmd setattr -g DATA compatible.rdbms 19.0.0.0.0
  • 兼容性注意事项
    • 兼容性只能升级,不能降级
    • 升级前确保所有数据库实例都支持新的兼容性级别
    • 升级后新功能将可用,但旧版本可能无法访问

Q6: 如何安全地扩展 ASM 磁盘组?

A6: 安全扩展 ASM 磁盘组的步骤:

  1. 准备新磁盘
    • 确保磁盘已正确分区和格式化
    • 验证磁盘可被 ASM 发现
  2. 添加磁盘
    bash
    asmcmd add disk '/dev/sdd1' to diskgroup DATA
  3. 监控平衡操作
    bash
    asmcmd show

sys

4. **验证扩展结果**:
```bash
asmcmd lsdg -g DATA
asmcmd lsdsk -g DATA
  1. 最佳实践
    • 在维护窗口进行扩展
    • 合理设置平衡功率
    • 监控系统性能

Q7: 如何备份和恢复 ASM 配置?

A7: 备份和恢复 ASM 配置的方法:

  • 使用 spbackup 工具
    bash
    asmcmd spbackup --asm_diskstring '/dev/sd*' --backup_dir '/backup/asm'
  • 备份 ASM 初始化参数文件
    • $ORACLE_HOME/dbs/init+ASM.ora
    • $ORACLE_HOME/dbs/spfile+ASM.ora
  • 恢复 ASM 配置
    bash
    asmcmd sprecover --backup_dir '/backup/asm' --asm_diskstring '/dev/sd*'
  • 手动恢复
    • 重建 ASM 实例
    • 使用 CREATE DISKGROUP 命令重建磁盘组
    • 从备份恢复数据文件

Q8: 如何优化 ASM 存储性能?

A8: 优化 ASM 存储性能的方法:

  • 合理规划磁盘组
    • 分离不同类型的文件到不同磁盘组
    • 例如:数据文件、日志文件、备份文件分开存储
  • 调整 AU 大小
    • 大文件(数据文件):4M 或 8M
    • 小文件(日志文件):1M
  • 配置适当的冗余
    • 根据业务需求选择冗余级别
    • 结合存储硬件的冗余能力
  • 优化平衡操作
    • 合理设置平衡功率
    • 在系统负载低时进行
  • 监控和调整
    • 定期监控性能指标
    • 根据实际情况调整配置
    • 及时处理性能瓶颈