sábado, 21 de julio de 2012

11.01.EXPLICANDO EL PROPROSITO DE UNDO.


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