Undo Data es la información necesaria
para revertir los efectos de las sentencias DML. A menudo se conoce como Rollback Data, pero trate de evitar ese
término. En versiones anteriores de Oracle, el término Rollback Data y Undo
Data fueron utilizados indistintamente, pero desde 9i en adelante son
diferentes: su función es la misma, pero su gestión no lo es. Cada vez que una transacción cambia datos, la
versión PreUpdate de los datos es escrito a un Segmento Rollback o a un Segmento
Undo. La diferencia es crucial. Segmentos Rollback pueden todavía existir en la
base de datos 11g, pero con la versión 91 de la base de datos, Oracle introdujo
los Segmentos Undo como una alternativa. Oracle aconseja fuertemente que todas
las Bases de Datos deban utilizar Segmentos Undo-Segmentos Rollback se
mantienen por compatibilidad atrás, pero no son referenciados en el examen OCP
y por lo tanto no son cubiertos en este libro. Pero aunque “Rollback” como un
sustantivo no debe dejar de utilizarse en el entorno Oracle, “roll back ” como
verbo es tan relevante como siempre.
Para hacer Rollback a una transacción
significa utilizar datos de los segmentos Undo para construir una imagen de los
datos como fuera antes que la transacción ocurriera. Esto normalmente se hace automáticamente para
satisfacer los requisitos de la prueba ACID, pero la capacidad de consulta
Flashback (introducido con 9i y realzada desde entonces) aprovecha el poder del
mecanismo Undo porque le da opción de consultar la base de datos como fue en
algún momento pasado. Y por supuesto, cualquier usuario puede utilizar el
comando ROLLBACK interactivamente para regresar cualquier sentencia DML
que fue emitida y no confirmada (any
user can use the ROLLBACK command interactively to back out any DML statements
that he/she has issued and not committed).
La prueba ACID requiere, primero, que
la base de datos debe mantener versiones
PreUpdate de datos con el fin que transacciones incompletas puedan ser
revertidas-o automáticamente en caso de un error o bajo demanda atraves del uso
del comando ROLLBACK.
Este tipo de Rollback es permanente y
publicado a todos los usuarios. Segundo, para coherencia, la base de datos será
capaz de presentar una consulta con una versión de la Base de datos como fue en el momento de la consulta
comenzó. El proceso servidor ejecutando la consulta ira al Segmento Undo y construirá lo que llama una imagen Read-Consistent (Lectura
Coherente) que son consultados. Si fueron cambiados después que la consulta
inicio. Este tipo de Rollback es temporal y solo visible a la sesión que
ejecuta la consulta. Tercero, los Segmentos Undo también son utilizados para el
Aislamiento de la Transacción. Este es quizás el uso más complejo de Undo Data.
El principio de Aislamiento requiere que ninguna transacción puede ser en
ninguna manera dependiente de otra, incompleta, transacción. En efecto, incluso
aunque una base de datos multiusuarios tendrá muchas transacciones en progreso
a la vez, el resultado final deber ser como su las transacciones fueron
ejecutadas una después de otra. El uso de Undo Data combinado con bloqueo de
fila y tabla (como se describe en el capítulo 10) garantiza transacciones
aisladas: la imposibilidad de transacciones incompatibles. Incluso aunque
varias transacciones pueden estar ejecutándose concurrentemente, aislamiento
requiere que el resultado final debe ser como si las transacciones fueron
serializadas (en serie).
Desde la versión 9i en adelante, Undo
Data puede también ser utilizado para consultas Flashback. Esta es una
herramienta completamente opcional pero muy poderosa que permite al usuario
consultar una imagen pasada de la base de datos. Para consultas Flashback, Undo
Data es utilizado para construir una versión de una o más tablas como fueron en
algún momento previo mediante la aplicación de Undo Data. Como con Rollback
para los fines de coherencia, Rollback para fines Flashback es solo temporal y
solo visible a la sesión en concreto.
Como palabra final sobre Rollback en
contraposición (comparación) de Undo, observe el resultado de las dos consultas
contra DBA_SEGMENTS, mostrada en la figura 11-1. Esto muestra que dentro de la
base de datos hay un segmento de tipo Rollback, y 10 segmentos de tipo TYPE2
UNDO. Así que Segmentos Rollback todavía
existen en una base de Datos 11g. Segmentos Undo pueden solo existir en un
Tablespace Undo, esto es una de sus características. Pero en el momento de
creación de la Base de Datos. Puede no haber un Tablespace Undo. Por lo tanto,
en tiempo de creación de la Base de Datos, oracle crea un único Segmento
Rollback pasado de moda en el Tablespace SYSTEM, junto con el diccionario de
datos. Este es utilizado durante la creación de la Base de Datos pero nunca es
usado en ejecución normal. Todas las transacciones de usuario utilizaran
Segmentos undo, listado en DBA_SEGMENTS como segmento tipo TYPE2 UNDO.
EXAMEN
El uso de Segmentos Undo es
incompatible con el uso de Segmentos Rollback: es uno o el otro, dependiendo de
la configuración del parámetro UNDO_MANAGEMENT.
EN
EL TRABAJO
Si le preguntas a Oracle Desarrollo de
Producots ¿Qué es un segmento TYPE1 UNDO? La respuesta será, “Que es un
segmento ROLLBACK”.
EJERCICIO 11-1
USO DE UNDO DATA
En este ejercicio, investigara la
configuración de Undo y el uso en tu base de datos. Utilice SQL*PLUS o SQL
DEVELOPER.
1. Conéctese a la base de datos como usuario
SYSTEM.
2.Determine si la base de datos está usando
Segmentos Undo o Segmentos Rollback con esta consulta.
select value from v$parameter where
name='undo_management';
Este debe regresar el
valor AUTO. Si no es así, emita este comando,
y entonces reinicie la instancia.
alter system set undo_management=auto scope =spfile;
3. Determine que Tablespace Undo han sido
creados, y cual se está utilizando con estas dos consultas:
select
tablespace_name from dba_tablespaces where
contents='UNDO';
select value from v$parameter where
name='undo_tablespace';
4. Determine que segmento Undo está en uso en la
Base de Datos, y los grande que son:
select
tablespace_name,segment_name,segment_id,status from
dba_rollback_segs;
select usn,rssize from v$rollstat;
Tenga en cuenta que
el numero de identificacion para un segment tiene un nombre de columna
diferente en las dos vistas.
5. Averigüe cuando Undo Data fue generado en su
Base de Datos en el pasado reciente:
alter
session set nls_date_format='dd-mm-yy hh24:mi:ss';
select
begin_time, end_time,
(undoblks
* (select value from v$parameter where
name='db_block_size'))
undo_bytes from v$undostat;
No hay comentarios:
Publicar un comentario