jueves, 7 de junio de 2012

Oracle ASM Redo log

Hola a todos!

Cuando almacenamos los datos de nuestra base de datos en ASM, todos los datos se almacenan en este sistema de almacenamiento, datafiles, controlfiles y redologs. Ahora debemos saber donde los está alamacenando, puesto que los archivos están ocultos.


Por defecto en una instancia con los datos almacenados en ASM, almacena todo lo referente a la base de datos en el grupo ASM especificado en el siguiente parámetro, tanto datos como redo:

SQL> show parameter db_create_file_dest

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
db_create_file_dest                  string      +EQCAS_DATA


Para ubicar el redo en un grupo diferente al destinado para almacenar datos, debemos setear un parámetro para el redo (ahora veremos cual es), borrar los grupos de redo actuales y crear unos nuevos en el grupo de ASM destinado a tal fin.

Primero configuramos el parámetro ‘db_create_online_log_dest_1’.

SQL> show parameter online

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
db_create_online_log_dest_1          string    
db_create_online_log_dest_2          string
db_create_online_log_dest_3          string
db_create_online_log_dest_4          string
db_create_online_log_dest_5          string

SQL> alter system set db_create_online_log_dest_1=’ +EQCAS_REDO’ scope=both;



NAME                                 TYPE        VALUE
------------------------------------ ----------- ----------------------------
db_create_online_log_dest_1          string      +EQCAS_REDO

A partir de este momento, todos los grupos nuevos de redo que se creen lo harán en el grupo de ASM especificado en el parámetro ‘db_create_online_log_dest_1’.
Vamos a ver los grupos de redo que tenemos actualmente.


SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         3               100 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_3.258.783870839
         3               100 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_3.259.783870871
         2                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_2.264.783868959
         2                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_2.265.783868959
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.256.783870683
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.257.783870769

Como se puede ver están creados en el grupo de ASM ‘+EQCAS_DATA’ que es el valor del parámetro db_create_file_dest. Vamos a borrar los grupos en estado INACTIVE y a crear grupos nuevos.


SQL> alter database drop logfile group 3;

Base de datos modificada.

SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         2                50 ACTIVE           +EQCAS_DATA/eqcas/onlinelog/group_2.264.783868959
         2                50 ACTIVE           +EQCAS_DATA/eqcas/onlinelog/group_2.265.783868959
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.256.783870683
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.257.783870769

SQL> alter database add logfile group 3;

Base de datos modificada.

SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.258.783870839
         2                50 ACTIVE           +EQCAS_DATA/eqcas/onlinelog/group_2.264.783868959
         2                50 ACTIVE           +EQCAS_DATA/eqcas/onlinelog/group_2.265.783868959
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.256.783870683
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.257.783870769

Al crear el grupo de Nuevo lo ha creado con un único miembro, es totalmente recomendable crear los grupos de redo con al menos dos miembros, por ello lo vamos a añadir.

SQL> alter database add logfile member '+EQCAS_REDO' to group 3;

SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.258.783870839
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.259.783870871
         2                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_2.264.783868959
         2                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_2.265.783868959
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.256.783870683
         1                50 CURRENT          +EQCAS_DATA/eqcas/onlinelog/group_1.257.783870769

Repetimos el proceso para los otros grupos.

SQL> alter database drop logfile group 2;

Base de datos modificada.

SQL> alter database add logfile group 2;

Base de datos modificada.

SQL> alter database add logfile member '+EQCAS_REDO' to group 2;

Base de datos modificada.

Ahora falta por borrar el grupo que está siendo usado actualmente por la base de datos, para poder eliminarlo tenemos que ejecutar “alter system switch logfile”, para forzar el cambio de grupo de archivado, liberarlo y poder borrarlo.

SQL> alter system switch logfile;

SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.258.783870839
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.259.783870871
         2               100 CURRENT          +EQCAS_REDO/eqcas/onlinelog/group_2.264.783868959
         2               100 CURRENT          +EQCAS_REDO/eqcas/onlinelog/group_2.265.783868959
         1                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_1.256.783870683
         1                50 INACTIVE         +EQCAS_DATA/eqcas/onlinelog/group_1.257.783870769

SQL> alter database drop logfile group 1;

Base de datos modificada.

SQL> alter database add logfile group 1;

Base de datos modificada.

SQL> alter database add logfile member '+EQCAS_REDO' to group 1;

Base de datos modificada.

SQL> select a.GROUP#,a.BYTES/1024/1024,a.STATUS,b.MEMBER
2 from v$log a,v$logfile b
3 where a.GROUP#=b.GROUP#;

    GROUP# A.BYTES/1024/1024 STATUS           MEMBER
---------- ----------------- ---------------- -------------------------------------------------------
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.258.783870839
         3               100 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_3.259.783870871
         2               100 CURRENT          +EQCAS_REDO/eqcas/onlinelog/group_2.264.783868959
         2               100 CURRENT          +EQCAS_REDO/eqcas/onlinelog/group_2.265.783868959
         1                50 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_1.256.783870683
         1                50 INACTIVE         +EQCAS_REDO/eqcas/onlinelog/group_1.257.783870769








No hay comentarios:

Publicar un comentario