Skip to content

Oracle ASM管理命令

ASM实例管理

ASM实例启动和关闭

命令类型示例命令说明
启动ASM实例sqlplus / as sysasm
SQL> STARTUP;
以SYSASM身份连接并启动ASM实例
启动ASM实例(带参数)SQL> STARTUP NOMOUNT;
SQL> STARTUP MOUNT;
SQL> STARTUP FORCE;
以不同模式启动ASM实例
关闭ASM实例SQL> SHUTDOWN;正常关闭ASM实例
立即关闭ASM实例SQL> SHUTDOWN IMMEDIATE;立即关闭ASM实例
中止ASM实例SQL> SHUTDOWN ABORT;中止ASM实例(仅在紧急情况下使用)
查看ASM实例状态SQL> SELECT instance_name, status FROM v$instance;查看ASM实例状态

ASM实例配置

命令类型示例命令说明
查看ASM实例参数SQL> SHOW PARAMETERS;查看ASM实例的所有参数
查看ASM实例版本SQL> SELECT * FROM v$version;查看ASM实例版本信息
查看ASM实例属性SQL> SELECT * FROM v$asm_attribute;查看ASM实例的属性
修改ASM实例参数SQL> ALTER SYSTEM SET asm_power_limit = 4 SCOPE=BOTH;修改ASM实例参数
查看ASM实例资源限制SQL> SELECT * FROM v$resource_limit;查看ASM实例的资源限制

ASMCMD命令

ASMCMD基本命令

命令类型示例命令说明
启动ASMCMDasmcmd启动ASMCMD命令行工具
连接到指定ASM实例asmcmd --connect sys/password@+ASM连接到指定的ASM实例
查看ASMCMD帮助asmcmd help查看ASMCMD帮助信息
查看特定命令帮助asmcmd help ls查看ls命令的帮助信息
退出ASMCMDasmcmd exitasmcmd quit退出ASMCMD工具

ASMCMD文件系统命令

命令类型示例命令说明
列出目录内容asmcmd ls列出当前目录内容
列出指定目录asmcmd ls +DATA/ORCL列出指定目录内容
递归列出目录asmcmd ls -r +DATA递归列出目录内容
查看目录结构asmcmd find +DATA --type dir查找所有目录
创建目录asmcmd mkdir +DATA/ORCL/BACKUP创建目录
删除目录asmcmd rmdir +DATA/ORCL/OLD_DIR删除目录(必须为空)
改变当前目录asmcmd cd +DATA/ORCL改变当前工作目录
显示当前目录asmcmd pwd显示当前工作目录

ASMCMD文件管理命令

命令类型示例命令说明
复制文件asmcmd cp +DATA/ORCL/DATAFILE/USERS.259.1001234567 +FRA/ORCL/BACKUP/USERS.bak复制ASM文件
移动文件asmcmd mv +DATA/ORCL/DATAFILE/USERS.259.1001234567 +DATA/ORCL/DATAFILE/USERS_NEW.259.1001234567移动或重命名ASM文件
删除文件asmcmd rm +DATA/ORCL/DATAFILE/OLD_FILE.260.1001234567删除ASM文件
删除文件(强制)asmcmd rm -f +DATA/ORCL/DATAFILE/CORRUPT_FILE.261.1001234567强制删除ASM文件
查看文件信息asmcmd ls -l +DATA/ORCL/DATAFILE/USERS.259.1001234567查看文件详细信息
查看文件内容asmcmd cat +DATA/ORCL/PARAMETERFILE/spfileorcl.ora查看文本文件内容
查找文件asmcmd find +DATA --name "*.dbf"查找特定名称的文件
查看文件属性asmcmd lsattr +DATA/ORCL/DATAFILE/USERS.259.1001234567查看文件属性

ASMCMD磁盘组管理命令

命令类型示例命令说明
查看磁盘组信息asmcmd lsdg查看所有磁盘组的简要信息
查看磁盘组详细信息asmcmd lsdg -g查看所有磁盘组的详细信息
查看磁盘信息asmcmd lsdsk查看所有ASM磁盘的信息
查看磁盘详细信息asmcmd lsdsk -l查看ASM磁盘的详细信息
检查磁盘组asmcmd checkdg +DATA检查磁盘组的完整性
重新平衡磁盘组asmcmd rebal +DATA POWER 4以功率4重新平衡磁盘组
停止重新平衡asmcmd rebal +DATA STOP停止正在进行的重新平衡操作

ASMCMD模板管理命令

命令类型示例命令说明
查看模板列表asmcmd lstmpl +DATA查看指定磁盘组的模板列表
查看模板详细信息asmcmd lstmpl -l +DATA查看模板的详细信息
创建模板asmcmd mkattr -t DATAFILE +DATA/ORCL my_template创建新的ASM模板
修改模板asmcmd chattr -G 2 -M 2 +DATA/ORCL my_template修改模板属性
删除模板asmcmd rmattr +DATA/ORCL my_template删除ASM模板

ASM磁盘组管理

磁盘组创建和删除

命令类型示例命令说明
创建磁盘组SQL> CREATE DISKGROUP data NORMAL REDUNDANCY
FAILGROUP fg1 DISK
'/dev/oracleasm/disks/DISK1' NAME disk1,
'/dev/oracleasm/disks/DISK2' NAME disk2
FAILGROUP fg2 DISK
'/dev/oracleasm/disks/DISK3' NAME disk3,
'/dev/oracleasm/disks/DISK4' NAME disk4
ATTRIBUTE 'compatible.asm' = '19.0.0.0',
'compatible.rdbms' = '19.0.0.0',
'compatible.advm' = '19.0.0.0';
创建具有正常冗余的磁盘组
创建外部冗余磁盘组SQL> CREATE DISKGROUP fra EXTERNAL REDUNDANCY
DISK
'/dev/oracleasm/disks/DISK5' NAME disk5,
'/dev/oracleasm/disks/DISK6' NAME disk6
ATTRIBUTE 'compatible.asm' = '19.0.0.0',
'compatible.rdbms' = '19.0.0.0';
创建具有外部冗余的磁盘组
删除磁盘组SQL> DROP DISKGROUP data INCLUDING CONTENTS;删除磁盘组及其所有内容
删除磁盘组(强制)SQL> DROP DISKGROUP data FORCE INCLUDING CONTENTS;强制删除磁盘组

磁盘组修改

命令类型示例命令说明
向磁盘组添加磁盘SQL> ALTER DISKGROUP data ADD DISK
'/dev/oracleasm/disks/DISK7' NAME disk7,
'/dev/oracleasm/disks/DISK8' NAME disk8;
向磁盘组添加新磁盘
向磁盘组添加故障组SQL> ALTER DISKGROUP data ADD FAILGROUP fg3 DISK
'/dev/oracleasm/disks/DISK9' NAME disk9,
'/dev/oracleasm/disks/DISK10' NAME disk10;
向磁盘组添加新的故障组和磁盘
从磁盘组删除磁盘SQL> ALTER DISKGROUP data DROP DISK disk7, disk8;从磁盘组删除磁盘
从磁盘组删除故障组SQL> ALTER DISKGROUP data DROP FAILGROUP fg3;从磁盘组删除故障组
重命名磁盘SQL> ALTER DISKGROUP data RENAME DISK disk1 TO disk1_new;重命名ASM磁盘
重新平衡磁盘组SQL> ALTER DISKGROUP data REBALANCE POWER 4;以功率4重新平衡磁盘组
设置磁盘组属性SQL> ALTER DISKGROUP data SET ATTRIBUTE 'au_size' = '4M';设置磁盘组属性
修改磁盘组兼容性SQL> ALTER DISKGROUP data SET ATTRIBUTE 'compatible.asm' = '21.0.0.0';修改磁盘组的ASM兼容性

磁盘组维护

命令类型示例命令说明
挂载磁盘组SQL> ALTER DISKGROUP data MOUNT;挂载磁盘组
卸载磁盘组SQL> ALTER DISKGROUP data DISMOUNT;卸载磁盘组
检查磁盘组SQL> ALTER DISKGROUP data CHECK ALL;检查磁盘组的所有磁盘
修复磁盘组SQL> ALTER DISKGROUP data REPAIR;修复磁盘组中的错误
离线磁盘SQL> ALTER DISKGROUP data OFFLINE DISK disk1;将磁盘设置为离线状态
在线磁盘SQL> ALTER DISKGROUP data ONLINE DISK disk1;将磁盘设置为在线状态
强制离线磁盘SQL> ALTER DISKGROUP data OFFLINE DISK disk1 FORCE;强制将磁盘设置为离线状态
替换磁盘SQL> ALTER DISKGROUP data REPLACE DISK disk1 WITH '/dev/oracleasm/disks/DISK11' NAME disk11;替换故障磁盘

