修改 ASM 磁盘组冗余模式(三):闪回区磁盘组的替换
Johnson Chen( ccz320@gmail.com)
 
闪回区磁盘组一般存放有控制文件副本,redo log副本,archive log等文件,相对于数据文件,组的替换风险较小,但对于这样的操作,备份仍然是必不可少的,我一般会做3个东东的备份,包括L0的备份、创建pfile、备份控制文件,有了这几样,能让你在面对各种情况时轻松应对。
对于闪回磁盘组的替换,具体步骤如下:

 

1)         创建新的磁盘组:

 

 
  
  1. SYS@+ASM1 SQL>create diskgroup racfra_ext external redundancy disk '/dev/oracleasm/disks/VOL2';  
  2. Diskgroup created.  
  3.  
  4. SYS@+ASM1 SQL>show parameter diskgroup  
  5. NAME                                 TYPE        VALUE  
  6. ------------------------------------ ----------- ------------------------------  
  7. asm_diskgroups                       string      RACFRA, RACDAT_EXT, RACFRA_EXT  

 

2)         修改client数据库初始化参数:

 

 
  
  1. SYS@racdb1 SQL>alter system set log_archive_dest_1='LOCATION=+RACFRA_EXT/racdb/' scope=both sid='*';  
  2.  
  3. System altered.  
  4. SYS@racdb1 SQL>alter system set db_recovery_file_dest='+RACFRA_EXT' SCOPE=BOTH SID='*';  
  5. System altered.  

 

3)         查看位于原磁盘组中的数据库文件:

 

 
  
  1. SYS@racdb1 SQL>select name from v$datafile  
  2.     union  
  3.     select name from v$tempfile  
  4.     union  
  5.     select member from v$logfile  
  6.     union  
  7.     select filename from v$block_change_tracking  
  8.     union  
  9.     select name from v$controlfile  
  10.     order by 1;  
  11.  
  12. NAME  
  13. --------------------------------------------------------------------------------  
  14. +RACDAT_EXT/racdb/controlfile/current.257.781130523  
  15. +RACDAT_EXT/racdb/datafile/sysaux.282.781168791  
  16. +RACDAT_EXT/racdb/datafile/system.272.781168791  
  17. +RACDAT_EXT/racdb/datafile/tbs_test.279.781168793  
  18. +RACDAT_EXT/racdb/datafile/tbs_test2.276.781168797  
  19. +RACDAT_EXT/racdb/datafile/tbs_test2.277.781168795  
  20. +RACDAT_EXT/racdb/datafile/ts_big1.275.781168947  
  21. +RACDAT_EXT/racdb/datafile/ts_big2.280.781168791  
  22. +RACDAT_EXT/racdb/datafile/undotbs1.281.781168791  
  23. +RACDAT_EXT/racdb/datafile/undotbs2.278.781168793  
  24. +RACDAT_EXT/racdb/datafile/users.287.781168791  
  25. +RACDAT_EXT/racdb/onlinelog/group_1.274.781169975  
  26. +RACDAT_EXT/racdb/onlinelog/group_2.273.781169983  
  27. +RACDAT_EXT/racdb/onlinelog/group_3.267.781169991  
  28. +RACDAT_EXT/racdb/onlinelog/group_4.266.781170011  
  29. +RACDAT_EXT/racdb/tempfile/temp.265.781170033  
  30. +RACFRA/racdb/controlfile/current.302.781130525  
  31. +RACFRA/racdb/onlinelog/group_1.264.781169977  
  32. +RACFRA/racdb/onlinelog/group_2.309.781169985  
  33. +RACFRA/racdb/onlinelog/group_3.287.781169999  
  34. +RACFRA/racdb/onlinelog/group_4.280.781170017  
  35. 22 rows selected.  

