¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí

Gestión de la información de anulación

Descripción general

1. Definiciones

Cuando hay modificaciones de datos en curso, Oracle genera la información de anulación que se usará, si es necesario, para anular las modificaciones. Esencialmente, esta información de anulación contiene el valor anterior de los datos modificados por la transacción ("imagen antes", "before image" en inglés) y la identificación de los bloques afectados.

La información de anulación se almacena en los segmentos de anulación.

Principalmente se utiliza para:

  • la anulación de la transacción (ROLLBACK);

  • el modo lectura coherente;

  • algunas funcionalidades de flashback;

  • la restauración de la base de datos (RECOVER).

El segmento de anulación es una estructura que Oracle utiliza para almacenar temporalmente la versión anterior de los datos que se están modificando en una transacción. Si la transacción se valida (COMMIT), se libera el espacio ocupado; si la transacción se anula (ROLLBACK), la versión anterior de los datos se restaura en lugar de la nueva.

Oracle utiliza los segmentos de anulación para el mecanismo de modo lectura coherente. La noción de modo lectura coherente corresponde al hecho de que los datos que se están modificando en una transacción no se vean por los demás usuarios mientras no se valide la transacción; los demás usuarios ven los datos tal y como eran antes del inicio de la transacción, en un estado coherente frente a las transacciones y reglas de gestión. Si un usuario pregunta a una tabla que se está actualizado en otra transacción, Oracle utiliza el valor anterior de los datos, almacenado en los segmentos de anulación, para responder a la consulta.

Los segmentos de anulación también se utilizan por algunas funcionalidades de flashback que permiten leer (y recuperar) los datos tal y como eran en un instante determinado, en el pasado (consulte el capítulo Copia de seguridad y restauración).

Para terminar, los segmentos de anulación se utilizan durante una restauración de la base de datos para anular las modificaciones no validadas que ya se hayan escrito en los archivos de datos (consulte los conceptos fundamentales en el capítulo Copia de seguridad y restauración).

Las necesidades respecto a información...

Puesta en marcha de la gestión automática

1. Principio

Para implementar la gestión automática de la información de anulación es necesario:

  • asignar valor al argumento UNDO_MANAGEMENT a AUTO y, eventualmente, asignar valores a los argumentos UNDO_TABLESPACE y UNDO_RETENTION;

  • crear, al menos, un tablespace de anulación durante la definición de la base de datos o posteriormente.

2. Los argumentos de inicialización

UNDO_MANAGEMENT

Este argumento indica el modo de gestión deseado para la información de anulación. Los valores posibles son AUTO (valor por defecto) o MANUAL. Este argumento es estático; hay que volver a arrancar la base de datos para cambiar el modo de gestión de la información de anulación.

UNDO_TABLESPACE

Este argumento especifica el nombre del tablespace de anulación que se va a utilizar durante el inicio de la instancia. Se puede indicar el nombre de cualquier tablespace de anulación. Por defecto, este argumento está vacío y se utiliza el primer tablespace de anulación encontrado en la base de datos (como veremos más adelante); a continuación, Oracle informa el argumento UNDO_TABLESPACE. Este argumento es dinámico.

El argumento UNDO_TABLESPACE es particularmente interesante si la base de datos dispone de varios tablespaces de anulación; permite indicar el nombre del tablespace de anulación que se va a utilizar durante el inicio de la instancia. Este argumento es particularmente...

Gestión del tablespace de anulación

1. Características del tablespace de anulación

El tablespace de anulación se administra obligatoriamente de manera local, con una gestión automática de las extensiones (EXTENT MANAGEMENT LOCAL AUTOALLOCATE). Puede ser SMALLFILE o BIGFILE, y utilizar cualquier tamaño de bloque (no solo el tamaño de bloque estándar). De lo contrario, forzosamente es READ WRITE, LOGGING y PERMANENT.

Es imposible prohibir la creación de otros segmentos (tabla, índice) en un tablespace de anulación. Se pueden crear en la base de datos varios tablespaces de anulación (que contienen sus propios segmentos de anulación), pero solo uno está activo en la instancia (utilizado) en un instante dado. Es posible cambiar de tablespace de anulación dinámicamente. El tablespace de anulación activo no se puede desactivar (pasar a OFFLINE) o eliminar.

2. Funcionamiento del tablespace de anulación

En un tablespace de anulación, los segmentos de anulación se crean automáticamente y se administran por Oracle (y solo por él). Se denominan _SYSSMU* y se dimensionan (nombre y tamaño) automáticamente en función de las necesidades.

En función de las necesidades, se activan automáticamente los segmentos de anulación almacenados en el tablespace de anulación, actualmente activo. Oracle crea automáticamente nuevos segmentos de anulación en el tablespace de anulación activo si lo juzga necesario. Los segmentos de anulación creados de esta manera no se eliminan; si Oracle considera que ya no son necesarios (al disminuir la actividad transaccional), los pasa a modo OFFLINE. Si posteriormente la instancia los necesita de nuevo, los vuelve a poner en modo ONLINE.

