Sei sulla pagina 1di 8

4.

MANEJO DE TRANSACCIONES El manejo de transacciones tiene dos aspectos principales, el control de recuperacin y el control de concurrencia, cada uno de los cuales requiere un tratamiento ms amplio en el ambiente distribuido. Para explicar ese tratamiento ms amplio es preciso introducir primero un trmino nuevo, "agente". En un sistema distribuido, una sola transaccin puede implicar la ejecucin de cdigo en varios sitios (en particular puede implicar a actualizaciones en varios sitios). Por tanto, se dice que cada transaccin est compuesta de varios agentes, donde un agente es el proceso ejecutado en nombre de una transaccin dada en determinado sitio. Y el sistema necesita saber cundo dos agentes son parte de la misma transaccin; por ejemplo, es obvio que no puede permitirse un bloqueo mutuo entre dos agentes que sean parte de la misma transaccin. La cuestin especifica del control de recuperacin; para asegurar, pues que una transaccin dada sea atmica (todo o nada ) en el ambiente distribuido, el sistema debe asegurarse de que todos los agentes correspondientes a esa transaccin se comprometan al unsono o bien que retrocedan al unsono. Este efecto puede lograrse mediante el protocolo de compromiso en dos fases. En cuanto al control de concurrencia, esta funcin en un ambiente distribuido estar basada con toda seguridad en el bloqueo, como sucede en los sistemas no distribuidos.

4.1 TRANSACCIONES Una transaccin es una secuencia de una o ms operaciones agrupadas como una unidad. El inicio y el final de la transaccin definen los puntos de consistencia de la base de datos. Si una accin de la transaccin no se puede ejecutar, entonces ninguna accin dentro de la secuencia que conforma la transaccin tendr efecto. Propiedades de las transacciones

Atomicidad: Una transaccin es una unidad atmica de procesamiento, esta se realiza o no se realiza. Consistencia: Si se ejecuta una transaccin sobre un estado consistente, el resultado ser un nuevo estado consistente. Aislamiento: Una transaccin no har visibles sus modificaciones a otras transacciones hasta que termine de ejecutarse completamente. Es decir, una transaccin desconoce si otras transacciones se estn ejecutando en el sistema. Durabilidad: Una vez una transaccin se ejecuta exitosamente y realiza cambios sobre el sistema, estos cambios nunca se deben perder a causa de fallas en el sistema.

4.1.1 ESTRUCTURA DE TRANSACCIONES La estructura de una transaccin usualmente viene dada segn el modelo de la transaccin, estas pueden ser planas (simples) o anidadas. Transacciones planas: Consisten en una secuencia de operaciones primitivas encerradas entre las palabras clave BEGIN y END. Por ejemplo: BEGIN _TRANSACTION Reservacin .... END.

Transacciones Anidadas : Consiste en tener transacciones que dependen de otras, estas transacciones estn incluidas dentro de otras de un nivel superior y se las conoce como subtransacciones. La transaccin de nivel superior puede producir hijos (subtransacciones) que hagan ms fcil la programacin del sistema y mejoras del_desempeo. En las transacciones anidadas las operaciones de una transaccin pueden ser as mismo otras transacciones. Por ejemplo: BEGIN _TRANSACTION Reservacin .......... BEGIN _TRANSACTION Vuelo ........ END.( Vuelo ) ...... BEGIN _TRANSACTION Hotel ........ END ...... END.

Una transaccin anidada dentro de otra conserva las mismas propiedades que las de su padre, esto implica, que puede contener as mismo transacciones dentro de ella. Existen restricciones obvias en una transaccin anidada: debe empezar despus que su padre y debe terminar antes que el. El compromiso de una subtransaccion es condicional al compromiso de su padre, si el padre de una o varias subtransacciones aborta, las subtransacciones hijas tambin sern abortadas. Las transacciones anidadas brindan un nivel mas alto de concurrencia entre transacciones. Ya que una transaccin consiste de varias transacciones es posible tener mayor concurrencia dentro de una sola transaccin. As tambin, es posible recuperarse de de fallas de forma independiente de cada subtransaccion. Esto limita el dao a una parte mas pequea de la transaccin, haciendo que el costo de la recuperacin sea el menor. Tambin se deben considerar el orden de las lecturas y escrituras. Si las acciones de lectura y escritura pueden ser mezcladas sin ninguna restriccin, entonces, a este tipo de transacciones se les conoce como Generales .

Por el contrario, si se restringe o impone que un dato debe ser ledo antes de que pueda ser escrito entonces se tendrn transacciones Restringidas. Si las transacciones son restringidas a que todas las acciones de lectura se realicen antes de las acciones de escritura entonces se les conoce como de Dos Pasos. Finalmente existe un modelo de accin para transacciones restringidas en donde se aplica aun ms la restriccin de que cada par < read , write > tiene que ser ejecutado de manera atmica. Las transacciones distribuidas iniciadas en Transact-SQL tienen una estructura relativamente simple: 1. Una secuencia de comandos o conexin de aplicacin de Transact-SQL ejecuta una instruccin Transact-SQL que inicia una transaccin distribuida. 2. La instancia de SQL Database Engine (Motor de base de datos de SQL) que ejecuta la instruccin se convierte en el servidor de control de la transaccin. 3. A continuacin, la secuencia de comandos o la aplicacin ejecuta consultas distribuidas en servidores vinculados o procedimientos almacenados remotos en servidores remotos. 4. A medida que se realizan las llamadas de las consultas distribuidas y los procedimientos remotos, el servidor de control llama automticamente al Coordinador de transacciones distribuidas de Microsoft (MS DTC) para dar de alta los servidores vinculados y remotos en la transaccin distribuida. 5. Cuando la secuencia de comandos o la aplicacin emite una instruccin COMMIT o ROLLBACK, la instancia de control de SQL Server llama a MS DTC para administrar el proceso de confirmacin en dos fases o para notificar a los servidores vinculados y remotos que reviertan las transacciones. Las instrucciones Transact-SQL que controlan las transacciones distribuidas son pocas debido a que el trabajo lo realizan internamente SQL Database Engine (Motor de base de datos de SQL ) y MS DTC. Las nicas instrucciones Transact-SQL que se necesitan en la secuencia de comandos o la aplicacin de Transact-SQL son las necesarias para:

Iniciar una transaccin distribuida. Realizar consultas distribuidas en servidores vinculados o ejecutar llamadas a procedimientos remotos en servidores remotos.

Llamar a las instrucciones Transact-SQL COMMIT TRANSACTION, COMMIT WORK, ROLLBACK TRANSACTION o ROLLBACK WORK estndar para finalizar la transaccin. Para cualquier transaccin distribuida de Transact-SQL, la instancia de Database Engine (Motor de base de datos) que procesa la secuencia de comandos o la conexin de Transact-SQL llama automticamente a MS DTC para coordinar la confirmacin o la reversin de la transaccin.

Puede iniciar transacciones distribuidas en Transact-SQL de las maneras siguientes:

Inicie una transaccin distribuida explcita con la instruccin BEGIN DISTRIBUTED TRANSACTION. Tambin puede ejecutar una consulta distribuida en un servidor vinculado. La instancia de Database Engine (Motor de base de datos) a la que se ha conectado llama a MS DTC para administrar la transaccin distribuida con el servidor vinculado. Tambin puede llamar a procedimientos almacenados remotos de una instancia remota de Database Engine (Motor de base de datos) como parte de la transaccin distribuida. Mientras est en una transaccin local, ejecute una consulta distribuida. Si el origen de datos de OLE DB admite la interfaz ITransactionJoin, la transaccin aumenta al nivel de transaccin distribuida, aunque la consulta sea de slo lectura. Si el origen de datos no admite ITransactionJoin, nicamente se permiten instrucciones de slo lectura. Si se ha ejecutado SET REMOTE_PROC_TRANSACTIONS ON y una transaccin local llama a un procedimiento almacenado remoto en otra instancia de Database Engine (Motor de base de datos), la transaccin local aumenta al nivel de transaccin distribuida. Database Engine (Motor de base de datos) utiliza MS DTC para coordinar la transaccin con el servidor remoto. Si la opcin REMOTE_PROC_TRANSACTIONS se establece en OFF, las llamadas a procedimientos almacenados remotos se ejecutan fuera del mbito de una transaccin local. El trabajo que ha realizado el procedimiento remoto no se revierte si la transaccin local se revierte. El trabajo se confirma en el momento en que concluye el procedimiento, no cuando se confirma la transaccin local.

Sintaxis de una transaccin Distribuida con Sql Server 2005 BEGIN DISTRIBUTED { TRAN | TRANSACTION } [ transaction_name | @tran_name_variable ] [;] Argumentos

transaction_name
Se trata de un nombre de transaccin definida por el usuario que se utiliza para realizar el seguimiento de la transaccin distribuida en las utilidades de MS DTC. El parmetro transaction_name debe seguir las reglas de los identificadores y ser <= 32 caracteres.

@tran_name_variable
Se trata del nombre de una variable definida por el usuario que contiene el nombre de una transaccin utilizada para realizar el seguimiento de la transaccin distribuida en las utilidades de MS DTC. La variable debe declararse con un tipo de datos char, varchar, nchar o nvarchar.

4.1.2 Ejecucin Transacciones Centralizada Distribuida Consiste en una serie de modificaciones (transacciones) aun determinado recurso del sistema (por ejemplo una base de datos) y en donde se define un punto de inicio (Begin Tran) y un punto de terminacin que define un bloque entre el conjunto de operaciones que son realizadas. Dentro de este proceso en bloque los dems usuarios no pueden modificar nada hasta que no se presente un estado estable de los datos, esto ocasiona inconsistencia temporal y conflictos. Transacciones distribuidas abarcan dos o ms servidores conocidos como administradores de recursos. La administracin de la transaccin debe ser coordinada entre los administradores de recursos mediante un componente de servidor llamado administrador de transacciones. Cada instancia de SQL Server Database Engine (Motor de base de datos de SQL Server) puede funcionar como administrador de recursos en las transacciones distribuidas que coordinan los administradores de transacciones, como el Coordinador de transacciones distribuidas de Microsoft (MS DTC) u otros administradores que admitan la especificacin Open Group XA del procesamiento de transacciones distribuidas. Una transaccin de una sola instancia de Database Engine (Motor de base de datos) que abarque dos o ms bases de datos es, de hecho, una transaccin distribuida. La instancia administra la transaccin distribuida internamente; para el usuario funciona como una transaccin local. En la aplicacin, una transaccin distribuida se administra de forma muy parecida a una transaccin local. Al final de la transaccin, la aplicacin pide que se confirme o se revierta la transaccin. El administrador de transacciones debe administrar una confirmacin distribuida de forma diferente para reducir al mnimo el riesgo de que, si se produce un error en la red, algunos administradores de recursos realicen confirmaciones mientras los dems revierten la transaccin. Esto se consigue mediante la administracin del proceso de confirmacin en dos fases (la fase de preparacin y la fase de confirmacin), que se conoce como confirmacin en dos fases (2PC).

Fase de preparacin Cuando el administrador de transacciones recibe una solicitud de confirmacin, enva un comando de preparacin a todos los administradores de recursos implicados en la transaccin. Cada administrador de recursos hace lo necesario para que la transaccin sea duradera y todos los bferes que contienen imgenes del registro de la transaccin se pasan a disco. A medida que cada administrador de recursos completa la fase de preparacin, notifica si la preparacin ha tenido xito o no al administrador de transacciones. Fase de confirmacin Si el administrador de transacciones recibe la notificacin de que todas las preparaciones son correctas por parte de todos los administradores de recursos, enva comandos de confirmacin a cada administrador de recursos. A continuacin, los administradores de recursos pueden completar La confirmacin. Si todos los administradores de recursos indican que la confirmacin ha sido correcta, el administrador de transacciones enva una notificacin de xito a la aplicacin. Si algn administrador de recursos inform de un error al realizar la preparacin, el administrador de transacciones enva un comando para revertir la transaccin a cada administrador de recursos e indica a la aplicacin que se ha producido un error de confirmacin. Las aplicaciones de Database Engine (Motor de base de datos) pueden administrar transacciones distribuidas a travs de Transact-SQL o de la API de base de datos.

Potrebbero piacerti anche