4) 在新的磁盘组中增加新的redo log member并删除位于原磁盘组的member

 

 
  
  1. SYS@racdb1 SQL>alter database add logfile member '+racfra_ext' to group 1;  
  2. Database altered.  
  3.  
  4. SYS@racdb1 SQL>alter database add logfile member '+racfra_ext' to group 2;  
  5. Database altered.  
  6.  
  7. SYS@racdb1 SQL>alter database add logfile member '+racfra_ext' to group 3;  
  8. Database altered.  
  9.  
  10. SYS@racdb1 SQL>alter database add logfile member '+racfra_ext' to group 4;  
  11. Database altered.  
  12. SYS@racdb1 SQL>select group#,status from v$log;  
  13.     GROUP# STATUS  
  14. ---------- ----------------  
  15.          1 INACTIVE  
  16.          2 CURRENT  
  17.          3 INACTIVE  
  18.          4 CURRENT  
  19.  
  20. SYS@racdb1 SQL>select member from v$logfile order by 1;  
  21. MEMBER  
  22. --------------------------------------------------------------------------------  
  23. +RACDAT_EXT/racdb/onlinelog/group_1.274.781169975  
  24. +RACDAT_EXT/racdb/onlinelog/group_2.273.781169983  
  25. +RACDAT_EXT/racdb/onlinelog/group_3.267.781169991  
  26. +RACDAT_EXT/racdb/onlinelog/group_4.266.781170011  
  27. +RACFRA/racdb/onlinelog/group_1.264.781169977  
  28. +RACFRA/racdb/onlinelog/group_2.309.781169985  
  29. +RACFRA/racdb/onlinelog/group_3.287.781169999  
  30. +RACFRA/racdb/onlinelog/group_4.280.781170017  
  31. +RACFRA_EXT/racdb/onlinelog/group_1.256.781264871  
  32. +RACFRA_EXT/racdb/onlinelog/group_2.258.781264885  
  33. +RACFRA_EXT/racdb/onlinelog/group_3.260.781264899  
  34. +RACFRA_EXT/racdb/onlinelog/group_4.262.781264911  
  35. 12 rows selected.  
  36.  
  37. SYS@racdb1 SQL>alter database drop logfile member '+RACFRA/racdb/onlinelog/group_1.264.781169977';  
  38. Database altered.  
  39.  
  40. SYS@racdb1 SQL>alter database drop logfile member '+RACFRA/racdb/onlinelog/group_3.287.781169999';  
  41. Database altered.  
  42.  
  43. SYS@racdb1 SQL>alter system switch all logfile;  
  44. System altered.  
  45.  
  46. SYS@racdb1 SQL>select group#,status from v$log;  
  47.     GROUP# STATUS  
  48. ---------- ----------------  
  49.          1 CURRENT  
  50.          2 INACTIVE  
  51.          3 CURRENT  
  52.          4 INACTIVE  
  53. SYS@racdb1 SQL>alter database drop logfile member '+RACFRA/racdb/onlinelog/group_2.309.781169985';  
  54. Database altered.  
  55.  
  56. SYS@racdb1 SQL>alter database drop logfile member '+RACFRA/racdb/onlinelog/group_4.280.781170017';  
  57. Database altered.  
  58.  
  59. SYS@racdb1 SQL>select member from v$logfile order by 1;  
  60. MEMBER  
  61. --------------------------------------------------------------------------------  
  62. +RACDAT_EXT/racdb/onlinelog/group_1.274.781169975  
  63. +RACDAT_EXT/racdb/onlinelog/group_2.273.781169983  
  64. +RACDAT_EXT/racdb/onlinelog/group_3.267.781169991  
  65. +RACDAT_EXT/racdb/onlinelog/group_4.266.781170011  
  66. +RACFRA_EXT/racdb/onlinelog/group_1.256.781264871  
  67. +RACFRA_EXT/racdb/onlinelog/group_2.258.781264885  
  68. +RACFRA_EXT/racdb/onlinelog/group_3.260.781264899  
  69. +RACFRA_EXT/racdb/onlinelog/group_4.262.781264911  
  70.  
  71. 8 rows selected.  

