jueves, 2 de julio de 2009

Archivos redo log

Los archivos de redo log registran cambios a la base de datos como resultado de transacciones o acciones internas del servidor Oracle.

Los archivos de redo log nos protegen la base de datos de la pérdida de integridad en casos de fallos causados por suministro eléctrico, errores en discos duros, y demás causas.

Es recomendable que los archivos de redo log sean multiplexados para asegurar que la información almacenada en ellos no se pierda en caso de un fallo en disco.

Consiste en grupos de archivos de redo log y cada grupo esta integrado por un archivo de redo log y sus copias multiplexadas. Se dice que cada copia idéntica es miembro de un grupo, y cada grupo es identificado por un número.

El proceso de escritura en logs (LGWR) escribe los registros de redo del buffer de redo log a todos los miembros del grupo actual de redo logs, hasta que el archivo se llena o se solicita una operación de cambio de archivo de log. Entonces, cambia el grupo activo y comienza a escribir en los archivos del siguiente grupo. Los grupos de redo log son usados de una forma circular.

Cómo obtenemos la info de los grupos de redo log de nuestra BD?

Consultando estas dos vistas, tenemos los datos que nos pueden interesar de los redo log files, ubicación, estado, tamaño, etc.
select * from v$logfile;
select * from v$log;

Cómo cambiamos el redo log group activo?
alter system switch logfile;

Cómo eliminamos un redo log group? (en este caso en particular en group 1)
alter database drop logfile group 1;

Ahora bien, cómo haríamos para agregar un nuevo redo log group? (agregamos el group 1, conteniendo un redo log file de 200mb)
alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01.log') size 200m reuse;

Y si quisieramos agregar un redo log group redundante con dos redo log files members?
(agregamos el group 1, con dos redo log files en distintas ubicaciones con un tamaño de 200mb cada uno)
alter database add logfile group 1 ('/u01/app/oracle/oradata/orcl/redo01.log','/u02/app/oracle/oradata/orcl/redo01b.log') size 200m reuse;

14 comentarios:

  1. Muy buen aporte!!!!!
    Lastima que sos de Racing

    ResponderEliminar
  2. Hola, si me pueden ayudar al siguiente asunto, cual sería el promedio para que se complete un ciclo de redo logs, actualmente se tienen 3 redologs, aproximadamente con un tamaño de 75M

    rmurillo@coopevictoria.com

    ResponderEliminar
    Respuestas
    1. Estimado... casi imposible de predecir... depende del ambiente en el que estés trabajando.
      Recuerda que cada cambio en tu BD por ej.: INSERT, UPDATE, DELETE, CREATE, ALTER, o DROP... está afectando a tus redo logs. Cuanta más actividad, más cambios para los redo logs. Chequea las vistas v$log, v$logfile para ir teniendo una idea de cada cuanto se cambiando de log en log... y de ahí cada cuanto se completa un ciclo en tu BD.

      Eliminar
  3. Depende de la BD en sí, cuántas transacciones por minuto, el volumen de datos... sinceramente no te puedo dar una respuesta adecuada, hay que ver el ambiente en el que estás traajando... Gracias por tu pregunta!

    ResponderEliminar
  4. quisiera saber si la ruta q tu pones aqui('/u01/app/oracle/oradata/orcl/redo01.log','/u02/app/oracle/oradata/orcl/redo01b.log') es estandar para todas las bd?

    ResponderEliminar
  5. No, no es estandar, depende de cada instalación... del HOME que elijas para instalar Oracle, del nombre de la instancia... etc.
    p. ej. en este caso el nombre de la instancia es ORCL...

    ResponderEliminar
  6. Buenas tardes, quisiera saber si los archivos redo log se actualizan (ultima fecha de modificación), ya que en los que se tiene en nuestra BD no esta sucediendo eso. Que puede estar ocurriendo. Gracias por su respuesta.

    ResponderEliminar
  7. Como determinar el tamano optimo de un redo log??

    ResponderEliminar
    Respuestas
    1. Hola! Te puede brindar esa info la columna OPTIMAL_LOGFILE_SIZE de la vista V$INSTANCE_RECOVERY. Suerte!

      Eliminar
  8. que sucede cuando esta columna OPTIMAL_LOGFILE_SIZE esta vacia.

    ResponderEliminar
  9. Disculpe amigo he buscado sobre los archivos de Logs en Oracle, y no he encontrado. Lo que busco es digamos, si por ejemplo yo corro un script p.ej. @INSERTS.sql y dentro tuviera muchas instrucciones INSERT, en qué archivo Oracle guardaría todos los INSERTS que no pudieron realizarse por errores, o cómo podría hacer para indicarle a Oracle que esto lo guarde en determinado archivo, muchas gracias! :) un saludo,

    ResponderEliminar
  10. crea un spool dentro del archivo @instert.sql asi te guardara el detalle de todo lo ejecutado.

    ResponderEliminar
  11. Buenas, como puedo saber quien hizo un truncate table en la base de datos Oracle?

    ResponderEliminar