ASM文件管理

ASM文件创建和管理

命令类型示例命令说明
创建ASM目录SQL> ALTER DISKGROUP data ADD DIRECTORY '+DATA/ORCL/BACKUP';在ASM磁盘组中创建目录
删除ASM目录SQL> ALTER DISKGROUP data DROP DIRECTORY '+DATA/ORCL/OLD_DIR';删除ASM目录
创建ASM文件SQL> ALTER DISKGROUP data CREATE FILE '+DATA/ORCL/datafile/users02.dbf' SIZE 100M;在ASM磁盘组中创建文件
删除ASM文件SQL> ALTER DISKGROUP data DROP FILE '+DATA/ORCL/datafile/old_file.dbf';删除ASM文件
重命名ASM文件SQL> ALTER DISKGROUP data RENAME FILE '+DATA/ORCL/datafile/users.dbf' TO '+DATA/ORCL/datafile/users_new.dbf';重命名ASM文件
移动ASM文件SQL> ALTER DATABASE MOVE DATAFILE '+DATA/ORCL/datafile/users.dbf' TO '+FRA/ORCL/datafile/users.dbf';移动数据库数据文件到另一个ASM磁盘组

ASM文件信息查询

命令类型示例命令说明
查看ASM文件SQL> SELECT name, type, bytes/1024/1024 MB FROM v$asm_file;查看所有ASM文件
查看特定磁盘组文件SQL> SELECT name, type, bytes/1024/1024 MB FROM v$asm_file WHERE group_number = 1;查看特定磁盘组的文件
查看ASM目录SQL> SELECT * FROM v$asm_directory;查看ASM目录
查看ASM别名SQL> SELECT * FROM v$asm_alias;查看ASM别名
查看ASM模板SQL> SELECT * FROM v$asm_template;查看ASM模板

ASM性能监控

ASM性能视图

命令类型示例命令说明
查看ASM磁盘组使用情况SQL> SELECT name, total_mb, free_mb, (total_mb - free_mb) used_mb, ROUND((free_mb/total_mb)*100, 2) free_pct FROM v$asm_diskgroup;查看ASM磁盘组使用情况
查看ASM磁盘性能SQL> SELECT name, reads, writes, read_time, write_time FROM v$asm_disk;查看ASM磁盘的I/O性能
查看ASM重新平衡状态SQL> SELECT * FROM v$asm_operation;查看ASM重新平衡操作的状态
查看ASM客户端连接SQL> SELECT * FROM v$asm_client;查看连接到ASM实例的客户端
查看ASM文件访问统计SQL> SELECT * FROM v$asm_file_access_statistics;查看ASM文件的访问统计信息
查看ASM等待事件SQL> SELECT event, COUNT(*) FROM v$session_wait WHERE event LIKE '%ASM%' GROUP BY event;查看与ASM相关的等待事件

ASM性能指标

命令类型示例命令说明
查看ASM磁盘I/O利用率SQL> SELECT name, (reads + writes) io_total, read_time, write_time, (read_time + write_time)/NULLIF(reads + writes, 0) avg_io_time FROM v$asm_disk;计算ASM磁盘的平均I/O时间
查看ASM重新平衡进度SQL> SELECT group_number, operation, state, power, sofar, est_work, est_rate, est_minutes FROM v$asm_operation;查看ASM重新平衡的进度和估计时间
查看ASM文件分布SQL> SELECT group_number, file_number, block_size, blocks FROM v$asm_file WHERE type = 'DATAFILE';查看ASM数据文件的分布情况
查看ASM磁盘空间预测SQL> SELECT * FROM v$asm_space_usage_prediction;查看ASM磁盘空间使用预测

ASM安全管理

ASM用户和权限

命令类型示例命令说明
创建ASM用户SQL> CREATE USER asm_user IDENTIFIED BY password;创建ASM用户
授予ASM权限SQL> GRANT sysasm TO asm_user;授予用户SYSASM权限
授予ASM角色SQL> GRANT asm_admin_role TO asm_user;授予ASM管理角色
回收ASM权限SQL> REVOKE sysasm FROM asm_user;回收用户的SYSASM权限
删除ASM用户SQL> DROP USER asm_user;删除ASM用户
查看ASM用户SQL> SELECT * FROM v$asm_user;查看所有ASM用户
查看ASM权限SQL> SELECT * FROM v$asm_permission;查看ASM权限信息

