修改ASM磁盘冗余度(由normal改为external)

有个朋友问起ASM磁盘创建后能否直接修改冗余度?
印象中是不能,需要重建ASM磁盘。

回去翻了一下官方文档:
Automatic Storage Management Administrator's Guide -〉
4 Administering Oracle ASM Disk Groups -〉
Using the CREATE DISKGROUP SQL Statement -〉  Specify the redundancy level of the disk group.

After a disk group is created, you cannot alter the redundancy level of the disk group. To change the redundancy level, you must create another disk group with the appropriate redundancy and then move the files to the new disk group.
一个ASM磁盘组创建后,不能修改该磁盘组的冗余级别。如果想要修改磁盘组的冗余级别,你必须创建另一个适当冗余级别的磁盘组,然后把数据移动到新的磁盘组。

官方文档链接: http://docs.oracle.com/cd/E11882_01/server.112/e18951/asmdiskgrps.htm#CHDBDAGI

###############################################################
于是有了下面的实验:
由于之前的虚拟机环境为10gASM(下次用11g测下,步骤应当差不多),并且数据库存放在+DATA磁盘上,+DATA磁盘设定的冗余度为常规冗余,故本实验将由常规冗余改为外部冗余。
外部冗余改为常规冗余和该实验步骤基本一致。
###############################################################
迁移步骤:
先创建一个新ASM磁盘组。
先将控制文件迁移至磁盘组,再迁移数据文件、日志文件等。
###############################################################

一、创建一个新的磁盘组
10g用dbca,11g用asmca,或者直接用指令也可以,这里我用dbca:

    查看一下磁盘组:

