Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 1/8 UNIDAD 9 ADMINISTRACIÓN DE LOS UNDO DATA (DATOS DE DESHACER) 9.1. OBJETIVOS Explicar DML y la generación de datos deshacer. Controlar y administrar datos de deshacer. Describir la diferencia entre datos de deshacer y de redo. Configurar la retención de deshacer. Garantizar la retención de deshacer. Utilizar el Asesor de Deshacer. 9.2. MANIPULACIÓN DE DATOS Los datos se manipulan, o modifican, mediante la clase DML de sentencias SQL: INSERT, UPDATE, DELETE y MERGE. Estas sentencias se ejecutan como parte de una transacción, que se inicia con la primera sentencia DML correcta y termina con un comando COMMIT o ROLLBACK (Figura 9.1). En las transacciones sólo se puede realizar una operación de confirmación o de rollback. La operación de rollback también se puede producir si hay un fallo del sistema o de proceso. Figura 9.1: Manipulación de datos 9.3. DATOS DE DESHACER La base de datos Oracle guarda el valor anterior (datos de deshacer) cuando un proceso cambia datos de una base de datos. Almacena los datos como existían antes de que se modificaran. La captura de datos de deshacer le permite realizar una operación de rollback en los datos no confirmados (Figura 9.2). Los datos de deshacer también soportan consultas de flashback y de lectura consistente. Las consultas de lectura consistente proporcionan resultados que son consistentes con los datos en el momento en que se inicia una consulta. Para que una consulta de lectura consistente se realice correctamente, la información original debe existir aún como información de deshacer. Mientras se retenga la información de deshacer, la base de datos Oracle puede reconstruir datos que cumplan las consultas de lectura consistente. Las consultas de flashback son consultas que piden con determinación una versión de los datos tal como existían en algún momento del pasado. Siempre que la información de deshacer del pasado exista, las consultas de flashback pueden terminar correctamente. UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 2/8 Los datos de deshacer también se utilizan para la recuperación de transacciones fallidas. Una transacción fallida se produce cuando una sesión de usuario termina de forma anormal (posiblemente debido a errores de red o a un fallo en la computadora cliente) antes de que el usuario decida confirmar la transacción o realizar un rollback de la misma. Las transacciones fallidas también se pueden producir cuando la instancia falla. En caso de una transacción fallida, se selecciona el comportamiento más seguro y la base de datos Oracle deshace todos los cambios realizados por el usuario, restaurando los datos originales. La información de deshacer se retiene para todas las transacciones al menos hasta que la transacción termine debido a: •Usuarios que deshacen la transacción (operación de rollback) Usuarios que terminan una transacción (confirmación) Sesión de usuario que termina de forma anormal (operación de rollback) Sesión de usuario que termina de forma normal con una salida (confirmación) La cantidad de datos de deshacer que se retienen y el tiempo de esa retención dependen de la cantidad de actividad de la base de datos y de su configuración. Figura 9.2: Datos de deshacer 9.4. TRANSACCIONES Y DATOS DE DESHACER Al iniciar una transacción, ésta se asigna a un segmento de deshacer. A lo largo de la transacción, cuando se modifiquen los datos, los valores originales (antes del cambio) se copiarán al segmento de deshacer (Figura 9.3). Las transacciones se asignan a los distintos segmentos de deshacer y se comprueba con la vista de rendimiento dinámico v$transaction. Los segmentos de deshacer son segmentos especializados que la instancia crea automáticamente, según sea necesario, para soportar las transacciones. Al igual que todos los segmentos, los segmentos de deshacer están formados por extensiones que a su vez constan de bloques de datos. Los segmentos de deshacer crecen y se reducen automáticamente si es necesario, actuando como buffer de almacenamiento circular para las transacciones asignadas. Las transacciones rellenan extensiones en los segmentos de deshacer hasta que se termina una transacción o se consume todo el espacio. Si una extensión se llena completamente y se necesita más espacio, la transacción adquiere ese espacio de la siguiente extensión del segmento. Al consumir todas las extensiones, la transacción se volverá a ajustar a la primera extensión o solicitará que se asigne una extensión nueva al segmento de deshacer. UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 3/8 Las operaciones en paralelo pueden hacer que una transacción utilice realmente más de un segmento de deshacer. Figura 9.3: Transacciones y datos de deshacer 9.5. ALMACENAMIENTO DE INFORMACIÓN DE DESHACER Los segmentos de deshacer sólo pueden existir en una forma especializada de tablespace denominada tablespace de deshacer. Aunque una base de datos puede tener numerosos tablespaces de deshacer, sólo se puede designar uno de ellos como el tablespace actual en el que se escribirán los datos de deshacer (Figura 9.4). Los segmentos de deshacer siempre son propiedad de SYS. Puesto que los segmentos actúan como buffer circular, cada segmento tiene dos extensiones como mínimo. El número máximo de extensiones por defecto depende del tamaño del bloque de base de datos, aunque es muy alto (32.765 para un tamaño de bloque de 8 KB). Los tablespaces de deshacer son tablespaces permanentes, gestionados localmente con asignación automática de extensiones. Se gestionan como cualquier otro tablespace excepto en lo que se refiere a la recuperación. Puesto que se necesitan datos de deshacer para recuperar transacciones fallidas (como las que se pueden producir cuando una instancia falla), los tablespaces de deshacer sólo se pueden recuperar mientras la instancia está en estado MOUNT. Figura 9.4: Almacenamiento de información de deshacer UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 4/8 9.6. DATOS DE DESHACER FRENTE A DATOS DE REDO En un principio, los datos de deshacer y de redo se parecen bastante, aunque sirven para obtener resultados diferentes. Los datos de deshacer son necesarios cuando hay que deshacer un cambio y esto ocurre en las operaciones de consistencia de lectura y de rollback. Los datos de redo son necesarios cuando hay que realizar de nuevo los cambios, en el caso de que se hayan perdido por algún motivo (Tabla 9.1). El proceso de confirmación implica una verificación de que los cambios de la transacción se han escrito en el archivo de redo log, que se encuentra almacenado de manera persistente en el disco, en lugar de en la memoria. Además, normalmente está multiplexado. Es decir, hay varias copias de los datos de redo en el disco. Incluso aunque no se hayan escrito los cambios en los archivos de datos en los que están almacenados realmente los bloques de la tabla, la garantía de que los cambios se han escrito en el archivo de redo log es suficiente. Por ejemplo, un corte en el suministro eléctrico justo antes de que loscambios confirmados se hayan reflejado en los archivos de datos no causa ningún problema ya que la transacción se ha confirmado. Por lo tanto, cuando se vuelva a iniciar el sistema, se podrán aplicar los cambios de los registros de redo que no se llegaron a reflejar en los archivos de datos en el momento del corte de electricidad. Tabla 9.1: Comparación de datos de Deshacer y Datos de Redo 9.7. CONTROL DE DESHACER La mayor parte del tiempo la instancia gestiona automáticamente las operaciones de deshacer casi sin intervención del administrador de base de datos (DBA). Puede que sea necesaria la participación del administrador cuando se produce lo siguiente (Figura 9.2): Espacio insuficiente para deshacer Los usuarios reciben mensajes de error ORA-01555 snapshot too old (número y tamaño de los segmentos deshacer) La información de deshacer siempre se retiene hasta que una transacción termina. Esto significa que si se suprimen o actualizan cantidades muy grandes de datos (las operaciones de inserción consumen muy poco espacio de deshacer porque la imagen original de los datos insertados es un valor nulo) sin confirmar, el tablespace de deshacer debe ser lo bastante grande para contener los datos originales. Imagine un caso en el que en una tabla de 50 GB se hubieran suprimido todas las filas con el comando siguiente: SQL> DELETE FROM reallybigtable; Sería necesario que el tablespace tuviera espacio para 50 GB de información original sólo en caso de que el usuario que emitió esta sentencia cambiara de opinión y quisiera realizar un rollback del cambio. Si el tablespace de deshacer se queda sin espacio para los datos de deshacer, los usuarios reciben un mensaje de error como el siguiente: ORA-01650: unable to extend rollback segment El control proactivo detecta problemas de espacio en un tablespace de deshacer antes de que afecte a los usuarios. UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 5/8 Otro problema, con el que el administrador se puede encontrar con la información de deshacer, es cuando una consulta tiene que acceder a información de deshacer que ya se ha sobrescrito. Esto puede suceder en una consulta de flashback o con una ejecución muy larga. Cuando una consulta necesita una “instantánea” de los datos como eran en algún momento del pasado y la reconstrucción de dicha instantánea necesita datos de deshacer que ya no existen, la consulta devuelve el siguiente error: ORA-01555: snapshot too old Esto puede suceder porque la base de datos Oracle presenta al usuario una vista consistente de los datos tal y como son en el momento en que se inicia la ejecución de la consulta. Si hay cambios sin confirmar en la tabla en la que se realiza la consulta, la base de datos Oracle lee los datos de deshacer para obtener la versión confirmada de los datos. Esto es lo que se denomina consistencia de lectura. Si la consulta se ejecuta durante tanto tiempo que, mientras tanto, esas modificaciones se han acabado confirmando y, posteriormente, sus datos de deshacer se han liberado y sobrescrito, la consulta de larga ejecución no podrá visualizar una vista consistente de los datos tal y como eran en el momento en que se inició dicha consulta. Por este motivo, la retención de deshacer se debe configurar para que se ajuste a la consulta de ejecución más larga. Figura 9.5: Control de Deshacer 9.8. ADMINISTRACIÓN DE DESHACER Se recomienda el uso de la gestión automática de deshacer, que se configura mediante la definición del parámetro de inicialización UNDO_MANAGEMENT en AUTO (Figura 9.5). La gestión manual de deshacer está soportada para la compatibilidad con Oracle8i y versiones anteriores, pero necesita más participación del DBA. Con la gestión automática de deshacer, el DBA gestiona los datos de deshacer en el nivel del tablespace, controla qué tablespace de deshacer utiliza una instancia con el parámetro de inicialización UNDO_TABLESPACE. Una vez seleccionado el tablespace de deshacer, el administrador sólo se debe preocupar de proporcionar espacio suficiente y de configurar un intervalo de retención de deshacer (Figura 9.6). Con la gestión manual, el DBA también debe tener en cuenta lo siguiente: Asignación de tamaño a los segmentos, que incluye las extensiones máximas y el tamaño de las extensiones Identificación y eliminación de transacciones bloqueantes Creación de segmentos de rollback suficientes para manejar transacciones (en el modo manual los segmentos de deshacer se denominan segmentos de rollback) Selección de un tablespace que contenga los segmentos de rollback (los tablespaces de deshacer sólo se utilizan con la gestión automática de deshacer) UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 6/8 Figura 9.6: Administración de Deshacer 9.9. CONFIGURACIÓN DE RETENCIÓN DE DESHACER UNDO_RETENTION especifica (en segundos) el valor de umbral inferior de la retención de deshacer. En los tablespaces de deshacer AUTOEXTEND, el sistema retiene la operación de deshacer durante al menos el tiempo especificado en este parámetro y, de manera automática, ajusta el período de retención para cumplir con los requisitos de deshacer de las consultas (Figura 9.7). En los tablespaces de deshacer de tamaño fijo, el sistema ajusta automáticamente el período máximo posible de retención de deshacer en función del tamaño e historial de uso del tablespace de deshacer; ignora UNDO_RETENTION a menos que esté activada la garantía de retención. De esta forma, en la gestión automática de deshacer, para los tres casos aquí mostrados, se utiliza el valor de UNDO_RETENTION. En casos distintos a los aquí mostrados, este parámetro se ignora. La información de deshacer está dividida en tres categorías: Información de deshacer sin confirmar: soporta una transacción que se está ejecutando en ese momento y es necesaria si un usuario desea realizar un rollback o si la transacción ha fallado. La información de deshacer sin confirmar nunca se sobrescribe. Información de deshacer confirmada: ya no es necesaria para dar soporte a una transacción en ejecución, pero aún es necesaria para cumplir con el intervalo de retención de deshacer. También se denomina información de deshacer “no vencida”. La información de deshacer confirmada se retiene cuando es posible sin que una transacción activa falle debido a la falta de espacio. Información de deshacer vencida: ya no es necesaria para dar soporte a una transacción en ejecución. La información de deshacer vencida se sobrescribe cuando se necesita espacio para una transacción activa. Figura 9.7: Configuración de Retención de Deshacer 9.10. GARANTÍA DE RETENCIÓN DE DESHACER El comportamiento por defecto de deshacer es sobrescribir las transacciones confirmadas que aún no han vencido, en lugar de permitir que una transacción activa falle debido a la falta de espacio de deshacer. UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 7/8 Este comportamiento se puede cambiar al garantizar la retención. Con la retención garantizada, los valores de retención de deshacer se aplican cuando las transacciones fallen (Figura 9.8). RETENTION GUARANTEE es un atributo de tablespace más que un parámetro de inicialización. Este atributo sólo se puede cambiar con las sentencias de líneade comandos SQL. La sintaxis para cambiar un tablespace de deshacer por una retención de garantía es la siguiente: SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE; Para devolver un tablespace de deshacer garantizado a su valor normal, utilice el siguiente comando: SQL> ALTER TABLESPACE undotbs1 RETENTION NOGUARANTEE; La garantía de retención se aplica sólo a los tablespaces de deshacer. Los intentos de definirla en un tablespace que no sea de deshacer tiene como resultado el siguiente error: SQL ALTER TABLESPACE l RETENTION GUARANTEE ERROR at line 1: ORA-30044: 'Retention' can only specified for undo tablespace Figura 9.8: Garantía de Retención de Deshacer 9.11. TAMAÑO DE LOS TABLESPACES DE DESHACER Se debe asignar un tamaño a los tablespaces de deshacer para que puedan contener la información original de todas las transacciones. Al hacer clic en el enlace Undo Management de la página Administration de Enterprise Manager aparece una visión general de los datos de deshacer del sistema que incluye los valores actuales, el consumo de deshacer por minuto y la longitud de la consulta con la ejecución más larga observada durante un determinado período de tiempo (Figura 9.9). Los archivos de datos que pertenecen a un tablespace de deshacer se pueden ampliar automáticamente cuando se quedan sin espacio libre. A diferencia de otros tablespaces, Oracle Corporation recomienda que los archivos de datos asociados a los tablespaces de deshacer no tengan activada la extensión automática. La primera vez que se determinan los requisitos de espacio de deshacer, puede que desee activar la extensión automática de los archivos de datos, pero después de haber asignado correctamente el tamaño del tablespace debe desactivarla. La desactivación de la extensión automática en archivos de datos de un tablespace de deshacer evita que un único usuario consuma involuntariamente grandes cantidades de espacio en disco dejando de confirmar las transacciones. UNIVERSIDAD NACIONAL DE JUJUY FACULTAD DE INGENIERIA ANALISTA PROGRAMADOR UNIVERSITARIO Cátedra: BASE DE DATOS II Profesor Adjunto: Ms. Ing. Héctor P. Liberatori 8/8 Figura 9.9: Establecer el tamaño de los Tablespaces de Deshacer con OEM 9.12. USO DEL ASESOR DE DESHACER A través de la página de propiedades Undo Management se accede al Asesor de Deshacer. Ofrece una estimación del tamaño del tablespace de deshacer que resulta necesario para satisfacer una retención de deshacer determinada (Figura 9.10). Indique el período de retención deseado y la región de análisis del asesor mostrará el tamaño de tablespace necesario para soportar el período de retención. También cabe la posibilidad de hacer clic en un punto del gráfico para ver el tamaño del tablespace requerido para soportar el período elegido. Una vez seleccionado un período de retención de deshacer, haga clic en OK para implementar el nuevo período de retención. Figura 9.10: Asesor de Deshacer
Compartir