大家好,我是 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语句:
代码语言:javascript复制# 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
如果上面的命令失败,搜索磁盘,那么我们需要包含磁盘字符串,然后你需要使用
代码语言:javascript复制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 环境中新建一个磁盘组来试验一下:
查看可使用的裸盘
代码语言:javascript复制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
静默创建磁盘组
代码语言:javascript复制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
静默创建的语法如下:
代码语言:javascript复制jieke-rac1:/dev/asmdisks( ASM1)$ asmca -silent -h
asmca [-silent] [-sysAsmPassword <SYS 用户口令>] [-asmsnmpPassword <ASM 监视口令>] {<command> <options>}
有关详细信息, 请参阅手册。
您可以输入以下命令之一:
1. 通过指定以下命令和参数来配置 ASM 实例:
-configureASM
[-sysAsmPassword <SYS 用户口令>]
[-asmsnmpPassword <ASM 监视口令>]
[(-param <paramname=paramvalue>)]
-diskString <磁盘搜索路径>
(-diskGroupName <磁盘组名>
(-disk <磁盘路径> [-diskName <磁盘名>] |
-diskList <逗号分隔的磁盘列表>
[-diskSize <磁盘大小 (MB)>]
[-failuregroup <故障组名>]
[-force|-noforce]
[-quorum|-noquorum])
[-redundancy <HIGH|NORMAL|EXTERNAL|FLEX|EXTENDED>]
[-au_size <1 ~ 64>]
[-compatible.asm <11.2.0.2 ~ 12.2>]
[-compatible.rdbms <11.2.0.2 ~ 12.2>]
[-compatible.advm <11.2.0.2 ~ 12.2>])
2. 通过指定以下命令和参数来配置 ASM 参数:
-configureParameter
(-param <paramname=paramvalue>)
(-target <ASM|APX|IOS> 为其配置初始化参数的目标。如果未配置 spfile, 则将为该目标配置新的 spfile)
[-sysAsmPassword <SYS 用户口令>]
3. 通过指定以下命令和参数来创建磁盘组:
-createDiskGroup
[-diskString <磁盘搜索路径>]
(-diskGroupName <磁盘组名>
(-disk <磁盘路径> [-diskName <磁盘名>] |
-diskList <逗号分隔的磁盘列表>
[-diskSize <磁盘大小 (MB)>]
[-failureGroups <逗号分隔的故障组名列表>]
[-quorumFailureGroups <逗号分隔的故障组名列表>]
[-sites <站点名称>]
[-force|-noforce]
[-quorum|-noquorum])
[-redundancy <HIGH|NORMAL|EXTERNAL|FLEX|EXTENDED>]
[-au_size <1 ~ 64>]
[-compatible.asm <11.2.0.2 ~ 12.2>]
[-compatible.rdbms <11.2.0.2 ~ 12.2>]
[-compatible.advm <11.2.0.2 ~ 12.2>]
[-sector_size.physical <512, 4k>]
[-sector_size.logical <512, 4k>]
[-autoLabel <自动生成 AFD 标签; 如果未指定标签前缀, 则将磁盘组名用作前缀>])
[-labelPrefix <标签前缀将用于创建 AFD 标签>]
[-sysAsmPassword <SYS 用户口令>]
4. 通过指定以下命令和参数将磁盘添加到磁盘组:
-addDisk
[-diskString <磁盘搜索路径>]
(-diskGroupName <磁盘组名>
(-disk <磁盘路径> [-diskName <磁盘名>] |
-diskList <逗号分隔的磁盘列表>
[-diskSize <磁盘大小 (MB)>]
[-failuregroup <故障组名>]
[-force|-noforce]
[-quorum|-noquorum])
[-autoLabel <自动生成 AFD 标签; 如果未指定标签前缀, 则将磁盘组名用作前缀>]
[-labelPrefix <标签前缀将用于创建 AFD 标签>]
[-sysAsmPassword <SYS 用户口令>]
5. 通过指定以下命令和参数来创建卷:
-createVolume
(-volumeName <ASM 卷名>
-volumeDiskGroup <卷的 ASM 磁盘组名>
-volumeSizeGB <ASM 卷大小 (GB)>
[-volumeRedundancy <INHERIT|MIRROR|HIGH|UNPROTECTED>])
[-sysAsmPassword <SYS 用户口令>]
6. 通过指定以下命令和参数来创建 ASM 集群文件系统:
-createACFS
(-acfsVolumeDevice <ASM 卷设备>)
(-acfsMountPoint <现有主机文件系统路径>)
[-acfsUserName <ACFS 用户名>]
[-acfsGroupName <ACFS 组名>]
[-sysAsmPassword <SYS 用户口令>]
7. 通过指定以下命令和参数来创建 ACFS 快照:
-createACFSSnapshot
(-acfsMountPoint <ACFS 装载点>)
(-snapshotName <ACFS 快照名>)
[-snapshotMode <ACFS 快照模式 r|w>]
[-parentSnapshotName <父 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> 格式的字节组用于指定磁盘组属性。>)
查看创建成功
代码语言:javascript复制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 属性
代码语言:javascript复制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';
然后我们用新建的磁盘组来尝试重命名,对于有数据的磁盘本次暂未考虑。
首先两节点均卸载磁盘组
代码语言:javascript复制asmcmd umount test
然后开始重命名
代码语言:javascript复制renamedg phase=both dgname=TEST newdgname=JIEKE verbose=true
重命名前一定得卸载两节点的磁盘组
挂载新命名的磁盘组 JIEKE
上边有报错,用下边的命令继续将磁盘组 JIEKE 重命名为 JIEKEXU
代码语言:javascript复制
下面是详细日志,无报错。
代码语言:javascript复制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 磁盘组
代码语言:javascript复制asmcmd mount jiekexu
代码语言:javascript复制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 ————————————————————————