5)  份数据库,然后单独备份一份控制文件:

 
  
  1. oracle@Linux1]./rmanL0_main.sh  
  2. RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11>   
  3. [oracle@Linux1]  
  4.  
  5. SYS@racdb1 SQL>alter database backup controlfile to '+RACFRA_EXT';  
  6. Database altered.  

6) 修改spfile,将指向原磁盘组的控制文件指向新磁盘组位置

 
  
  1. SYS@racdb1 SQL>show parameter control  
  2.  
  3. NAME                            TYPE        VALUE  
  4. ------------------------------------            -----------         ------------------------------  
  5. control_file_record_keep_time       integer         7  
  6. control_files                       string          +RACDAT_EXT/racdb/controlfile/  
  7.                                             current.257.781130523, +RACFRA  
  8.                                             /racdb/controlfile/current.302  
  9.                                                  .781130525  
  10.  
  11. SYS@racdb1 SQL>alter system set control_files='+RACDAT_EXT/racdb/controlfile/current.257.781130523','+RACFRA_EXT/racdb/controlfile/current.302.781130525' SCOPE=SPFILE SID='*';  
  12. System altered.  
  13.  
  14. SYS@racdb1 SQL>CREATE PFILE='/mnt/share/pfile20120422.ora' from spfile;  
  15. File created.  

7) 关闭所有实例

 
  
  1. [oracle@Linux1]crs_stat -t  
  2. Name           Type           Target    State     Host          
  3. ------------------------------------------------------------  
  4. ora....SM1.asm application    ONLINE    ONLINE    linux1        
  5. ora....X1.lsnr application    ONLINE    ONLINE    linux1        
  6. ora.linux1.gsd application    ONLINE    ONLINE    linux1        
  7. ora.linux1.ons application    ONLINE    ONLINE    linux1        
  8. ora.linux1.vip application    ONLINE    ONLINE    linux1        
  9. ora....SM2.asm application    ONLINE    ONLINE    linux2        
  10. ora....X2.lsnr application    ONLINE    ONLINE    linux2        
  11. ora.linux2.gsd application    ONLINE    ONLINE    linux2        
  12. ora.linux2.ons application    ONLINE    ONLINE    linux2        
  13. ora.linux2.vip application    ONLINE    ONLINE    linux2        
  14. ora.racdb.db   application    ONLINE    ONLINE    linux1        
  15. ora....b1.inst application    ONLINE    ONLINE    linux1        
  16. ora....b2.inst application    ONLINE    ONLINE    linux2        
  17. ora...._taf.cs application    OFFLINE   OFFLINE                 
  18. ora....db1.srv application    OFFLINE   OFFLINE                 
  19. ora....db2.srv application    OFFLINE   OFFLINE                 
  20. [oracle@Linux1]srvctl stop database -d racdb  
  21. [oracle@Linux1]crs_stat -t  
  22. Name           Type           Target    State     Host          
  23. ------------------------------------------------------------  
  24. ora....SM1.asm application    ONLINE    ONLINE    linux1        
  25. ora....X1.lsnr application    ONLINE    ONLINE    linux1        
  26. ora.linux1.gsd application    ONLINE    ONLINE    linux1        
  27. ora.linux1.ons application    ONLINE    ONLINE    linux1        
  28. ora.linux1.vip application    ONLINE    ONLINE    linux1        
  29. ora....SM2.asm application    ONLINE    ONLINE    linux2        
  30. ora....X2.lsnr application    ONLINE    ONLINE    linux2        
  31. ora.linux2.gsd application    ONLINE    ONLINE    linux2        
  32. ora.linux2.ons application    ONLINE    ONLINE    linux2        
  33. ora.linux2.vip application    ONLINE    ONLINE    linux2        
  34. ora.racdb.db   application    OFFLINE   OFFLINE                 
  35. ora....b1.inst application    OFFLINE   OFFLINE                 
  36. ora....b2.inst application    OFFLINE   OFFLINE                 
  37. ora...._taf.cs application    OFFLINE   OFFLINE                 
  38. ora....db1.srv application    OFFLINE   OFFLINE                 
  39. ora....db2.srv application    OFFLINE   OFFLINE             

