jueves, 7 de junio de 2012

Oracle ASM disk groups

Hola!

En esta nueva entrada vamos a ver como crear grupos de disco ASM, y como hacer modificaciones sobre ellos, como añadir y quitar discos.

Para empezar, que es ASM? Por hacer un resumen muy muy rápido ASM permite hacer grupos de disco con distintos niveles de protección, para así garantizar que la información va a estar disponible. Además ASM distribuye cada uno de los datafiles entre todos sus discos, mejorando notablemente el rendimiento de I/O.
Existen tres niveles de protección:
- External redundancy: No tiene protección, este nivel se usa cuando tenemos un hardware/software previo que nos garantiza la redundancia. Actúa como un RAID 0
- Normal redundancy: Hace un espejo de cada disco, two-way mirroring, de cada datafile existe una copia, por lo tanto si se pierde un disco los datos siguen intactos.
- High redundancy: Three-way mirroring, en total existen tres copias de cada datafile, se pueden perder hasta dos discos.

Consultar los grupos de ASM existentes.

En primer lugar vamos a ver como poder consultar los grupos de ASM que tenemos en nuestra base de datos ASM. Así conoceremos que disco pertenecen a cada grupo, por si tenemos que operar sobre ellos.


-bash-3.00$ export ORACLE_SID=+ASM
-bash-3.00$ sqlplus / as sysasm
SQL> set lines 160 pages 200
SQL> column NAME format a20
SQL> column PATH format a50
SQL> select a.GROUP_NUMBER,a.NAME,a.TOTAL_MB,b.HEADER_STATUS,b.NAME,b.PATH
           from v$asm_diskgroup a,v$asm_disk b
           where a.GROUP_NUMBER=b.GROUP_NUMBER;

GROUP_NUMBER NAME                   TOTAL_MB HEADER_STATU NAME                 PATH
------------ -------------------- ---------- ------------ -------------------- --------------------------------------------------
           1  GROUP1_DATA             307176 MEMBER        GROUP1_DATA_0000   /dev/rdsk/c3t600A0B800008263C000003E94FB0C541d0s6
           1  GROUP1_DATA             307176 MEMBER        GROUP1_DATA_0001   /dev/rdsk/c3t600A0B8000127830000050344FB0A502d0s6
           1  GROUP1_DATA             307176 MEMBER        GROUP1_DATA_0002   /dev/rdsk/c3t600A0B8000113240000039844FB0A83Bd0s6



Como crear grupos de ASM.

En el siguiente ejemplo vamos a crear diferentes grupos de ASM.
Para empezar un grupo con external redundancy:

-bash-3.00$ export ORACLE_SID=+ASM
-bash-3.00$ sqlplus / as sysasm

SQL> create diskgroup GROUP1_DATA external redundancy
disk ‘/dev/rdsk/c3t600A0B800008263C000003E94FB0C541d0s6’,
disk ‘/dev/rdsk/c3t600A0B8000127830000050344FB0A502d0s6’;

Como modificar grupos de ASM.



Podemos agregar, eliminar y hacer otro tipo de operaciones con un grupo de discos ASM, en el ejemplo veremos como quitar un disco y como agregarlo.
Al eliminar un disco de un grupo de ASM, los datos que se encuentren en ese disco se moverán a otro disco del grupo, por este motivo tenemos que asegurarnos que al eliminar un disco los otros discos pueden soportar la capacidad del que estamos eliminando.
Una vez se ha efectuado el sql para la eliminación del disco en el grupo, debemos esperar hasta eliminar físicamente el disco, hasta que en la consulta anterior aparezca en la columna HEADER_STATUS el disco en estado ‘FORMER’. Esto sucede porque tarda un tiempo hasta que los datos de ese disco se transfieren a otro disco en el grupo.




Podemos comprobar el estado de las operaciones pendientes de ASM con la siguiente consulta:

SQL> select * from v$asm_operation;


Para agregar un disco a un grupo de ASM:


-bash-3.00$ export ORACLE_SID=+ASM
-bash-3.00$ sqlplus / as sysasm
SQL> alter diskgroup GROUP1_DATA
add disk ‘/dev/rdsk/c3t600A0B8000113240000039844FB0A83Bd0s6’;

Para borrar un disco de un grupo de ASM:


-bash-3.00$ export ORACLE_SID=+ASM
-bash-3.00$ sqlplus / as sysasm

SQL> alter diskgroup GROUP1_DATA drop disk GROUP1_DATA_0001;

Los grupos de disco ASM, se pueden montar y desmontar, estas operaciones pueden ser necesarias si un grupo no arranca automáticamente después de un reinicio de ASM.


Montado de grupo.

SQL> select GROUP_NUMBER,NAME,STATE from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE
------------ ------------------------------ -----------
           1 GROUP1_DATA                  MOUNTED
           2 GROUP2_DATA                  DISMOUNTED
         
SQL> alter diskgroup GROUP2_DATA mount;

SQL> select GROUP_NUMBER,NAME,STATE from v$asm_diskgroup;

GROUP_NUMBER NAME                           STATE
------------ ------------------------------ -----------
           1 GROUP1_DATA                  MOUNTED
           2 GROUP2_DATA                  MOUNTED


Eso es todo amigos!!!


No hay comentarios:

Publicar un comentario