ISSN: 1579-0223
 
Sentience Research
REDcientífica
· Misión de REDcientífica
· Contacto
· Condiciones de publicación
· Consultar todos los documentos
· Consultar todos los autores
· Acceso usuarios registrados
· English version


PORTADAS
40  41  42  43  44  45  46  47  48  49  50  51  52  53 

BOLETINES
40  41  42  43  44  45  46  47  48  49  50  51  52  53 

TEMAS



ENLACES

Transacciones continuables con Oracle9i
Sentencias suspendidas

Claudio Roca
www.consultoria-oracle.com
Profesional Certificado Oracle
 
ImprimirEnviar

No se puede negar la existencia de operaciones de larga duración que a veces se requiere llevar a cabo en un servidor de base de datos. Hasta el día de hoy, estas tareas cancelaban por completo al producirse una falla, perdiéndose varias horas de trabajo sin posibilidad de conservar los datos modificados, agregados o eliminados.

Las operaciones continuables, permitirán no perder ese tiempo, ya que las mismas reanudarán las tareas una vez corregido el problema que las hizo fallar.



Transacciones continuables con Oracle9i

Esta es una ventaja que tendrán aquellos que utilicen bases de datos Oracle9i, y consiste en la posibilidad de continuar una operación que falle por falta de espacio.

Se trata de un mecanismo que permite suspender, y luego continuar, largas tareas que fallen por falta de espacio, permitiendo que un administrador tome acciones correctivas, en lugar de que el servidor de base de datos reporte un error y la operación finalice por completo. Una vez corregida la falla, la tarea suspendida continúa automáticamente. El nombre que Oracle otorgó a esta característica, se lo conoce como alocación de espacio continuable, y las sentencias involucradas se llaman sentencias continuables.

Las sentencias continuables ejecutarán de ese modo solo si se especifica explícitamente que así sea, como ejemplo, si es necesario crear un índice sobre una gran tabla, antes de ejecutar la sentencia de creación del índice, se deberá especificar que la sesión sea continuable mediante la siguiente sentencia:

ALTER SESSION ENABLE RESUMABLE;

Las sentencias continuables se suspenderán cuando se produzca una condición de falta de espacio, cuando se llegue al máximo permitido de extents de un objeto, o al superar el espacio de uso permitido sobre un tablespace.

Existen mecanismos para que el administrador verifique el estado en que se encuentra una operación continuable.

Primero, Oracle registrará la situación en el archivo de alerta de la base, alert.log.

Segundo, se puede crear un trigger asociado al evento after suspend que será ejecutado cuando una sentencia se suspenda.

Por último, se puede visualizar un detalle de lo ocurrido en la vista dba_resumable o user_resumable. En estas vistas se registrará detalle de la operación suspendida desde el momento en que se ejecutó el cambio de sesión mediante alter session enable resumable. A partir de este instante, se registrará una línea en las vistas, donde se detalla, por ejemplo, nombre del usuario, estado, por lo general normal, identificador de sesión, etc..

Cuando se ejecute una sentencia continuable, se registrará la hora de inicio de la misma, y, cuando se suspenda, se registrará la hora en que se suspendió.

Los datos de la vista dba_resumable o user_resumable cambiarán su estado cuando la operación suspendida continúe, la columna status, la cual figuraba como suspended, volverá su estado como normal y la columna con la fecha de suspensión volverá a ser nula. Esto es correcto, ya que la operación no está suspendida porque en forma automática ha vuelto a ejecutarse cuando el administrador tomó la acción correctiva. Es posible también, asignar un nombre como recordatorio al activar una sesión en modo continuable, un ejemplo sería:

ALTER SESSION ENABLE RESUMABLE NAME ‘Sentencia continuable’;

Entonces, al realizar consultas sobre las vistas nombradas en párrafo anterior, será también posible identificar la sentencia suspendida mediante el nombre asignado a la sesión continuable.

Para realizar un ejemplo más detallado, podéis hacer lo siguiente:

- Conectarse a la base de datos con un usuario para pruebas.

- Ejecutar la sentencia: alter session enable resumable.

- Create index idx1 on tabla1 (columna) storage ( initial 1000M).

Al especificar el tamaño inicial del índice a crear, asegurarse de utilizar un valor muy alto para garantizar la falla de creación del mismo. Desde otra pantalla, conectarse con usuario privilegiado y consultar la vista dba_resumable. Podéis realizar esta consulta antes y después de ejecutar la sentencia de creación del índice, y podréis ver la variación del estado de la sentencia. Luego, una vez que la misma se haya suspendido, podéis agregar mas espacio al tablespace donde el índice se intenta crear y se podrá observar como continúa en forma automática la creación del índice.

Es importante aclarar, que el hecho de suspender la sentencia implica que toda la transacción se suspenderá, y por ende, todos los recursos utilizados no se liberarán hasta que la sentencia finalice por completo.

Existe también un tiempo de espera asociado con una sentencia suspendida, por defecto el valor equivale a dos horas. Pero es posible alterar este valor por parte del administrador o quien ejecute el cambio de sesión al activar el modo continuable, por ejemplo, a través de la siguiente sentencia:

ALTER SESSION ENABLE RESUMABLE TIMEOUT 2000;

De manera que al suspenderse una sentencia, la misma intentará continuar automáticamente luego de esperar 2000 segundos. Si vuelve a producirse una falla, o la misma no se ha corregido, la operación vuelve al estado suspendido, y esperará nuevamente 2000 segundos.


Sentencias suspendidas

Las siguientes sentencias u operaciones son continuables:

- Cualquier consulta que no sea distribuida

- La herramienta SQL*Loader

- Sentencias insert, delete y update que no sean distribuidas

- Create materialized view / log, create table as select, create index, alter index rebuild, alter table move/split partition, y alter index rebuild/split partition.

Como puede observarse arriba, una limitación de las operaciones continuables es la imposibilidad de ejecutar transacciones distribuidas luego de haber activado la sesión de este modo.

Dejando de lado las limitaciones, se puede mencionar otra ventaja, la posibilidad de ejecutar operaciones continuables en modo paralelo, es decir, aquellas operaciones que pueden ejecutarse utilizando servidores paralelos, lo cual es una característica disponible desde Oracle7.3, podrán ser utilizadas bajo sesiones continuables.

Siguiendo con el ejemplo de creación del índice, esta operación puede ejecutarse en paralelo dependiendo de la cantidad de CPU que disponga el servidor, si se dispone de dos procesadores, el proceso de creación del índice puede subdividirse en dos procesos. Si uno de ellos falla y queda suspendido, el otro proceso puede continuar, ya sea hasta que encuentre un error, o se vea bloqueado por el proceso que quedó suspendido. Cuando se corrija el error, la operación en su totalidad continuará. Para monitorear esta sentencia continuable, también podrá consultarse las vistas dba_resumable y user_resumable, y podréis notar la existencia de una línea por cada proceso paralelo iniciado por Oracle.

Existe un paquete provisto por Oracle llamado DBMS_RESUMABLE, entre sus funciones, encontramos:

Otras funciones de utilidad provistas por el programa DBMS_RESUMABLE:

- abort(numero-sesion). Permite cancelar la sentencia suspendida de una determinada sesión.

- get_session_timeout(numero-sesion). Devuelve el valor del tiempo de espera de las sentencias continuables de una sesión.

- set_session_timeout(numero-sesion,valortiempo). Permite definir el tiempo de espera de sentencias continuables de una determinada sesión.

- get_timeout(). Devuelve el tiempo de espera de las sentencias continuables de la sesión actual.

- set_timeout(). Define el tiempo de espera de sentencias continuables de la sesión actual.

- space_error_info. Devuelve el mensaje de error, si es que se produjo alguna falla relacionada con problemas de espacio.



Sobre el documento


Actualmente existen volúmenes de información muy altos dentro de las bases de datos, los procesos de mantenimiento, o cargas masivas demoran tiempos mayores y no siempre se puede anticipar el éxito de estas operaciones. Las transacciones continuables permiten que estas tareas no cancelen, sino que queden suspendidas, y automáticamente continuarán al corregirse la falla.



© Copyright 2003 Claudio Roca.
© Copyright 2003 REDcientífica.
Todos los derechos reservados.


[Evaluar este artículo]








              Misión de REDcientífica              Condiciones de publicación              E-mail de contacto



  Bookmark and Share