8) 在一个节点上以nomount方式启动实例,并用备份的controlfile进行控制文件的恢复

 
  
  1. [oracle@Linux1]rman target /  
  2. Recovery Manager: Release 10.2.0.5.0 - Production on Sun Apr 22 11:01:08 2012  
  3. Copyright (c) 1982, 2007, Oracle.  All rights reserved.  
  4. connected to target database (not started)  
  5.  
  6. RMAN> startup nomount;  
  7. Oracle instance started  
  8. Total System Global Area    1224736768 bytes  
  9. Fixed Size                     2095896 bytes  
  10. Variable Size                251659496 bytes  
  11. Database Buffers             956301312 bytes  
  12. Redo Buffers                  14680064 bytes  
  13.  
  14. RMAN> restore controlfile from '+racfra_ext/racdb/controlfile/Backup.270.781267749';  
  15. Starting restore at 22-APR-2012 11:05:04  
  16. using channel ORA_DISK_1  
  17.  
  18. channel ORA_DISK_1: copied control file copy  
  19. output filename=+RACDAT_EXT/racdb/controlfile/current.263.781268709  
  20. output filename=+RACFRA_EXT/racdb/controlfile/current.269.781268713  
  21. Finished restore at 22-APR-2012 11:05:25  

9) 还原并打开数据库

 
  
  1. RMAN> alter database mount;  
  2.  
  3. database mounted  
  4. released channel: ORA_DISK_1  
  5.  
  6. RMAN> recover database;  
  7.  
  8. Starting recover at 22-APR-2012 11:08:42  
  9. Starting implicit crosscheck backup at 22-APR-2012 11:08:42  
  10. allocated channel: ORA_DISK_1  
  11. Crosschecked 7 objects  
  12. Finished implicit crosscheck backup at 22-APR-2012 11:08:43  
  13.  
  14. Starting implicit crosscheck copy at 22-APR-2012 11:08:43  
  15. using channel ORA_DISK_1  
  16. Finished implicit crosscheck copy at 22-APR-2012 11:08:44  
  17.  
  18. searching for all files in the recovery area  
  19. cataloging files...  
  20. cataloging done  
  21.  
  22. List of Cataloged Files 
  23. =======================  
  24. File Name: +racfra_ext/RACDB/CONTROLFILE/Backup.270.781267749  
  25.  
  26. using channel ORA_DISK_1  
  27. datafile 6 not processed because file is read-only  
  28.  
  29. starting media recovery  
  30.  
  31. archive log thread 1 sequence 8 is already on disk as file +RACDAT_EXT/racdb/onlinelog/group_2.273.781169983  
  32. archive log thread 2 sequence 6 is already on disk as file +RACFRA_EXT/racdb/onlinelog/group_4.262.781264911  
  33. archive log thread 2 sequence 8 is already on disk as file +RACDAT_EXT/racdb/onlinelog/group_4.266.781170011  
  34. archive log filename=+RACDAT_EXT/racdb/onlinelog/group_2.273.781169983 thread=1 sequence=8 
  35. archive log filename=+RACDAT_EXT/racdb/onlinelog/group_4.266.781170011 thread=2 sequence=8 
  36. media recovery complete, elapsed time: 00:00:04  
  37. Finished recover at 22-APR-2012 11:08:53  
  38.  
  39. RMAN> alter database open resetlogs;  
  40. database opened  
  41.  
  42. SYS@racdb1 SQL>show parameter control  
  43. NAME                                 TYPE        VALUE  
  44. ------------------------------------ ----------- ------------------------------  
  45. control_file_record_keep_time        integer     7  
  46. control_files                        string      +RACDAT_EXT/racdb/controlfile/  
  47.                                                  current.263.781268709, +RACFRA  
  48.                                                  _EXT/racdb/controlfile/current  
  49.                                                  .269.781268713  

