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:
El panel Resumen de Deshacer ofrece información relativa a la configuración actual:
El panel Resumen de Estadísticas de Deshacer muestra información estadística de la anulación:
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:
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...