点击(此处)折叠或打开


  1. [root@oracle4 ~]# su - oracle
  2. [oracle@oracle4 ~]$ export ORACLE_SID=+ASM
  3. [oracle@oracle4 ~]$ sqlplus / as sysdba

  4. SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 19 01:17:26 2015

  5. Copyright (c) 1982, 2005, Oracle. All rights reserved.


  6. Connected to:
  7. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  8. With the Partitioning, OLAP and Data Mining options

  9. SQL> select state,name,type from v$asm_diskgroup;

  10. STATE NAME TYPE
  11. ----------- ------------------------------ ------
  12. MOUNTED DATA NORMAL
  13. MOUNTED RECOVER EXTERN
  14. MOUNTED NEWDG EXTERN

  15. ----这里,我们创建了一个新的ASM磁盘组,名为NEWDG,外部冗余。

  二、将控制文件迁移到新的磁盘组

   环境:旧控制文件放在+data磁盘组上,新的放在+newdg磁盘组上
  迁移方法:先在+newdg上增加一个控制文件,再删除+data磁盘上旧的控制文件
  迁移步骤:如下:

  1. ----1.将参数文件中,控制文件的参数由+DATA磁盘上的一个路径改为两个路径,
  2. SQL> alter system set control_files='+DATA/asmdb/controlfile/current.260.886430449','+newdg' scope=spfile;

  3. ----2. 改为两个路径以后,由于第二个文件并不存在,会报错。
  4. ----这时重启数据库至nomount模式,使用rman从第一个控制文件恢复第二个控制文件

  5. SQL> startup force nomount;
  6. ORACLE instance started.
  7. Total System Global Area 608174080 bytes
  8. Fixed Size 1220844 bytes
  9. Variable Size 180358932 bytes
  10. Database Buffers 423624704 bytes
  11. Redo Buffers 2969600 bytes

  12. [oracle@oracle4 dbs]$ rman target /
  13. Recovery Manager: Release 10.2.0.1.0 - Production on Wed Aug 19 01:47:18 2015
  14. Copyright (c) 1982, 2005, Oracle. All rights reserved.
  15. connected to target database: asmdb (not mounted)

  16. RMAN> restore controlfile from '+DATA/asmdb/controlfile/current.260.886430449';

  17. Starting restore at 19-AUG-15
  18. using target database control file instead of recovery catalog
  19. allocated channel: ORA_DISK_1
  20. channel ORA_DISK_1: sid=156 devtype=DISK

  21. channel ORA_DISK_1: copied control file copy
  22. output filename=+DATA/asmdb/controlfile/current.260.886430449
  23. output filename=+NEWDG/asmdb/controlfile/backup.257.888112073
  24. Finished restore at 19-AUG-15

  25. ---红色标注的是生成的新的控制文件
  26. ---这时启动数据库至nomount模式
  27. ---你会发现参数被修改了:

  28. RMAN> alter database mount;
  29. database mounted
  30. released channel: ORA_DISK_1

  31. [oracle@oracle4 dbs]$ sqlplus / as sysdba
  32. SQL*Plus: Release 10.2.0.1.0 - Production on Wed Aug 19 01:48:48 2015
  33. Copyright (c) 1982, 2005, Oracle. All rights reserved.
  34. Connected to:
  35. Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
  36. With the Partitioning, OLAP and Data Mining options

  37. SQL> show parameter control
  38. NAME TYPE VALUE
  39. ------------------------------------ ----------- ------------------------------
  40. control_file_record_keep_time integer 7
  41. control_files string +DATA/asmdb/controlfile/curren
  42.  t.260.886430449, +NEWDG/asmdb/controlfile/backup.257.888112073

  43. 新控制文件参数变成了前面rman恢复的控制文件的位置,如下:
  44. +DATA/asmdb/controlfile/current.260.886430449            ---这是旧的
  45. +NEWDG/asmdb/controlfile/backup.257.888112073        ---这是新的,我们需要被迁移到的位置,我们发现控制文件已经被迁移到了新的位置,接下来需要删除旧的控制文件

  46. ----3.删除旧的控制文件,因此将其从控制文件参数中剔除:
  47. SQL> alter system set control_files='+NEWDG/asmdb/controlfile/backup.257.888112073' scope=spfile;

  48. System altered.

  49. SQL> startup force ; 
  50. ORACLE instance started.

  51. Total System Global Area 608174080 bytes
  52. Fixed Size 1220844 bytes
  53. Variable Size 180358932 bytes
  54. Database Buffers 423624704 bytes
  55. Redo Buffers 2969600 bytes
  56. Database mounted.


  57. Database opened.
  58. SQL> show parameter control

  59. NAME TYPE VALUE
  60. ------------------------------------ ----------- ------------------------------
  61. control_file_record_keep_time integer 7
  62. control_files string +NEWDG/asmdb/controlfile/backup.257.888112073
  至此,控制文件被成功移动到+NEWDG磁盘上。

  三、将数据文件迁移到新的磁盘组
 
