domingo, 16 de junio de 2013

UNDO Oracle

SQL > alter system set UNDO_RETENTION=300 scope=memory;

Como liberar espacio del UNDO en Oracle

Esta es una duda recurrente en los foros y busquedas en Google, y no es para menos ya que el tablespace de UNDO cuando se tiene la base de datos en Automatic Undo Management tiende a llenarse frecuentemente con valores altos (digamos horas) del parámetro UNDO_RETENTION.
Esto sucede porque el mecanismo de no bloqueo a lectores-escritores de Oracle, va a guardar una copia de los datos durante el tiempo especificado en UNDO_RETENTION; sabemos que esta configuración se mantiene para el proceso de más larga duración, sin embargo los procesos de menor duración también verán reservada esa información más allá del periodo en que se ejecuten y dentro del limite establecido por UNDO_RETENTION.
Esta situación supone un "desperdicio" de UNDO y eventualmente puede presentarse que el tablespace se llena y se lanzar un error ORA-01555, o tenemos que agregar mas espacio.
Para reaccionar a esta situación lo que podemos hacer es bajar el valor del parámetro UNDO_RETENTION al rango de minutos, teniendo cuidado de no impactar procesos actualmente en ejecución cuya duración sea mayor a ese valor, pues seguramente se presentaran errores ORA-01555.
Con esta sentencia se puede modificar este parametro, recordando que el valor esta definido en segundos:
SQL > alter system set UNDO_RETENTION=300 scope=memory;
SQL > alter system set UNDO_RETENTION=300 scope=memory;
En cuestión de minutos podremos ver como el espacio libre se amplia en el tablespace de UNDO, recomendamos tener visibilidad sobre el alert.log para reaccionar en caso de presentarse errores ORA-01555, la acción correctiva es aumentar el UNDO_RETENTION.
Espero sea de ayuda este tip, Saludos!
Si el articulo no satisfizo tus dudas, visita nuestros foros
Vea el articulo relacionado ¿Quien esta usando tu espacio de UNDO?
¿Necesitas saber más sobre índices? estos links son de los mejores textos en Internet

No hay comentarios: