外观
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基本命令
| 命令类型 | 示例命令 | 说明 |
|---|---|---|
| 启动ASMCMD | asmcmd | 启动ASMCMD命令行工具 |
| 连接到指定ASM实例 | asmcmd --connect sys/password@+ASM | 连接到指定的ASM实例 |
| 查看ASMCMD帮助 | asmcmd help | 查看ASMCMD帮助信息 |
| 查看特定命令帮助 | asmcmd help ls | 查看ls命令的帮助信息 |
| 退出ASMCMD | asmcmd exit 或 asmcmd 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 lsdgQ2: 如何向ASM磁盘组添加新磁盘?
A: 可以使用以下步骤向ASM磁盘组添加新磁盘:
- 确保新磁盘已被操作系统识别并配置为ASM磁盘
- 使用SQL命令添加磁盘:sql
ALTER DISKGROUP data ADD DISK '/dev/oracleasm/disks/DISK7' NAME disk7, '/dev/oracleasm/disks/DISK8' NAME disk8; - 监控重新平衡进度:sql
SELECT * FROM v$asm_operation;
Q3: 如何处理ASM磁盘故障?
A: 处理ASM磁盘故障的步骤如下:
检查故障磁盘状态:
sqlSELECT name, state FROM v$asm_disk WHERE group_number = (SELECT group_number FROM v$asm_diskgroup WHERE name = 'DATA');如果磁盘可以修复,将其在线:
sqlALTER DISKGROUP data ONLINE DISK disk1;如果磁盘无法修复,替换它:
sqlALTER DISKGROUP data REPLACE DISK disk1 WITH '/dev/oracleasm/disks/DISK11' NAME disk11;监控替换进度:
sqlSELECT * 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客户端信息。
最佳实践
- 合理规划磁盘组:根据数据类型和访问模式创建不同的磁盘组,如数据磁盘组、归档日志磁盘组和备份磁盘组。
- 选择合适的冗余级别:根据业务需求选择外部冗余、正常冗余或高冗余,平衡性能和可靠性。
- 设置适当的AU大小:根据数据库文件大小选择合适的AU大小,一般建议对于大型数据库使用4M或8M的AU大小。
- 定期监控ASM性能:定期监控ASM磁盘组的使用情况、I/O性能和重新平衡状态,及时发现和解决问题。
- 预留足够的空间:在ASM磁盘组中预留至少10-20%的空闲空间,以确保重新平衡操作和文件扩展的顺利进行。
- 使用统一的命名规范:为ASM磁盘、目录和文件使用统一的命名规范,便于管理和维护。
- 定期备份ASM元数据:定期备份ASM元数据,以便在发生灾难时能够快速恢复。
- 谨慎修改兼容性:修改ASM磁盘组的兼容性前,确保所有相关的Oracle数据库实例都支持新的兼容性级别。
- 使用SYSASM权限:使用SYSASM权限管理ASM实例,而不是SYSDBA权限,以实现更细粒度的权限控制。
- 定期进行ASM健康检查:定期使用ASMCMD的checkdg命令和SQL的ALTER DISKGROUP CHECK命令检查ASM磁盘组的健康状况。