环境:旧数据文件放在+data磁盘组上,新的放在+newdg磁盘组上
 迁移方法:先在+newdg上做数据文件的镜像拷贝,再做switch告诉控制文件我们的数据文件在+newdg上,而非+data磁盘上
 迁移步骤:如下:


  1. ----1.拷贝数据文件
  2. [oracle@oracle4 dbs]$ rman target /
  3. Recovery Manager: Release 10.2.0.1.0 - Production on Wed Aug 19 01:51:13 2015
  4. Copyright (c) 1982, 2005, Oracle. All rights reserved.
  5. connected to target database: ASMDB (DBID=630629232)

  6. RMAN> backup as copy database format '+newdg';

  7. Starting backup at 19-AUG-15
  8. using target database control file instead of recovery catalog
  9. allocated channel: ORA_DISK_1
  10. channel ORA_DISK_1: sid=144 devtype=DISK
  11. channel ORA_DISK_1: starting datafile copy
  12. input datafile fno=00001 name=+DATA/asmdb/datafile/system.256.886430341
  13. output filename=+NEWDG/asmdb/datafile/system.258.888112285 tag=TAG20150819T015122 recid=6 stamp=888112417
  14. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:17
  15. channel ORA_DISK_1: starting datafile copy
  16. input datafile fno=00003 name=+DATA/asmdb/datafile/sysaux.257.886430341
  17. output filename=+NEWDG/asmdb/datafile/sysaux.259.888112421 tag=TAG20150819T015122 recid=7 stamp=888112494
  18. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:16
  19. channel ORA_DISK_1: starting datafile copy
  20. input datafile fno=00005 name=+DATA/asmdb/datafile/example.265.886430497
  21. output filename=+NEWDG/asmdb/datafile/example.260.888112497 tag=TAG20150819T015122 recid=8 stamp=888112539
  22. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:47
  23. channel ORA_DISK_1: starting datafile copy
  24. input datafile fno=00002 name=+DATA/asmdb/datafile/undotbs1.258.886430341
  25. output filename=+NEWDG/asmdb/datafile/undotbs1.261.888112547 tag=TAG20150819T015122 recid=9 stamp=888112564
  26. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:26
  27. channel ORA_DISK_1: starting datafile copy
  28. input datafile fno=00004 name=+DATA/asmdb/datafile/users.259.886430341
  29. output filename=+NEWDG/asmdb/datafile/users.262.888112571 tag=TAG20150819T015122 recid=10 stamp=888112572
  30. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
  31. channel ORA_DISK_1: starting datafile copy
  32. input datafile fno=00006 name=+DATA/asmdb/datafile/tbs1.267.886604335
  33. output filename=+NEWDG/asmdb/datafile/tbs1.263.888112573 tag=TAG20150819T015122 recid=11 stamp=888112580
  34. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
  35. channel ORA_DISK_1: starting datafile copy
  36. copying current control file
  37. output filename=+NEWDG/asmdb/controlfile/backup.264.888112589 tag=TAG20150819T015122 recid=12 stamp=888112601
  38. channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
  39. channel ORA_DISK_1: starting full datafile backupset
  40. channel ORA_DISK_1: specifying datafile(s) in backupset
  41. including current SPFILE in backupset
  42. channel ORA_DISK_1: starting piece 1 at 19-AUG-15
  43. channel ORA_DISK_1: finished piece 1 at 19-AUG-15
  44. piece handle=+NEWDG/asmdb/backupset/2015_08_19/nnsnf0_tag20150819t015122_0.265.888112607 tag=TAG20150819T015122 comment=NONE
  45. channel ORA_DISK_1: backup set complete, elapsed time: 00:00:02
  46. Finished backup at 19-AUG-15

  47. RMAN> list copy of database;

  48. Key File S Completion Time Ckp SCN Ckp Time Name
  49. ------- ---- - --------------- ---------- --------------- ----
  50. 6 1 A 19-AUG-15 559320 19-AUG-15 +NEWDG/asmdb/datafile/system.258.888112285
  51. 9 2 A 19-AUG-15 559375 19-AUG-15 +NEWDG/asmdb/datafile/undotbs1.261.888112547
  52. 7 3 A 19-AUG-15 559349 19-AUG-15 +NEWDG/asmdb/datafile/sysaux.259.888112421
  53. 10 4 A 19-AUG-15 559383 19-AUG-15 +NEWDG/asmdb/datafile/users.262.888112571
  54. 8 5 A 19-AUG-15 559366 19-AUG-15 +NEWDG/asmdb/datafile/example.260.888112497
  55. 11 6 A 19-AUG-15 559385 19-AUG-15 +NEWDG/asmdb/datafile/tbs1.263.888112573
  56. 3 6 A 01-AUG-15 514730 01-AUG-15 /home/oracle/tbs1.bak

  57. ----拷贝完成

  58. ----2.数据文件拷贝已经完成,我们是在数据库开着的情况下拷贝的,现在需要将数据库切换到新的文件,切换文件实际是告诉控制文件,数据文件被移到了新的位置。因此这个步骤只是改变控制文件的内容,会很快,但是需要将数据库置为mount状态

  59. RMAN> switch database to copy;

  60. RMAN-00571: ===========================================================
  61. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  62. RMAN-00571: ===========================================================
  63. RMAN-03002: failure of switch to copy command at 08/19/2015 02:00:35
  64. RMAN-06572: database is open and datafile 1 is not offline
  65. ----注意,需要启动数据库到mount状态执行switch

  66. RMAN> shutdown immediate;

  67. database closed
  68. database dismounted
  69. Oracle instance shut down

  70. RMAN> startup mount

  71. connected to target database (not started)
  72. Oracle instance started
  73. database mounted

  74. Total System Global Area 608174080 bytes

  75. Fixed Size 1220844 bytes
  76. Variable Size 180358932 bytes
  77. Database Buffers 423624704 bytes
  78. Redo Buffers 2969600 bytes
  79. RMAN> switch database to copy;

  80. datafile 1 switched to datafile copy "+NEWDG/asmdb/datafile/system.258.888112285"
  81. datafile 2 switched to datafile copy "+NEWDG/asmdb/datafile/undotbs1.261.888112547"
  82. datafile 3 switched to datafile copy "+NEWDG/asmdb/datafile/sysaux.259.888112421"
  83. datafile 4 switched to datafile copy "+NEWDG/asmdb/datafile/users.262.888112571"
  84. datafile 5 switched to datafile copy "+NEWDG/asmdb/datafile/example.260.888112497"
  85. datafile 6 switched to datafile copy "+NEWDG/asmdb/datafile/tbs1.263.888112573"

  86. ----switch成功,数据库使用新的数据文件
  87. RMAN> alter database open;

  88. RMAN-00571: ===========================================================
  89. RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
  90. RMAN-00571: ===========================================================
  91. RMAN-03002: failure of alter db command at 08/19/2015 02:01:54
  92. ORA-01113: file 1 needs media recovery
  93. ORA-01110: data file 1: '+NEWDG/asmdb/datafile/system.258.888112285'

  94. RMAN> recover database;

  95. Starting recover at 19-AUG-15
  96. allocated channel: ORA_DISK_1
  97. channel ORA_DISK_1: sid=157 devtype=DISK

  98. starting media recovery
  99. media recovery complete, elapsed time: 00:00:02

  100. Finished recover at 19-AUG-15

  101. RMAN> alter database open;

  102. database opened
  成功恢复并打开数据库。

   四、将日志文件、临时文件、参数文件等迁移到新的磁盘组
   控制文件和数据文件已经成功移动,日志文件、临时文件、参数文件需要移动
   迁移步骤:如下:
  1. 查看数据文件是否正常,并且修改参数使以后新的文件放在+newdg上

  1. SQL> select name from v$datafile;

  2. NAME
  3. --------------------------------------------------------------------------------
  4. +NEWDG/asmdb/datafile/system.258.888112285
  5. +NEWDG/asmdb/datafile/undotbs1.261.888112547
  6. +NEWDG/asmdb/datafile/sysaux.259.888112421
  7. +NEWDG/asmdb/datafile/users.262.888112571
  8. +NEWDG/asmdb/datafile/example.260.888112497
  9. +NEWDG/asmdb/datafile/tbs1.263.888112573

  10. 6 rows selected.
  11. ----查看数据文件是否正常

  12. SQL> show parameter create

  13. NAME TYPE VALUE
  14. ------------------------------------ ----------- ------------------------------
  15. create_bitmap_area_size integer 8388608
  16. create_stored_outlines string
  17. db_create_file_dest string +DATA
  18. db_create_online_log_dest_1 string
  19. db_create_online_log_dest_2 string
  20. db_create_online_log_dest_3 string
  21. db_create_online_log_dest_4 string
  22. db_create_online_log_dest_5 string
  23. SQL> alter system set db_create_file_dest ='+newdg';
  24. ----以后新的文件都生成在新的磁盘组
  25. System altered.
  26.  

  2. 临时文件:添加新的临时文件,删除旧的即可。

