ORA-01567 | Redo Log Files Concepts

A multithreaded process with two threads execu...
Image via Wikipedia

REDO LOGS , GROUPS , FILES

Los REDO LOGS son una pieza importante y crucial en la estructura de la base de datos ya que en ella se almacenan cada una de las operaciones que se realizan en la misma.

Estos consisten en al “menos dos” o más grupos. Cada instancia esta asociada a un grupo de REDO LOG que protege la base de datos en caso de que la instancia falle.

Un dato importante cuando trabajamos con RAC se tiene multiples instancias que se correspoponden con una unica base, como trabajan estos REDOLOGS ?

Cada instancia de Base de Datos tiene asignado su propio grupo de REDOLOG , conocidos como REDO THREAD .

De manera que en un escenario donde trabajamos con Real Application Cluster podemos decir :

Cada instancia puede accesar de manera concurrente a una instancia simple, que ellas mismas tienen su propio THREAD de REDOLOGS.

Que es lo que se esta escribiendo en nuestros REDOLOGS ?

Un REDO LOG de una base de datos esta compuesto por dos o mas REDO LOG FILES.

Nuestra base de datos requiere un minimo de dos ARCHIVOS REDOLOG para garantizar que al menos uno este disponible para escribir mientras el otro esta siendo archivado.

A que me refiero ?

Cuando trabajamos con la base en modo ARCHIVELOG, cada transacción de la base se escribe en un REDO LOG FILE.
Al llenarse este último pasa al REDO LOG FILE que este disponible, y cuando este se llena retorna al primero o al que se encuentre disponible de una manera circular. De esto se encarga el proceso LGWR.

Para que un REDO LOG FILE quede disponible para ser reutilizado dependera de que el ARCHIVING este habilitado.

Si la base esta en modo :

  • ARCHIVELOG : Al llenarse un REDOLOG FILE estara disponible para ser utilizado por el proceso LGWR despues que los cambios hayan sido escrito y grabados en los DATAFILES y se guarden en el ARCHIVE REDO LOG .
  • NOARCHIVELOG : Al llenarse un REDOLOG FILE estara disponible despues de que los cambios hayan sido escritos y grabados en los DATAFILES.

Intentamos eliminar un Grupo en la Base

Escenario

  • Base en RAC (Real Application Cluster).
  • Base en modo ARCHIVELOG.
  • Solo dos grupos de Redo logs por instancia.

Vemos los Grupos Disponibles.

SQL> set line 150
SQL> select * from v$log ;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS	    FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
	 1	    1	    1844  536870912	     2 YES INACTIVE	       1772703359 06-JUN-11
	 2	    1	    1845  536870912	     2 NO  CURRENT	       1773042122 07-JUN-11
	 3	    2	    1450  536870912	     2 YES INACTIVE	       1772703354 06-JUN-11
	 4	    2	    1451  536870912	     2 NO  CURRENT	       1773042144 07-JUN-11
	 5	    3	     894  536870912	     2 NO  CURRENT	       1773042119 07-JUN-11
	 6	    3	     893  536870912	     2 YES INACTIVE	       1772703357 06-JUN-11
	 7	    4	     878  536870912	     2 YES INACTIVE	       1772703351 06-JUN-11
	 8	    4	     879  536870912	     2 NO  CURRENT	       1773042116 07-JUN-118 rows selected.
SQL>

Intentamos eliminar un grupo miembro de dos.

SQL> ALTER DATABASE DROP LOGFILE GROUP 1 ;
ALTER DATABASE DROP LOGFILE GROUP 1
*
ERROR at line 1:
ORA-01567: dropping log 1 would leave less than 2 log filesfor instance ESBCO1 (thread 1)
ORA-00312: online log 1 thread 1: '+ESB_DG1/ESB/onlinelog/group_1.273.752686587'
ORA-00312: online log 1 thread 1: '+ESB_DG5/ESB/onlinelog/group_1.341.752686591'
SQL>

Como podemos observar no se pudo eliminar por precisamos al menos dos grupos !

Espero les haya servido el articulo junto con la prueba de concepto.

Até mais !