Migrate DATA ASM Diskgroup To Another Storage

  1. If necessary, modify asm_diskstring.

    alter system set asm_diskstring = '/dev/emcpowerc*','/dev/emcpowerh*' scope=both;

    select name,path from v$asm_disk;
  2. Query the fail groups.

    col path for a20
    col state for a10
    col failgroup for a15
    col name for a15
    select dg.name,dg.state,dg.type,d.disk_number,d.path,d.mount_status,d.failgroup,d.name,d.state
    from v$asm_diskgroup dg, v$asm_disk d
    where dg.group_number=d.group_number and dg.name='DATA'
    order by dg.name,d.disk_number;

    NAME STATE TYPE DISK_NUMBER PATH MOUNT_S FAILGROUP NAME STATE
    --------------- ---------- ------ ----------- -------------------- ------- --------------- --------------- ----------
    DATA MOUNTED EXTERN 0 ORCL:DATA1 CACHED DATA1 DATA1 NORMAL
    DATA MOUNTED EXTERN 1 ORCL:DATA2 CACHED DATA2 DATA2 NORMAL
    DATA MOUNTED EXTERN 2 ORCL:DATA3 CACHED DATA3 DATA3 NORMAL
  3. Create new disks.

    ~]# oracleasm createdisk NEW_DATA1 /dev/sdl1
    Writing disk header: done
    Instantiating disk: done
    ~]# oracleasm createdisk NEW_DATA2 /dev/sdm1
    Writing disk header: done
    Instantiating disk: done
    ~]# oracleasm createdisk NEW_DATA3 /dev/sdn1
    Writing disk header: done
    Instantiating disk: done

    ~]# oracleasm scandisks
    Reloading disk partitions: done
    Cleaning any stale ASM disks...
    Scanning system for ASM disks...
    Instantiating disk "NEW_DATA1"
    Instantiating disk "NEW_DATA2"
    Instantiating disk "NEW_DATA3"
  4. From node1 add each disk to a fail group.

    sqlplus " / as sysasm"

    -- external type not need to specify a fail group
    ALTER DISKGROUP DATA ADD DISK
    'ORCL:NEW_DATA1',
    'ORCL:NEW_DATA2',
    'ORCL:NEW_DATA3'
    REBALANCE POWER 8;

    -- chanage rebalance power. compatiable.asm >= 11.2.0.2, power range is 0 to 1024; if < 11.2.0.2, power range is 0 to 11.
    alter diskgroup DATA rebalance power 8;
  5. Check gv$asm_operation till it returns no rows.

    SQL> select * from gv$asm_operation;
    no rows selected

    SQL> col path for a20
    col state for a10
    col failgroup for a15
    col name for a15
    select dg.name,dg.state,dg.type,d.disk_number,d.path,d.mount_status,d.failgroup,d.name,d.state
    from v$asm_diskgroup dg, v$asm_disk d
    where dg.group_number=d.group_number and dg.name='DATA'
    order by dg.name,d.disk_number;

    NAME STATE TYPE DISK_NUMBER PATH MOUNT_S FAILGROUP NAME STATE
    --------------- ---------- ------ ----------- -------------------- ------- --------------- --------------- ----------
    DATA MOUNTED EXTERN 0 ORCL:DATA1 CACHED DATA1 DATA1 NORMAL
    DATA MOUNTED EXTERN 1 ORCL:DATA2 CACHED DATA2 DATA2 NORMAL
    DATA MOUNTED EXTERN 2 ORCL:DATA3 CACHED DATA3 DATA3 NORMAL
    DATA MOUNTED EXTERN 3 ORCL:NEW_DATA1 CACHED NEW_DATA1 NEW_DATA1 NORMAL
    DATA MOUNTED EXTERN 4 ORCL:NEW_DATA2 CACHED NEW_DATA2 NEW_DATA2 NORMAL
    DATA MOUNTED EXTERN 5 ORCL:NEW_DATA3 CACHED NEW_DATA3 NEW_DATA3 NORMAL
  6. Drop old disks.

    ALTER DISKGROUP DATA DROP DISK
    'DATA1',
    'DATA2',
    'DATA3'
    REBALANCE POWER 8;
  7. Check gv$asm_operation till it returns no rows.

    SQL> select * from gv$asm_operation;
    no rows selected

    SQL> col path for a20
    col state for a10
    col failgroup for a15
    col name for a15
    select dg.name,dg.state,dg.type,d.disk_number,d.path,d.mount_status,d.failgroup,d.name,d.state
    from v$asm_diskgroup dg, v$asm_disk d
    where dg.group_number=d.group_number and dg.name='DATA'
    order by dg.name,d.disk_number;

    NAME STATE TYPE DISK_NUMBER PATH MOUNT_S FAILGROUP NAME STATE
    --------------- ---------- ------ ----------- -------------------- ------- --------------- --------------- ----------
    DATA MOUNTED EXTERN 3 ORCL:NEW_DATA1 CACHED NEW_DATA1 NEW_DATA1 NORMAL
    DATA MOUNTED EXTERN 4 ORCL:NEW_DATA2 CACHED NEW_DATA2 NEW_DATA2 NORMAL
    DATA MOUNTED EXTERN 5 ORCL:NEW_DATA3 CACHED NEW_DATA3 NEW_DATA3 NORMAL
  8. Note: add and drop disks in one command, only one rebalancing operation will occur.

    ALTER DISKGROUP DATA ADD DISK
    'ORCL:NEW_DATA1',
    'ORCL:NEW_DATA2',
    'ORCL:NEW_DATA3'
    DROP DISK
    'DATA1',
    'DATA2',
    'DATA3'
    REBALANCE POWER 8;
  9. Delete old disks.

    ~]# oracleasm deletedisk DATA1
    Clearing disk header: done
    Dropping disk: done
    ~]# oracleasm deletedisk DATA2
    Clearing disk header: done
    Dropping disk: done
    ~]# oracleasm deletedisk DATA3
    Clearing disk header: done
    Dropping disk: done

    ~]# oracleasm scandisks
    Reloading disk partitions: done
    Cleaning any stale ASM disks...
    Cleaning disk "DATA1"
    Cleaning disk "DATA2"
    Cleaning disk "DATA3"
    Scanning system for ASM disks...