Intentar gestionar directamente los segmentos de anulación (adición, eliminación, activación, desactivación, dimensionamiento, etc.) no tiene ningún efecto. Oracle no devuelve ningún error, pero no hace nada. De cualquier manera, ¿por qué querer...

Encontrar la información de la gestión de anulación

1. Encontrar la información en el tablespace de anulación

Las vistas que se presentan en el capítulo Tablespaces y archivos de datos se pueden utilizar para encontrar información relativa a los tablespaces de anulación y sus archivos de datos:

  • DBA_TABLESPACES o V$TABLESPACE : información de los tablespaces;

  • DBA_DATA_FILES o V$DATAFILE: información de los archivos de datos;

  • DBA_FREE_SPACE: información del espacio disponible dentro de un tablespace;

  • DBA_SEGMENTS: información de los segmentos asignados dentro de un tablespace;

  • DBA_EXTENTS: información de las extensiones asignadas dentro de un tablespace.

Adicionalmente, la vista DBA_UNDO_EXTENTS ofrece información más específica acerca de las extensiones asignadas en los tablespaces de anulación:

DBA_UNDO_EXTENTS 

SEGMENT_NAME

Nombre del segmento de anulación al que pertenece la extensión.

TABLESPACE_NAME

Nombre del tablespace de anulación que contiene la extensión.

EXTENT_ID

Número de la extensión (0 para la primera).

FILE_ID

Identificador del archivo de datos que contiene la extensión.

BLOCK_ID

Número del primer bloque de la extensión.

BYTES

Tamaño de la extensión en bytes.

BLOCKS

Tamaño de la extensión en bloques Oracle.

STATUS

Estado de la información de anulación almacenada en la extensión respecto a las transacciones: ACTIVE, EXPIRED, UNEXPIRED.

Ejemplo:

SQL> SELECT tablespace_name,segment_name,extent_id,blocks,status 
  2  FROM dba_undo_extents 
  3  ORDER BY tablespace_name,segment_name,extent_id; 
TABLESPACE SEGMENT_NAME               EXTENT_ID     BLOCKS STATUS 
---------- ------------------------- ---------- ---------- --------- 
UNDOTBS    _SYSSMU10_1216212870$              0          8 UNEXPIRED 
UNDOTBS    _SYSSMU10_1216212870$              1          8 UNEXPIRED 
UNDOTBS    _SYSSMU10_1216212870$              2        128 UNEXPIRED 
UNDOTBS    _SYSSMU10_1216212870$          ...

Utilizar EM Express

El tablespace de anulación y sus archivos de datos se administran mediante la página Tablespaces y Archivos de datos (consulte la sección Utilizar EM Express del capítulo Tablespaces y archivos de datos).

En EM Express, seleccione el elemento Gestión de Deshacer del menú Almacenamiento para acceder a la página de gestión de anulación:

images/11_383_1.png

El panel Resumen de Deshacer ofrece información relativa a la configuración actual:

images/11_384_1.png

El panel Resumen de Estadísticas de Deshacer muestra información estadística de la anulación:

images/11_384_2.png

Las estadísticas se calculan para un periodo de análisis acotado (última hora, último día o última semana) que se puede modificar haciendo clic en el botón Cambiar Parámetros de Análisis:

images/11_385_1.png

El panel Resumen de Estadísticas de Deshacer muestra, principalmente, información estadística de la duración de retención para el periodo analizado:

Retención obligatoria de la información de anulación

Duración de retención mínima necesaria para gestionar la consulta más larga del periodo analizado y evitar los errores snapshot too old.

Retención de la información de anulación más larga

Duración de retención posible teniendo en cuenta el tamaño actual del tablespace de anulación...

Problemas habituales y soluciones

ORA-01552: impos. util. segmento de anulación. Sistema para el tablespace no syst.'XXXX' 

Explicación

No hay más segmentos de anulación activos (ONLINE) que el segmento de anulación SYSTEM (se puede comprobar en V$ROLLNAME), y una transacción afecta al tablespace XXXX.

Causa(s)

La gestión automática de los segmentos de anulación no está activa. La gestión automática de los segmentos de anulación está activa pero no hay ningún tablespace de anulación activo.

Acción(es)

Compruebe si la base de datos se ha iniciado en modo gestión automática de los segmentos de anulación (argumento UNDO_MANAGEMENT). En caso contrario, reinicie la base de datos activando la gestión automática. Compruebe si existe un tablespace de anulación (en la vista DBA_TABLESPACES). En caso contrario, cree uno.

ORA-30036: imposible ampliar el segmento en N, en el tablespace 
de anulación 'XXXX' 

Explicación

Un segmento de anulación no llega a ampliarse.

Causa(s)

El segmento de anulación no llega a ampliarse porque el tablespace en el que se almacena no tiene suficiente espacio disponible y no se puede ampliar.

Acción(es)

Hay que aumentar el espacio disponible en el tablespace:

  • Asignándole un nuevo archivo de datos (ALTER TABLESPACE...