ASM密码文件管理

命令类型示例命令说明
创建ASM密码文件orapwd file='+DATA/orapw+ASM' password='password' entries=10 FORMAT=12.2创建ASM密码文件
查看ASM密码文件位置SQL> SHOW PARAMETER password_file;查看ASM密码文件位置
修改ASM密码文件参数SQL> ALTER SYSTEM SET remote_login_passwordfile = 'EXCLUSIVE' SCOPE=SPFILE;修改ASM密码文件参数

常见问题(FAQ)

Q1: 如何查看ASM磁盘组的使用情况?

A: 可以使用以下命令查看ASM磁盘组的使用情况:

sql
-- 使用SQL查询
SELECT name, total_mb, free_mb, (total_mb - free_mb) used_mb, ROUND((free_mb/total_mb)*100, 2) free_pct FROM v$asm_diskgroup;

-- 使用ASMCMD
asmcmd lsdg

Q2: 如何向ASM磁盘组添加新磁盘?

A: 可以使用以下步骤向ASM磁盘组添加新磁盘:

  1. 确保新磁盘已被操作系统识别并配置为ASM磁盘
  2. 使用SQL命令添加磁盘:
    sql
    ALTER DISKGROUP data ADD DISK '/dev/oracleasm/disks/DISK7' NAME disk7, '/dev/oracleasm/disks/DISK8' NAME disk8;
  3. 监控重新平衡进度:
    sql
    SELECT * FROM v$asm_operation;

Q3: 如何处理ASM磁盘故障?

A: 处理ASM磁盘故障的步骤如下:

  1. 检查故障磁盘状态:

    sql
    SELECT name, state FROM v$asm_disk WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA');
  2. 如果磁盘可以修复,将其在线:

    sql
    ALTER DISKGROUP data ONLINE DISK disk1;
  3. 如果磁盘无法修复,替换它:

    sql
    ALTER DISKGROUP data REPLACE DISK disk1 WITH '/dev/oracleasm/disks/DISK11' NAME disk11;
  4. 监控替换进度:

    sql
    SELECT * FROM v$asm_operation;

Q4: 如何修改ASM磁盘组的AU大小?

A: ASM磁盘组的AU大小只能在创建时设置,创建后无法修改。如果需要不同的AU大小,必须创建新的磁盘组:

sql
CREATE DISKGROUP data_new NORMAL REDUNDANCY
  DISK '/dev/oracleasm/disks/DISK1' NAME disk1,
       '/dev/oracleasm/disks/DISK2' NAME disk2
  ATTRIBUTE 'au_size' = '8M';

Q5: 如何查看ASM实例的客户端连接?

A: 可以使用以下命令查看连接到ASM实例的客户端:

sql
SELECT * FROM v$asm_client;

该视图显示了所有连接到ASM实例的数据库实例和ASMCMD客户端信息。

最佳实践

  1. 合理规划磁盘组:根据数据类型和访问模式创建不同的磁盘组,如数据磁盘组、归档日志磁盘组和备份磁盘组。
  2. 选择合适的冗余级别:根据业务需求选择外部冗余、正常冗余或高冗余,平衡性能和可靠性。
  3. 设置适当的AU大小:根据数据库文件大小选择合适的AU大小,一般建议对于大型数据库使用4M或8M的AU大小。
  4. 定期监控ASM性能:定期监控ASM磁盘组的使用情况、I/O性能和重新平衡状态,及时发现和解决问题。
  5. 预留足够的空间:在ASM磁盘组中预留至少10-20%的空闲空间,以确保重新平衡操作和文件扩展的顺利进行。
  6. 使用统一的命名规范:为ASM磁盘、目录和文件使用统一的命名规范,便于管理和维护。
  7. 定期备份ASM元数据:定期备份ASM元数据,以便在发生灾难时能够快速恢复。
  8. 谨慎修改兼容性:修改ASM磁盘组的兼容性前,确保所有相关的Oracle数据库实例都支持新的兼容性级别。
  9. 使用SYSASM权限:使用SYSASM权限管理ASM实例,而不是SYSDBA权限,以实现更细粒度的权限控制。
  10. 定期进行ASM健康检查:定期使用ASMCMD的checkdg命令和SQL的ALTER DISKGROUP CHECK命令检查ASM磁盘组的健康状况。