因为实例使用spfile启动,因此在做controlfile恢复时spfile中的控制文件指向已经自动用恢复后的控制文件替代了

10) 建立一个新的L0全备份

 
  
  1. [oracle@Linux1]./rmanL0_main.sh  
  2. RMAN> 2> 3> 4> 5> 6> 7> 8> 9> 10> 11> 

11) 将原磁盘组置于nomount状态并重新启动RAC数据库测试

 
  
  1. SYS@+ASM1 SQL>select name,type,state from v$asm_diskgroup;  
  2. NAME                           TYPE   STATE  
  3. ------------------------------ ------ -----------  
  4. RACDAT_EXT                     EXTERN MOUNTED  
  5. RACFRA                         NORMAL MOUNTED  
  6. RACFRA_EXT                     EXTERN MOUNTED  
  7.  
  8. SYS@+ASM1 SQL>alter diskgroup racfra dismount;  
  9. Diskgroup altered.  
  10.  
  11. SYS@+ASM1 SQL>select name,type,state from v$asm_diskgroup;  
  12. NAME                           TYPE   STATE  
  13. ------------------------------ ------ -----------  
  14. RACDAT_EXT                     EXTERN MOUNTED  
  15. RACFRA                                DISMOUNTED  
  16. RACFRA_EXT                     EXTERN MOUNTED  
  17.  
  18. [oracle@Linux1]crs_stat -t  
  19. Name           Type           Target    State     Host          
  20. ------------------------------------------------------------  
  21. ora....SM1.asm application    ONLINE    ONLINE    linux1        
  22. ora....X1.lsnr application    ONLINE    ONLINE    linux1        
  23. ora.linux1.gsd application    ONLINE    ONLINE    linux1        
  24. ora.linux1.ons application    ONLINE    ONLINE    linux1        
  25. ora.linux1.vip application    ONLINE    ONLINE    linux1        
  26. ora....SM2.asm application    ONLINE    ONLINE    linux2        
  27. ora....X2.lsnr application    ONLINE    ONLINE    linux2        
  28. ora.linux2.gsd application    ONLINE    ONLINE    linux2        
  29. ora.linux2.ons application    ONLINE    ONLINE    linux2        
  30. ora.linux2.vip application    ONLINE    ONLINE    linux2        
  31. ora.racdb.db   application    OFFLINE   OFFLINE                 
  32. ora....b1.inst application    OFFLINE   OFFLINE                 
  33. ora....b2.inst application    OFFLINE   OFFLINE                 
  34. ora...._taf.cs application    OFFLINE   OFFLINE                 
  35. ora....db1.srv application    OFFLINE   OFFLINE                 
  36. ora....db2.srv application    OFFLINE   OFFLINE                 
  37.  
  38. [oracle@Linux1]srvctl start instance -d racdb -i racdb1  
  39.  
  40. [oracle@Linux1]crs_stat -t  
  41. Name           Type           Target    State     Host          
  42. ------------------------------------------------------------  
  43. ora....SM1.asm application    ONLINE    ONLINE    linux1        
  44. ora....X1.lsnr application    ONLINE    ONLINE    linux1        
  45. ora.linux1.gsd application    ONLINE    ONLINE    linux1        
  46. ora.linux1.ons application    ONLINE    ONLINE    linux1        
  47. ora.linux1.vip application    ONLINE    ONLINE    linux1        
  48. ora....SM2.asm application    ONLINE    ONLINE    linux2        
  49. ora....X2.lsnr application    ONLINE    ONLINE    linux2        
  50. ora.linux2.gsd application    ONLINE    ONLINE    linux2        
  51. ora.linux2.ons application    ONLINE    ONLINE    linux2        
  52. ora.linux2.vip application    ONLINE    ONLINE    linux2        
  53. ora.racdb.db   application    ONLINE    ONLINE    linux2        
  54. ora....b1.inst application    ONLINE    ONLINE    linux1        
  55. ora....b2.inst application    ONLINE    OFFLINE                 
  56. ora...._taf.cs application    OFFLINE   OFFLINE                 
  57. ora....db1.srv application    OFFLINE   OFFLINE                 
  58. ora....db2.srv application    OFFLINE   OFFLINE     

