1、关闭节点1服务,挂载裸设备并创建ASM磁盘,由于是RAC,节点2服务并没有停止,所以业务能正常运行;

关闭节点1上的CRS服务

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移

查看服务状态,目前只有节点2正常运行,scanIP与vip迁移至节点2;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_02

裸设备映射,并重启udev,查看裸设备映射情况;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_03

创建ASM磁盘

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_04

查看创建好的ASM磁盘

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_05

启动节点1的CRS服务;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_06

查看CRS运行状态,此时CRS服务在两个节点同时运行,

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_07

2、使用同节点1同样的方法在节点2上将裸设备挂载映射并创建ASM磁盘,创建ASM磁盘时,节点2只需要scandisk即可,同样,操作过程中业务是不会中断的;

3、通过grid用户使用asmca命令创建磁盘组,利用CRS1,CRS2,CRS3创建磁盘组CRS,使用normal模式,利用CRS4创建磁盘组CRSTEMP,使用extern模式;(为什么要创建CRSTEMP磁盘组下面会说明)oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_08

4、迁移OCR磁盘;

通过ocrcheck命令查看ocr磁盘相关信息;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_09

可以发现OCR磁盘存储位置为磁盘组+DATA;

也可以通过/etc/oracle/ocr.loc文件查看

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_10

确认CRS运行健康;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_11

通过root用户使用ocrconfig -replace <current filename> -replacement <new filename>的命令迁移OCR磁盘;

(11gR1的命令为ocrconfig -replace ocr  <new filename>)

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_12

发现不能进行迁移,查找原因为OCR磁盘没有镜像ocrmirror,因此必须先创建mirror,这里就用到了CRSTEMP磁盘组;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_13

查看添加mirror后的OCR磁盘状态,可以发现CRSTEMP磁盘组现已为ocrmirror;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_14

再次迁移OCR磁盘;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_15

迁移成功,CRS磁盘组已替代DATA磁盘组成为OCR存储位置;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_16

 

5、迁移VOTE磁盘

查看vote磁盘当前状态,存储在+DATA磁盘组上;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_17

通过grid用户使用crsctl replace votedisk <new filename>命令迁移vote磁盘;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_18

迁移成功,查看vote磁盘已有3个路径;

oracle 11gR2 RAC存储迁移_oracle rac 存储迁移_19

(11gR1只能采用添加删除的方式进行迁移,

crsctl delete css votedisk /dev/raw/raw9

crsctl add css votedisk /dev/raw/raw5

当试图删除表决磁盘首个存放路径的时候会收到报错:

Failure8withClusterSynchronizationServiceswhile deleting voting disk.

添加force选项强制删除;

crsctl delete css votedisk /dev/raw/raw7 -force

 

6、使用ASM的REBALANCE技术来解决在线迁移数据。

查看磁盘组信息;

sqlplus / as sysasm

SQL*Plus: Release 11.2.0.2.0 Production on Fri Mar 14 15:38:19 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production
With the Real Application Clusters and Automatic Storage Management options

SQL> col name for a10
SQL> set line 120

SQL> desc gv$asm_diskgroup;
Name           Null?    Type
----------------------------------------------------------------- -------- --------------------------------------------
INST_ID            NUMBER
GROUP_NUMBER            NUMBER
NAME             VARCHAR2(30)
SECTOR_SIZE            NUMBER
BLOCK_SIZE            NUMBER
ALLOCATION_UNIT_SIZE           NUMBER
STATE             VARCHAR2(11)
TYPE             VARCHAR2(6)
TOTAL_MB            NUMBER
FREE_MB            NUMBER
HOT_USED_MB            NUMBER
COLD_USED_MB            NUMBER
REQUIRED_MIRROR_FREE_MB          NUMBER
USABLE_FILE_MB            NUMBER
OFFLINE_DISKS            NUMBER
COMPATIBILITY            VARCHAR2(60)
DATABASE_COMPATIBILITY           VARCHAR2(60)
VOTING_FILES            VARCHAR2(1)

SQL> select name,allocation_unit_size,state,total_mb,free_mb from gv$asm_diskgroup;

NAME    ALLOCATION_UNIT_SIZE STATE       TOTAL_MB   FREE_MB
---------- -------------------- ----------- ---------- ----------
DATA   1048576 MOUNTED   51199     48915
CRS   1048576 MOUNTED    3057      2133
CRSTEMP   1048576 MOUNTED    1019       656
DATA   1048576 MOUNTED   51199     48915
CRS   1048576 MOUNTED    3057      2133
CRSTEMP   1048576 MOUNTED    1019       656

6 rows selected.

SQL> select failgroup,name from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'DATA');

FAILGROUP         NAME
------------------------------ ----------
DATA_0000         DATA_0000

往该磁盘组里添加一个新创建的ASM磁盘,指定REBALANCE的速度

SQL> alter diskgroup DATA add disk '/dev/raw/raw2' name newdata rebalance power 10;

Diskgroup altered.

SQL> select name,allocation_unit_size,state,total_mb,free_mb from gv$asm_diskgroup;

NAME    ALLOCATION_UNIT_SIZE STATE       TOTAL_MB   FREE_MB
---------- -------------------- ----------- ---------- ----------
CRSTEMP   1048576 MOUNTED    1019       656
CRS   1048576 MOUNTED    3057      2133
DATA   1048576 MOUNTED  102398    100112
CRSTEMP   1048576 MOUNTED    1019       656
CRS   1048576 MOUNTED    3057      2133
DATA   1048576 MOUNTED  102398    100112

6 rows selected.

SQL> select failgroup,name,path from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'DATA');

FAILGROUP         NAME
------------------------------ ----------
NEWDATA          NEWDATA
DATA_0000         DATA_0000

发现磁盘组DATA容量改变;

REBALANCE过程可以通过v$asm_operation视图来查看:

SQL>set line 150

SQL> col ERROR_CODE for a5

SQL>select*from v$asm_operation;

REBALANCE完成后记录将消失;

 

删除旧的ASM磁盘;

 

QL> select failgroup,name,path from v$asm_disk where group_number=(select group_number from v$asm_diskgroup where name = 'DATA');

FAILGROUP      NAME    PATH
-------------------- -------------------- --------------------
NEWDATA       NEWDATA    /dev/raw/raw2
DATA_0000      DATA_0000    /dev/raw/raw1

SQL> alter diskgroup DATA drop disk DATA_0000 rebalance power 5;

Diskgroup altered.

SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA STAT      POWER     ACTUAL    SOFAR   EST_WORK   EST_RATE EST_MINUTES
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
ERROR_CODE
--------------------------------------------
   3 REBAL RUN   5     5      660       1148   2664   0

SQL> select * from v$asm_operation;

no rows selected

 

这样数据全部迁移至新存储;

7、同样使用滚动方式卸载旧磁盘,停止节点1服务,删除ASM磁盘及裸设备映射,启动节点1的CRS服务,停止节点2服务,scan ASM磁盘,删除裸设备映射,启动节点2服务。