点击(此处)折叠或打开


  1. ----添加临时文件

  2. SQL> select name from v$tempfile;
  3. NAME
  4. --------------------------------------------------------------------------------
  5. +DATA/asmdb/tempfile/temp.264.886430485

  6. SQL> create temporary tablespace temp01 tempfile size 20M; 
  7. Tablespace created.
  8. SQL> SQL> select name from v$tempfile;

  9. NAME
  10. --------------------------------------------------------------------------------
  11. +DATA/asmdb/tempfile/temp.264.886430485
  12. +NEWDG/asmdb/tempfile/temp01.266.888113011

  13. SQL> drop tablespace temp including contents and datafiles;
  14. drop tablespace temp including contents and datafiles
  15. *
  16. ERROR at line 1:
  17. ORA-12906: cannot drop default temporary tablespace


  18. SQL> alter database default temporary tablespace temp01;
  19. ----旧的临时表空间是系统默认临时表空间,无法删除,修改后删除旧的
  20. Database altered.

  21. SQL> drop tablespace temp including contents and datafiles;
  22. Tablespace dropped.

  3. 日志文件:在新磁盘添加新成员,删除旧成员

  1. ----查看日志组状况
  2. SQL> select * from v$log;
  3.     GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
  4. ---------- ---------- ---------- ---------- ---------- --- ----------------
  5. FIRST_CHANGE# FIRST_TIM
  6. ------------- ---------
  7.          1 1 5 52428800 1 NO CURRENT
  8.        559083 19-AUG-15
  9.          2 1 3 52428800 1 YES INACTIVE
  10.        507040 01-AUG-15
  11.          3 1 4 52428800 1 YES INACTIVE
  12.        537744 19-AUG-15
  13. ----有三个组,给每个组添加新成员
  14. SQL> alter database add logfile member '+newdg' to group 1;
  15. Database altered.
  16. SQL> alter database add logfile member '+newdg' to group 2;
  17. Database altered.
  18. SQL> alter database add logfile member '+newdg' to group 3;
  19. Database altered.

  20. SQL> alter system switch logfile;
  21. System altered.
  22. SQL> /
  23. System altered.
  24. SQL> /
  25. System altered.
  26. SQL> /
  27. System altered.
  28. ----多次切换日志,至少一轮

  29. SQL> select member from v$logfile;
  30. MEMBER
  31. --------------------------------------------------------------------------------
  32. +DATA/asmdb/onlinelog/group_3.263.886430465
  33. +DATA/asmdb/onlinelog/group_2.262.886430459
  34. +DATA/asmdb/onlinelog/group_1.261.886430455
  35. +NEWDG/asmdb/onlinelog/group_1.267.888113109
  36. +NEWDG/asmdb/onlinelog/group_2.268.888113113
  37. +NEWDG/asmdb/onlinelog/group_3.269.888113115
  38. 6 rows selected.

  39. ----新成员添加成功

  1. SQL> alter database drop logfile member'+DATA/asmdb/onlinelog/group_3.263.886430465';
  2. Database altered.

  3. SQL> alter database drop logfile member'+DATA/asmdb/onlinelog/group_2.262.886430459';
  4.  alter database drop logfile member'+DATA/asmdb/onlinelog/group_2.262.886430459'
  5. *
  6. ERROR at line 1:
  7. ORA-01609: log 2 is the current log for thread 1 - cannot drop members
  8. ORA-00312: online log 2 thread 1: '+DATA/asmdb/onlinelog/group_2.262.886430459'
  9. ORA-00312: online log 2 thread 1:
  10. '+NEWDG/asmdb/onlinelog/group_2.268.888113113'
  11. ----正在使用的不能删除,先删除非current,切换日志后再删除该成员

  12. SQL> alter database drop logfile member'+DATA/asmdb/onlinelog/group_1.261.886430455';
  13. Database altered.

  14. SQL> alter system switch logfile;
  15. System altered.

  16. SQL> alter database drop logfile member'+DATA/asmdb/onlinelog/group_2.262.886430459';
  17. Database altered.

  18. SQL> select member from v$logfile;

  19. MEMBER
  20. --------------------------------------------------------------------------------
  21. +NEWDG/asmdb/onlinelog/group_1.267.888113109
  22. +NEWDG/asmdb/onlinelog/group_2.268.888113113
  23. +NEWDG/asmdb/onlinelog/group_3.269.888113115
  24. ----新成员添加成功,旧成员删除成功
  4. 参数文件:
  利用spfile生成pfile,pfile生成新的spfile,最后将pfile指向新的spfile

  1. ----查看参数文件
  2. SQL> show parameter spfile
  3. NAME TYPE VALUE
  4. ------------------------------------ ----------- ------------------------------
  5. spfile string +DATA/asmdb/spfileasmdb.ora

  6. SQL> create pfile from spfile;
  7. 创建pfile
  8. File created.

  9. SQL> shutdown immediate;
  10. Database closed.
  11. Database dismounted.
  12. ORACLE instance shut down.
  13. SQL> create spfile='+newdg/asmdb/spfileasmdb.ora' from pfile;
  14. ----利用pfile生成新的spfile
  15. File created.

  16. SQL> !
  17. [oracle@oracle4 dbs]$ vi initasmdb.ora 

  18. spfile='+newdg/asmdb/spfileasmdb.ora'
  19. ----pfile指向新的spfile

  20. SQL> startup force
  21. ORACLE instance started.

  22. Total System Global Area 608174080 bytes
  23. Fixed Size 1220844 bytes
  24. Variable Size 180358932 bytes
  25. Database Buffers 423624704 bytes
  26. Redo Buffers 2969600 bytes
  27. Database mounted.
  28. Database opened.
  29. SQL> 
  30. ----新参数文件添加成功,旧参数文件删除成功
  五、检查

  1. ----检查
  2. show parameter spfile;
  3. select name from v$controlfile;
  4. select name from v$datafile;
  5. select name from v$tempfile;
  6. select member from v$logfile;
  7. select filename from v$block_change_tracking;
  8. select name from v$flashback_database_logfile;

  9. SQL> show parameter pfile
  10. NAME TYPE VALUE
  11. ------------------------------------ ----------- ------------------------------
  12. spfile string +NEWDG/asmdb/spfileasmdb.ora

  13. SQL> select name from v$controlfile;
  14. NAME
  15. --------------------------------------------------------------------------------
  16. +NEWDG/asmdb/controlfile/backup.257.888112073

  17. SQL> select name from v$datafile;
  18. NAME
  19. --------------------------------------------------------------------------------
  20. +NEWDG/asmdb/datafile/system.258.888112285
  21. +NEWDG/asmdb/datafile/undotbs1.261.888112547
  22. +NEWDG/asmdb/datafile/sysaux.259.888112421
  23. +NEWDG/asmdb/datafile/users.262.888112571
  24. +NEWDG/asmdb/datafile/example.260.888112497
  25. +NEWDG/asmdb/datafile/tbs1.263.888112573

  26. 6 rows selected.

  27. SQL> select name from v$tempfile;
  28. NAME
  29. --------------------------------------------------------------------------------
  30. +NEWDG/asmdb/tempfile/temp01.266.888113011

  31. SQL> select member from v$logfile;
  32. MEMBER
  33. --------------------------------------------------------------------------------
  34. +NEWDG/asmdb/onlinelog/group_1.267.888113109
  35. +NEWDG/asmdb/onlinelog/group_2.268.888113113
  36. +NEWDG/asmdb/onlinelog/group_3.269.888113115

  37. SQL> select name from v$flashback_database_logfile;
  38. no rows selected

  39. SQL> select filename from v$block_change_tracking;
   搞定,收工。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25462274/viewspace-2146114/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/25462274/viewspace-2146114/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值