
作者 | JiekeXu
来源 | JiekeXu DBA之路(ID: JiekeXu_IT)
大家好,我是 JiekeXu,很高兴又和大家见面了,今天和大家一起聊聊ASM 磁盘组如何重命名的问题,欢迎点击上方蓝字关注我,标星或置顶,更多干货第一时间到达!
前几天在 MOS 上看到一篇“如何在 11gR2 版本上重命名 ASM 磁盘组”的文章。记得很久之前有人问过是否可以重命名,当时要是看到这篇的话就可以参考一下了。不过对于这种操作来说还是很少见的,毕竟磁盘组名叫啥除了 DBA 关心外好像不关其他人什么事,而且 OCR、VOTE 盘是没法重命名的。其他磁盘组到是可以重命名,但也要注意由于 ASM 文件名(如 <OLD_DG_NAME>files / controlfiles 等)包括磁盘组名称,因此在重命名后,需要注意(更新 pfile 或重命名 <OLD_DG_NAME>files )RDBMS 实例。
首先,需要卸载所需的磁盘组(如果这是 RAC 配置,则从每个节点卸载): $ asmcmd umount <OLD_DG_NAME>
验证所需的磁盘组是否已卸载:
$ asmcmd lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED NORMAL N 512 4096 1048576 32756 31828 244 15792 0 N <OLD_DG_NAME>_OCR/
MOUNTED EXTERN N 512 4096 1048576 16378 10134 0 10134 0 N LOB<OLD_DG_NAME>/
3. 然后执行rename语句:
# renamedg phase=both dgname=<OLD_DG_NAME> newdgname=<NEW_DG_NAME> verbose=true
Parsing parameters..
Parameters in effect:
Old DG name : <OLD_DG_NAME>
New DG name : <NEW_DG_NAME>
Phases :
Phase 1
Phase 2
Discovery str : (null)
Clean : TRUE
Raw only : TRUE
renamedg operation: phase=both dgname=<OLD_DG_NAME> newdgname=<NEW_DG_NAME> verbose=true
Executing phase 1
Discovering the group
Performing discovery with string:
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>1 with disk number:0 and timestamp (32925601 -972709888)
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>2 with disk number:1 and timestamp (32925601 -972709888)
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>3 with disk number:2 and timestamp (32925601 -972709888)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>1 with disk number:0 and timestamp (32925601 -972709888)
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>2 with disk number:1 and timestamp (32925601 -972709888)
Identified disk ASM:/opt/oracle/extapi/64/asm/orcl/1/libasm.so:ORCL:<DISK_NAME>3 with disk number:2 and timestamp (32925601 -972709888)
Checking if the diskgroup is mounted
Checking disk number:0
Checking disk number:1
Checking disk number:2
Checking if diskgroup is used by CSS
Generating configuration file..
Completed phase 1
Executing phase 2
Looking for ORCL:<DISK_NAME>1
Modifying the header
Looking for ORCL:<DISK_NAME>2
Modifying the header
Looking for ORCL:<DISK_NAME>3
Modifying the header
Completed phase 2
Terminating kgfd context 0x2af21517e0a0
如果上面的命令失败,搜索磁盘,那么我们需要包含磁盘字符串,然后你需要使用
renamedg phase=both dgname=<OLD_DG_NAME> newdgname=<NEW_DG_NAME> verbose=true asm_diskstring='<discoverystring1>','<discoverystring2>'
最后,挂载重命名的磁盘组并验证它是否已挂载(如果这是 RAC 配置,则在每个节点上):
$ asmcmd mount <NEW_DG_NAME>
$ asmcmd lsdg
State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED NORMAL N 512 4096 1048576 32756 31828 244 15792 0 N <OLD_DG_NAME>_OCR/
MOUNTED EXTERN N 512 4096 1048576 24567 14267 0 14267 0 N <NEW_DG_NAME>/
MOUNTED EXTERN N 512 4096 1048576 16378 10134 0 10134 0 N LOB<OLD_DG_NAME>/
>>>请避免使用重命名 OCR/VOTE 磁盘组。>>>
重要提示:使用重命名磁盘组名称会发生变化。由于 ASM 文件名(如 <OLD_DG_NAME>files / controlfiles 等)包括磁盘组名称,因此在重命名后,您需要注意(更新 pfile 或重命名 <OLD_DG_NAME>files )RDBMS 实例。
下面来一起试试:
在 19c 环境中新建一个磁盘组来试验一下:
查看可使用的裸盘
ASMCMD> lsdsk --candidate -p
Group_Num Disk_Num Incarn Mount_Stat Header_Stat Mode_Stat State Path
0 0 0 CLOSED CANDIDATE ONLINE NORMAL /dev/asmdisks/asm-mgmt
静默创建磁盘组
asmca -silent -createDiskGroup -sysAsmPassword Oracle19c -asmsnmpPassword Oracle19c -oui_internal -diskString '/dev/asmdisks/asm*' -diskGroupName TEST -diskList /dev/asmdisks/asm-mgmt -redundancy EXTERNAL -au_size 4 -compatible.asm 19.0.0.0.0
静默创建的语法如下:
jieke-rac1:/dev/asmdisks(+ASM1)$ asmca -silent -hasmca [-silent] [-sysAsmPassword <SYS 用户口令>] [-asmsnmpPassword <ASM 监视口令>] {<command> <options>}有关详细信息, 请参阅手册。您可以输入以下命令之一:1. 通过指定以下命令和参数来配置 ASM 实例:-configureASM[][][]-diskString <磁盘搜索路径>(-diskGroupName <磁盘组名>(-disk <磁盘路径> [-diskName <磁盘名>] |-diskList <逗号分隔的磁盘列表>[][][][])[][][][][])2. 通过指定以下命令和参数来配置 ASM 参数:-configureParameter(-param <paramname=paramvalue>)(-target <ASM|APX|IOS> 为其配置初始化参数的目标。如果未配置 spfile, 则将为该目标配置新的 spfile)[]3. 通过指定以下命令和参数来创建磁盘组:-createDiskGroup[](-diskGroupName <磁盘组名>(-disk <磁盘路径> [-diskName <磁盘名>] |-diskList <逗号分隔的磁盘列表>[][][][][][])[][][][][][][][])[][]4. 通过指定以下命令和参数将磁盘添加到磁盘组:-addDisk[](-diskGroupName <磁盘组名>(-disk <磁盘路径> [-diskName <磁盘名>] |-diskList <逗号分隔的磁盘列表>[][][][])[][][]5. 通过指定以下命令和参数来创建卷:-createVolume(-volumeName <ASM 卷名>-volumeDiskGroup <卷的 ASM 磁盘组名>-volumeSizeGB <ASM 卷大小 (GB)>[])[]6. 通过指定以下命令和参数来创建 ASM 集群文件系统:-createACFS(-acfsVolumeDevice <ASM 卷设备>)(-acfsMountPoint <现有主机文件系统路径>)[][][]7. 通过指定以下命令和参数来创建 ACFS 快照:-createACFSSnapshot(-acfsMountPoint <ACFS 装载点>)(-snapshotName <ACFS 快照名>)[][]8. 通过指定以下命令和参数来删除现有 ACFS 快照:-deleteACFSSnapshot(-acfsMountPoint <ACFS 装载点>)(-snapshotName <ACFS 快照名>)9. 通过指定以下命令和参数, 在给定磁盘组上创建一个或多个新的文件组:-createFileGroups(-diskGroupName <磁盘组名>)(-fileGroupNames <包含要处理的所有文件组名称的逗号分隔列表>)(-fileGroupUsages <包含用法字符串的逗号分隔列表, 这些用法字符串对应于要处理的所有文件组>)(-fileGroupUsageIDs <包含用法 ID 字符串的逗号分隔列表, 这些用法 ID 字符串对应于要处理的所有文件组>)10. 通过指定以下命令和参数, 删除给定磁盘组上的一个或多个文件组:-dropFileGroups(-diskGroupName <磁盘组名>)(-fileGroupNames <包含要处理的所有文件组名称的逗号分隔列表>)11. 通过指定以下命令和参数, 在给定磁盘组上创建一个或多个新的限额组:-createQuotaGroups(-diskGroupName <磁盘组名>)(-quotaGroupNames <包含要处理的所有限额组名称的逗号分隔列表>)(-quotaGroupSizes <包含大小的逗号分隔列表, 这些大小对应于要处理的所有限额组>)12. 通过指定以下命令和参数, 删除给定磁盘组上的一个或多个限额组:-dropQuotaGroups(-diskGroupName <磁盘组名>)(-quotaGroupNames <包含要处理的所有限额组名称的逗号分隔列表>)13. 编辑现有磁盘组的一个或多个属性的当前值。-editDiskGroupAttributes(-diskGroupName <磁盘组名>)(-attribute <<attribute name=attribute value> 格式的字节组用于指定磁盘组属性。>)
查看创建成功
ASMCMD> lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 307200 122736 0 122736 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 102400 92120 0 92120 0 N FRA/
MOUNTED NORMAL N 512 512 4096 4194304 9216 8236 3072 2582 0 Y OCR/
MOUNTED EXTERN N 512 512 4096 4194304 51200 51064 0 51064 0 N TEST/
当然也可直接修改 compatible 属性
su - grid
sqlplus / as sysasm
SYS@+ASM2>col value for a30
SYS@+ASM2>col name for a30
SYS@+ASM2>set lin 120
SYS@+ASM2>select name,value from v$asm_attribute where group_number=4 and name like 'compatible%';
NAME VALUE
------------------ ------------------------------
compatible.asm 19.0.0.0.0
compatible.rdbms 10.1.0.0.0
compatible.advm 19.0.0.0.0
SYS@+ASM2>ALTER DISKGROUP TEST SET ATTRIBUTE 'compatible.rdbms' = '19.0.0.0.0';
然后我们用新建的磁盘组来尝试重命名,对于有数据的磁盘本次暂未考虑。
首先两节点均卸载磁盘组
asmcmd umount test
然后开始重命名
renamedg phase=both dgname=TEST newdgname=JIEKE verbose=true
执行上面命令会有一些找不到磁盘的错误但也会成功,将其 mount


重命名前一定得卸载两节点的磁盘组

挂载新命名的磁盘组 JIEKE

上边有报错,用下边的命令继续将磁盘组 JIEKE 重命名为 JIEKEXU
renamedg phase=both dgname=JIEKE newdgname=JIEKEXU verbose=true asm_diskstring='/dev/asmdisks/asm-mgmt'
下面是详细日志,无报错。
jieke-rac1:/home/grid(+ASM1)$ renamedg phase=both dgname=JIEKE newdgname=JIEKEXU verbose=true asm_diskstring='/dev/asmdisks/asm-mgmt'
Parameters in effect:
Old DG name : JIEKE
New DG name : JIEKEXU
Phases :
Phase 1
Phase 2
Discovery str : /dev/asmdisks/asm-mgmt
Clean : TRUE
Raw only : TRUE
renamedg operation: phase=both dgname=JIEKE newdgname=JIEKEXU verbose=true asm_diskstring=/dev/asmdisks/asm-mgmt
Executing phase 1
Discovering the group
Performing discovery with string:/dev/asmdisks/asm-mgmt
Identified disk UFS:/dev/asmdisks/asm-mgmt with disk number:0 and timestamp (33119146 1388808192)
Checking for hearbeat...
Re-discovering the group
Performing discovery with string:/dev/asmdisks/asm-mgmt
Identified disk UFS:/dev/asmdisks/asm-mgmt with disk number:0 and timestamp (33119146 1388808192)
Checking if the diskgroup is mounted or used by CSS
Checking disk number:0
Generating configuration file..
Completed phase 1
Executing phase 2
Looking for /dev/asmdisks/asm-mgmt
Modifying the header
Completed phase 2
两个节点 mount 磁盘组
asmcmd mount jiekexu
ASMCMD> lsdg
State Type Rebal Sector Logical_Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name
MOUNTED EXTERN N 512 512 4096 4194304 307200 122736 0 122736 0 N DATA/
MOUNTED EXTERN N 512 512 4096 4194304 102400 92120 0 92120 0 N FRA/
MOUNTED EXTERN N 512 512 4096 4194304 51200 51064 0 51064 0 N JIEKEXU/
MOUNTED NORMAL N 512 512 4096 4194304 9216 8236 3072 2582 0 Y OCR/
ASMCMD>

本次重命名只是一块新的磁盘组没有存放任何数据,操作比较简单,如果磁盘里存放数据文件、密码文件、参数文件等数据库重要文件,肯定难度指数级上升。只供测试环境学习使用,生产环境禁用,以上仅供参考。
好了,今天的文章就到此为止了。如果此文对您有帮助,欢迎点赞、在看与转发,写作不易,举手之劳,便是对作者最大的支持,也能让更多的人受益。
参考文档:
How To Rename A Diskgroup On ASM 11gR2? (Doc ID 948040.1)
————————————————————————
公众号:JiekeXu DBA之路
墨天轮:https://www.modb.pro/u/4347
CSDN :https://blog.csdn.net/JiekeXu
腾讯云:https://cloud.tencent.com/developer/user/5645107
————————————————————————

Oracle 12c 及以上版本补丁更新说明及下载方法(收藏版)
Oracle 19c 19.10DBRU 最新补丁升级看这一篇就够了
ASM 管理的内部工具:KFED、KFOD、AMDU
性能优化|关于数据库历史性能问题的一道面试题
一线运维 DBA 五年经验常用 SQL 大全(二)
ORA-00349|激活 ADG 备库时遇到的问题
Oracle 轻量级实时监控工具 oratop
MySQL OCP 认证考试你知道吗?
Oracle 19C RAC 安装遇到的坑
Oracle 19C MAA 搭建指南 Oracle 每日一题系列合集
百花齐放的国产数据库 