12) 删除磁盘组

 
  
  1. SYS@+ASM1 SQL>select name,type,state from v$asm_diskgroup;  
  2. NAME                           TYPE   STATE  
  3. ------------------------------ ------ -----------  
  4. RACDAT_EXT                     EXTERN MOUNTED  
  5. RACFRA                                DISMOUNTED  
  6. RACFRA_EXT                     EXTERN MOUNTED  
  7.  
  8. SYS@+ASM1 SQL>alter diskgroup racfra mount;  
  9. Diskgroup altered.  
  10.  
  11. SYS@+ASM1 SQL>drop diskgroup racfra including contents;  
  12. Diskgroup dropped.  
  13.  
  14. SYS@+ASM1 SQL>select name,type,state from v$asm_diskgroup;  
  15. NAME                           TYPE   STATE  
  16. ------------------------------ ------ -----------  
  17. RACDAT_EXT                     EXTERN MOUNTED  
  18. RACFRA_EXT                     EXTERN MOUNTED  

13) 重启各个节点的crs,一切OK,至此测试结束

 
  
  1. [oracle@Linux1]crs_stat -t  
  2. Name           Type           Target    State     Host          
  3. ------------------------------------------------------------  
  4. ora....SM1.asm application    ONLINE    ONLINE    linux1        
  5. ora....X1.lsnr application    ONLINE    ONLINE    linux1        
  6. ora.linux1.gsd application    ONLINE    ONLINE    linux1        
  7. ora.linux1.ons application    ONLINE    ONLINE    linux1        
  8. ora.linux1.vip application    ONLINE    ONLINE    linux1        
  9. ora....SM2.asm application    ONLINE    ONLINE    linux2        
  10. ora....X2.lsnr application    ONLINE    ONLINE    linux2        
  11. ora.linux2.gsd application    ONLINE    ONLINE    linux2        
  12. ora.linux2.ons application    ONLINE    ONLINE    linux2        
  13. ora.linux2.vip application    ONLINE    ONLINE    linux2        
  14. ora.racdb.db   application    ONLINE    ONLINE    linux1        
  15. ora....b1.inst application    ONLINE    ONLINE    linux1        
  16. ora....b2.inst application    ONLINE    ONLINE    linux2        
  17. ora...._taf.cs application    OFFLINE   OFFLINE                 
  18. ora....db1.srv application    OFFLINE   OFFLINE                 
  19. ora....db2.srv application    OFFLINE   OFFLINE         
  20.  
  21. SYS@+ASM1 SQL>select g.name diskgroup,d.name diskname,  
  22.       d.path diskpath,  
  23.       g.type grouptype,  
  24.       g.state groupstate,  
  25.       d.state diskstate  
  26.    from v$asm_diskgroup g,v$asm_disk d   
  27.    where g.group_number(+)=d.group_number;  
  28. DISKGROUP       DISKNAME        DISKPATH                    GROUPT  GROUPSTATE  DISKSTAT  
  29. --------------- ------------------------------      ----------------------------------------        ------      -----------         --------  
  30.                                 /dev/oracleasm/disks/VOL5       NORMAL  
  31.                                 /dev/oracleasm/disks/VOL6       NORMAL  
  32.                                 /dev/oracleasm/disks/VOL3       NORMAL  
  33.                                 /dev/oracleasm/disks/VOL4       NORMAL  
  34. RACDAT_EXT      RACDAT_EXT_0000     /dev/oracleasm/disks/VOL1       EXTERN  MOUNTED     NORMAL  
  35. RACFRA_EXT      RACFRA_EXT_0000     /dev/oracleasm/disks/VOL2       EXTERN  MOUNTED     NORMAL