在11.2之后,已经可以rename asm diskgroup了,而不必再新建diskgroup之后,再做image copy。
在11.2.中的gi home中,自带了一个命令renamedg,看下面的例子:
1 |
renamedg phase=<both|one|two> dgname=<old_diskgroup_name> newdgname=<new_diskgroup_name> [asm_diskstring='<path_name>' ] [verbose=true] |
其步骤可以分成2个phase,第一个是生成一个configure文件(renamedg_config),第二个phase是执行这个configure文件,而文档中说的phase=both,是表示生成完后直接执行。
此外,在10g和11gR1也可以修改,但其实也是利用11gR2的renamedg工具。
注意:在操作的时候,踩了几个坑,在这里和大家分享一下。
(一)有可能需要设置asm_diskstring,我第一次没加这个参数,报错了KFNDG-00407:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[oracle@rac1 ~]$ renamedg phase=both dgname=FRA newdgname=NEW_FRA verbose=true NOTE: No asm libraries found in the system Parsing parameters.. Parameters in effect: Old DG name : FRA New DG name : NEW_FRA Phases : Phase 1 Phase 2 Discovery str : (null) Clean : TRUE Raw only : TRUE renamedg operation: phase=both dgname=FRA newdgname=NEW_FRA verbose=true Executing phase 1 Discovering the group Performing discovery with string: KFNDG-00407: file not found; arguments: [] Terminating kgfd context 0x7fd4b29520a0 [oracle@rac1 ~]$ |
注,disk所在的路径,可以参考asm实例中初始化参数asm_diskstring的设置,或者直接用kfod disks=all看也可以。
(二)第二次的时候,加了asm_diskstring这个参数,但是只是操作前仅umount了node1,忘记umount node2上的diskgroup,报错了KFNDG-00305:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
[oracle@rac1 dev]$ renamedg phase=both dgname=FRA newdgname=NEW_FRA asm_diskstring='/dev/asm*' verbose=true NOTE: No asm libraries found in the system Parsing parameters.. Parameters in effect: Old DG name : FRA New DG name : NEW_FRA Phases : Phase 1 Phase 2 Discovery str : /dev/asm* Clean : TRUE Raw only : TRUE renamedg operation: phase=both dgname=FRA newdgname=NEW_FRA asm_diskstring=/dev/asm* verbose=true Executing phase 1 Discovering the group Performing discovery with string:/dev/asm* Identified disk UFS:/dev/asm-fra03 with disk number:2 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra04 with disk number:3 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra01 with disk number:0 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra02 with disk number:1 and timestamp (33005975 -1778129920) Checking for hearbeat... Re-discovering the group Performing discovery with string:/dev/asm* Identified disk UFS:/dev/asm-fra03 with disk number:2 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra04 with disk number:3 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra01 with disk number:0 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra02 with disk number:1 and timestamp (33005975 -1778129920) Checking if the diskgroup is mounted or used by CSS Checking disk number:2 Checking disk number:3 Checking disk number:0 Checking disk number:1 Generating configuration file.. KFNDG-00305: file not found Terminating kgfd context 0x7f82d62960a0 [oracle@rac1 dev]$ |
解决了上面的2个问题,才是正常修改成功:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
[oracle@rac1 ~]$ renamedg phase=both dgname=FRA newdgname=NEW_FRA asm_diskstring='/dev/asm*' verbose=true NOTE: No asm libraries found in the system Parsing parameters.. Parameters in effect: Old DG name : FRA New DG name : NEW_FRA Phases : Phase 1 Phase 2 Discovery str : /dev/asm* Clean : TRUE Raw only : TRUE renamedg operation: phase=both dgname=FRA newdgname=NEW_FRA asm_diskstring=/dev/asm* verbose=true Executing phase 1 Discovering the group Performing discovery with string:/dev/asm* Identified disk UFS:/dev/asm-fra03 with disk number:2 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra04 with disk number:3 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra01 with disk number:0 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra02 with disk number:1 and timestamp (33005975 -1778129920) Checking for hearbeat... Re-discovering the group Performing discovery with string:/dev/asm* Identified disk UFS:/dev/asm-fra03 with disk number:2 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra04 with disk number:3 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra01 with disk number:0 and timestamp (33005975 -1778129920) Identified disk UFS:/dev/asm-fra02 with disk number:1 and timestamp (33005975 -1778129920) Checking if the diskgroup is mounted or used by CSS Checking disk number:2 Checking disk number:3 Checking disk number:0 Checking disk number:1 Generating configuration file.. Completed phase 1 Executing phase 2 Looking for /dev/asm-fra03 Modifying the header Looking for /dev/asm-fra04 Modifying the header Looking for /dev/asm-fra01 Modifying the header Looking for /dev/asm-fra02 Modifying the header Completed phase 2 Terminating kgfd context 0x7fa4f29790a0 [oracle@rac1 ~]$ |
看上面的log看,似乎是锁定对应diskgroup的盘之后,修改asm盘头信息(Modifying the header),从而实现rename的目的。
从这个角度讲,如果手工的kfed修改盘头信息,kfdhdb.grpname字段,再merge进去,其实也是可以做到rename diskgroup的。而从理论上讲,diskgroup name的信息,只是包含在盘头信息中,不涉及盘头信息中disk的create timestamp和disk directory中disk的create timestamp一致性的问题了。所以只需要修改盘头就可以了。
下面,我就把已经用renamedg工具改成NEW_FRA的diskgroup,再改回FRA的名字。修改过程如下:
(注:USE kfed at your own risk!)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
[oracle@rac1 ~]$ kfod disks=all -------------------------------------------------------------------------------- Disk Size Path User Group ================================================================================ 1: 6142 Mb /dev/asm-acfs01 oracle dba 2: 6142 Mb /dev/asm-acfs02 oracle dba 3: 1019 Mb /dev/asm-data01 oracle dba 4: 1019 Mb /dev/asm-data02 oracle dba 5: 1019 Mb /dev/asm-data03 oracle dba 6: 1019 Mb /dev/asm-data04 oracle dba 7: 1019 Mb /dev/asm-data05 oracle dba 8: 1019 Mb /dev/asm-fra01 oracle dba 9: 1019 Mb /dev/asm-fra02 oracle dba 10: 1019 Mb /dev/asm-fra03 oracle dba 11: 1019 Mb /dev/asm-fra04 oracle dba 12: 611 Mb /dev/asm-ocrvot1 oracle dba 13: 611 Mb /dev/asm-ocrvot2 oracle dba 14: 611 Mb /dev/asm-ocrvot3 oracle dba -------------------------------------------------------------------------------- ORACLE_SID ORACLE_HOME ================================================================================ +ASM1 /u01/app/11.2.0.3/grid +ASM2 /u01/app/11.2.0.3/grid [oracle@rac1 ~]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra01 text=fra_1.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra02 text=fra_2.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra03 text=fra_3.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra04 text=fra_4.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ ## 修改前 [oracle@rac1 amdu_2016_02_17_14_25_33]$ cat fra_1.txt |grep grpname kfdhdb.grpname: NEW_FRA ; 0x048: length=7 [oracle@rac1 amdu_2016_02_17_14_25_33]$ vi fra_1.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ ## 修改后 [oracle@rac1 amdu_2016_02_17_14_25_33]$ cat fra_1.txt |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ ## 修改剩余fra_2.txt,fra_3.txt,fra_4.txt三个文件 [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ cat *.txt |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 kfdhdb.grpname: FRA ; 0x048: length=3 kfdhdb.grpname: FRA ; 0x048: length=3 kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ ## 用kfed merge进去 [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed merge /dev/asm-fra01 text=fra_1.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed merge /dev/asm-fra02 text=fra_2.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed merge /dev/asm-fra03 text=fra_3.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed merge /dev/asm-fra04 text=fra_4.txt [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ ##检查盘头是否已经都修改正确了 [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra01 |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra02 |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra03 |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ kfed read /dev/asm-fra04 |grep grpname kfdhdb.grpname: FRA ; 0x048: length=3 [oracle@rac1 amdu_2016_02_17_14_25_33]$ [oracle@rac1 amdu_2016_02_17_14_25_33]$ sqlplus "/ as sysasm" SQL*Plus: Release 11.2.0.4.0 Production on Wed Feb 17 14:45:17 2016 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Real Application Clusters and Automatic Storage Management options SQL> select GROUP_NUMBER,name,STATE from v$asm_diskgroup where name like '%FRA%'; GROUP_NUMBER NAME STATE ------------ ------------------------------ ----------- 3 FRA MOUNTED SQL> SQL> SQL> select DISK_NUMBER,name,PATH,MOUNT_STATUS,HEADER_STATUS,MODE_STATUS,STATE from v$asm_disk where GROUP_NUMBER=3; DISK_NUMBER NAME PATH MOUNT_S HEADER_STATU MODE_ST STATE ----------- ------------------------------ ------------------------------ ------- ------------ ------- -------- 0 FRA_0000 /dev/asm-fra01 CACHED MEMBER ONLINE NORMAL 2 FRA_0002 /dev/asm-fra03 CACHED MEMBER ONLINE NORMAL 1 FRA_0001 /dev/asm-fra02 CACHED MEMBER ONLINE NORMAL 3 FRA_0003 /dev/asm-fra04 CACHED MEMBER ONLINE NORMAL SQL> |
参考:
How To Rename A Diskgroup On ASM 11gR2? (Doc ID 948040.1)
How to rename diskgroup in 10g ASM (Pre-11gR2 release) (Doc ID 948605.1)
How to rename ASM diskgroup in Oracle 12c RAC Database