Buscar en este blog

viernes, 9 de julio de 2010

MANEJANDO EL TABLESPACE UNDO

UNDO


Es un método que le permite a toda Base de Datos Oracle mantener información disponible que podría ser utilizada - en caso de necesitarse - en operaciones para deshacer cambios realizados en la misma base de datos. Esta información se refiere a registros de transacciones antes de ser consolidadas (committed).

Los registros UNDO son utilizados para:

* Deshacer transacciones cuando es ejecutado el comando “rollback”.
* Recuperar la base de datos.
* Garantizar consistencia en las lecturas.
* Analizar data cercana a un punto determinado en el tiempo cuando es ejecutado Flashback Query.
* Recuperar data corrupta a nivel lógico cuando es usada alguna característica de Flashback.

A partir de la versión 9i de Oracle, se ha introducido un manejo automático del UNDO, el cual simplifica el manejo del espacio destinado para ello, así como la complejidad asociada con también el igual manejo de los Rollback Segments. Es por esta razón que Oracle recomienda fuertemente el uso del UNDO en vez del antiguo método de Rollback Segment.


PASOS PARA IMPLEMENTAR EL USO DEL UNDO

1.- UNDO_MANAGEMENT=AUTO
Parámetro de inicialización de la instancia Oracle que permite activar el manejo automático por parte del RDBMS del UNDO.

2.- Crear Tablespace UNDO
Un tablespace del tipo UNDO debe existir para que la base de datos pueda almacenar allí los registros propios del UNDO. Si no existe este tablespace, entonces la instancia usará el tablespace de SYSTEM para tal fin. En circunstancias normales esto no es recomendable, incluso su uso generaría el siguiente error a nivel del archivo ALERT_.log:

ORA-01552: cannot use system rollback segment for non-system tablespace '%s'.

La sentencia es similar a la utilizada para cualquier otro tablespace, sin embargo es necesario indicarle que será del tipo UNDO, por ejemplo:

CREATE UNDO TABLESPACE undotbs01
DATAFILE '/undotbs01.dbf' SIZE 2M
AUTOEXTEND ON MAXSIZE 8000M;

3.- UNDO_TABLESPACE = undotbs01
Parámetro de inicialización que permite indicarle a la instancia cual es el tablespace UNDO a usar. Esto es muy útil sobre todo cuando existen varios tablespace del tipo UNDO.


OPTIMIZANDO EL USO DEL ÁREA UNDO

UNDO_RETENTION

Normalmente la información encontrada en el área UNDO se pierde cuando nuevas transacciones sobre-escriben en esta área. Sin embargo, por razones de consistencia, consultas SQL muy largas podrían requerir información antigua contenida en el UNDO, para poder deshacer cambios y crear imágenes antiguas de bloques de datos. Igualmente la funcionalidad del Flashback también podría requerir esta información almacenada en el UNDO.

Entonación automática del Undo Retention

Oracle 10g ajusta automáticamente el undo retention mediante la recopilación de estadísticas de uso de la base de datos y estimar la capacidad necesaria para poder ejecutar satisfactoriamente las consultas SQL. De esta manera, la información después de un “commit” estará disponible por un período de tiempo determinado, el cual es indicado con el valor colocado para el UNDO_RETENTION.

Por otro lado, es posible habilitar el “RETENTION GUARANTEE” en el momento de crear el UNDO tablespace (CREATE UNDO TABLESPACE) o después de creado (ALTER TABLESPACE undotbs1 RETENTION GUARANTEE; ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE;) o cuando es creada la base de datos (CREATE DATABASE) con la finalidad de garantizar que la información no será sobre-escrita. Sin embargo, esta opción debe manejarse con especial cuidado, en vista de que puede causar que operaciones DML fallen si el espacio UNDO no es lo suficientemente grande, así como también forzar que ocurra con mayor frecuencia el famoso error: "snapshot too old".

Configurando el UNDO_RETENTION

Su valor por defecto es de 900 y la unidad de medida es en segundos (seg). Este valor determinar el umbral mínimo de retención. Hay dos formas de configurarlo:

Desde el pfile:
UNDO_RETENTION = 1800

Desde SQL*PLUS
ALTER SYSTEM SET UNDO_RETENTION = 2400;

El efecto de esta configuración es inmediata siempre y cuando exista suficiente espacio en el UNDO Tablespace, de lo contrario ésta acción podría provocar el error: "snapshot too old" cuando una consulta SQL sea ejecutada.


GESTIÓN DEL UNDO

Revisando las recomendaciones del UNDO Advisor

1. Abra el Enterprise Manager (Database Control) y ubíquese en Administración -> Gestión de Deshacer


En la figura se puede observar tres secciones claramente identificables:

* Valores de Retención de Deshacer
* Recomendaciones
* Actividad del Sistema y uso de Tablespace

Valores de Retención de Deshacer

Esta sección muestra las características generales en relación al uso del área UNDO, tales como:


* Retención de Deshace (UNDO_RETENTION)
* Garantía de Retención (RETENTION_GUARANTEE)
* Tablespace
* Tamaño
* Extensión automática

Recomendaciones


En esta segunda sección se muestra las recomendaciones más importantes generadas por el Advisor, encontradas en las etiquetas de: Posibles Problemas y Recomendaciones. Así mismo, es posible personalizar la ejecución del análisis mediante ajustar los valores en: Período de Tiempo de Análisis y Período de Tiempo de Análisis Seleccionado.

Actividad del Sistema y Uso de Tablespace


En esta última sección tenemos:

* Consulta en Ejecución más larga (minutos)
* Ratio Medio de Generación de Deshacer (KB/minuto)
* Ratio Máximo de Generación de Deshacer (KB/minuto)

Estas estadísticas son de gran utilidad así como la sección anterior, para ajustar el correcto valor del UNDO_RETENTION como también el tamaño adecuado del tablespace UNDO.

Graficos


Estos gráficos nos muestra de una manera sencilla el comportamiento del área UNDO de acuerdo a la carga de trabajo existente en la instancia Oracle. Como se puede observar hablan por si mismo.

Fuente:
Oracle® Database Administrator's Guide 10g Release 2 (10.2)
Cap 10 Managing the Undo Tablespace

No hay comentarios:

Publicar un comentario