viernes, 1 de octubre de 2010

Migrar los asm disk de una SAN otra SAN sin downtime.

La idea en este caso es replicar los pasos a seguir cuando es necesario mover el o los diskgroup de una ASM a otra SAN sin Downtime. En mi caso no tengo un par de SAN para probar por lo que sera necesario recrear todo un ambiente de prueba, empesemos con la creacion de los raw devices:

Cree un par de raw devices de 1GB cada uno en un directorio llamado /u01/asmdisk

mkdir -p /u01
mkdir /u01/asmdisk

dd if=/dev/zero of=asm_disk1 bs=1024k count=1024
dd if=/dev/zero of=asm_disk2 bs=1024k count=1024

losetup /dev/loop1 asm_disk1
losetup /dev/loop2 asm_disk2

raw /dev/raw/raw4 /dev/loop1 <- desde el raw4 porque los primero 3 estan ocupados raw /dev/raw/raw5 /dev/loop2 chown oracle:oinstall /dev/raw/raw4 chown oracle:oinstall /dev/raw/raw5 Despues de crear los dispositivos cree una nueva base de datos llamada test sobre un diskgroup llamado DATA con el dbca y lo absolutamente lo minimo necesario.

nodo1-> export ORACLE_SID=+ASM
nodo1-> sqlplus "/as sysdba"
SQL> select name,TOTAL_MB,FREE_MB,STATE from V$asm_diskgroup;

NAME TOTAL_MB FREE_MB STATE
------------------------------ ---------- ---------- -----------
DATA 2048 15 CONNECTED

Teniendo la BD lista, cree un par mas de raw devices nuevamente de 1GB cada uno en un directorio diferente llamado /u02/virtual

mkdir -p /u02
mkdir /u02/virtual

dd if=/dev/zero of=asm_disk3 bs=1024k count=1024
dd if=/dev/zero of=asm_disk4 bs=1024k count=1024

losetup /dev/loop3 asm_disk3
losetup /dev/loop4 asm_disk4

raw /dev/raw/raw6 /dev/loop3
raw /dev/raw/raw7 /dev/loop4

chown oracle:oinstall /dev/raw/raw6
chown oracle:oinstall /dev/raw/raw7

La idea es simular la necesidad de mover de una SAN a otra usando dos directorios distintos /u01/asmdis y /u02/virtual.

Ahora es necesario ver si los nuevos dispositivos pueden ser usados por la BD

nodo1-> export ORACLE_SID=+ASM
nodo1-> sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on Fri Oct 1 09:46:05 2010

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


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options

SQL> select path from v$asm_disk;

PATH
--------------------------------------------------------------------------------
/dev/raw/raw1
/dev/raw/raw2
/dev/raw/raw3
/dev/raw/raw4
/dev/raw/raw5
/dev/raw/raw6
/dev/raw/raw7

7 rows selected

Con este query garantizamos que raw6 y raw7 pueden ser usados por la BD

Ahora podemos hiniciar la simulacion:

1) Backup de la BD.

2) Asignarle la nueva ruta a asm_disktring. En este caso en particular no es necesario alterar el parameter asm_disktring ya que el mismo "apunta" a /dev/raw por lo que todos los dispositivos que se creen podran ser "vistos" por la instancia de ASM.
En un ambiente real seria algo asi como:

SQL> alter system set asm_disktring = '/dev/emcpowerc*' , '/dev/emcpowerh*';

Donde: '/dev/emcpowerc*' discos actuales.
Donde: '/dev/emcpowerh*' nuevos discos.

3) Agreagar los nuevos asm disk al (o los) disk groups existentes.

SQL> alter diskgroup DATA add disk '/dev/raw/raw6', '/dev/raw/raw7';


Hecho esto es necesario verificar el proceso de rebalanceo del ASM.


SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
1 REBAL RUN 1 1 144 1021 132 6

SQL> select * from v$asm_operation;

INST_ID GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES
---------- ------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
1 1 REBAL RUN 1 1 144 1021 132 6

SQL> select * from v$asm_operation;

no rows selected

Una vez finalizado el rebalanceo tendremos:

SQL> select name,path from v$asm_disk;

NAME PATH
------------------------------ ----------------------------------------
DATA_0000 /dev/raw/raw4
DATA_0001 /dev/raw/raw5
DATA_0002 /dev/raw/raw6
DATA_0003 /dev/raw/raw7


El siguiente paso seria a eliminar los asm disk que ya no seran usados.

4) SQL> alter diskgroup DATA drop disk 'DATA_0000', 'DATA_0001';

Diskgroup altered.

Hecho esto, la eliminacion de los asm disk group no es inmediata. Debemos esperar a que el ASM rebalance de nuevo los asm disk:

select name,mount_status, header_status,state,library from v$asm_disk;disk;


NAME MOUNT_S HEADER_STATU STATE LIBRARY
------------------------------ ------- ------------ -------- -------------------------------------
DATA_0003 CACHED MEMBER NORMAL System
DATA_0002 CACHED MEMBER NORMAL System
DATA_0000 CACHED MEMBER DROPPING System
DATA_0001 CACHED MEMBER DROPPING System

8 rows selected.

SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
1 REBAL RUN 6 6 18 1009 349 2

SQL> select * from v$asm_operation;

GROUP_NUMBER OPERA STAT POWER ACTUAL SOFAR EST_WORK EST_RATE EST_MINUTES
------------ ----- ---- ---------- ---------- ---------- ---------- ---------- -----------
1 REBAL RUN 6 6 356 1016 295 2

SQL> select * from v$asm_operation;

no rows selected

SQL> select name,mount_status, header_status,state,library from v$asm_disk;

NAME MOUNT_S HEADER_STATU STATE LIBRARY
------------------------------ ------- ------------ -------- ------------------------
DATA_0003 CACHED MEMBER NORMAL System
DATA_0002 CACHED MEMBER NORMAL System

2 rows selected.

Una vez finalizado el proceso de rebalanceo podremos disponer de la "caja de almacenamiento" o los dispositivos de almacenamiento que estabamos usando incialmente.

No hay comentarios: