Sistema transaccional
Sistema transaccional automático
Una transacción es cualquier operación que implique escritura en disco.
En Velneo vServer V7
En el desarrollo de aplicaciones empresariales, la seguridad de la información es uno de los apartados más críticos. No olvidemos que el valor de la información es muy superior al de las aplicaciones.
Por este motivo uno de los apartados básicos en cualquier base de datos es la gestión de transacciones. Seguramente te habrás encontrado con bases de datos en las que la gestión de transacciones requiere una programación manual en la que debes encargarte de los COMMIT y los ROLLBACK.
Nunca debemos de perder de vista el impacto que puede ocasionar en una aplicación una mala gestión de los bloqueos de registros. Dependiendo de la base de datos, estos bloqueos pueden ser a nivel de tabla completa, bloques de registros, registro o incluso a nivel de campo.
Con Velneo V7 podemos olvidarnos de la programación de transacciones ya que éstas se gestionan de forma automática, tanto la transacción como los bloqueos. La base de datos de Velneo V7 cumple las propiedades ACID para la gestión de transacciones seguras. En el caso de las transacciones el servidor las crea, destruye y deshace en caso de no finalizar correctamente, todo sin necesidad de escribir una sola línea de código. Además gestiona las transacciones de forma individual por cada tarea, incluso si un usuario está ejecutando múltiples tareas cada una de ellas es tratada de forma individual pudiendo deshacer una con independencia de que las demás terminen correctamente.
Además el sistema transaccional contempla el control del denominado abrazo de la muerte que no es otra cosa que resolver el conflicto que se produce cuando 2 procesos intentan a la vez actualizar un registro bloqueado por el otro proceso. El servidor lo detecta, deshace una de las transacciones y deja continuar a la otra, a continuación reintenta la ejecución del proceso cuya transacción deshizo, y si tras varios intentos le resulta imposible su ejecución, notifica al usuario de la imposibilidad de ejecutar la tarea. Todo esto sin necesidad de escribir ninguna línea de código.
Por último, el gestor de bloqueos de Velneo también es automático y realiza el control de los mismos aplicando una técnica mixta denominada bloqueo blando y bloqueo duro. Ver el capítulo dedicado al Sistema de bloqueos para ampliar la información al respecto.
Transacciones desatendidas
Una transacción desatendida se produce cuando se inicia una transacción y al cabo de cierto tiempo no realiza operaciones, ni crea registros ni los modifica, etc. El servidor entiende que ha sucedido algún error con esa transacción y la deshace de forma automática al cabo de un tiempo.
Esto puede venir motivado porque durante un proceso se haya solicitado información al usuario final y esté esperando respuesta durante demasiado tiempo, se haya cortado la conexión, etc. El servidor en esos casos ha de deshacer la transacción iniciada.
Esto es debido a que un proceso que realiza operaciones en disco, es decir, modifica registros de las tablas, ha de bloquearlos durante todo el tiempo dure la transacción, siendo desbloqueados al finalizar.
Y el servidor debe desbloquearlos a fin de que otros usuarios tengan acceso a esos mismos registros, por lo que deshará una transacción desatendida, teniendo en cuenta ciertos parámetros.
Así, por ejemplo, un usuario puede estar modificando un registro con un formulario desde un proceso, o una serie de registros, por lo que ha iniciado una transacción y puede tener el proceso en espera mientras realiza unas tareas. Si el usuario no realiza una operación en un plazo máximo que ronda 6 minutos, los registros bloqueados permanecerán bloqueados en exclusiva para esa transacción, esto quiere decir que no podrán ser bloqueados desde otras transacciones. Pasado ese tiempo de 6 minutos, el usuario ya no tendrá la exclusiva sobre los registros bloqueados, pero el servidor le permitirá tener abierta la transacción pese a estar desatendida, siempre y cuando otro usuario no intente acceder a alguno de los registros que se encuentran bloqueados por esa transacción. Únicamente en el caso de que otro usuario intente realizar una modificación de uno de los registros que se encuentran bloqueados por el otro usuario, entonces el servidor deshará la transacción desatendida a fin de responder a los requerimientos del otro usuario.
La transacción desatendida no estará tampoco eternamente abierta, si no que el servidor al cabo de un tiempo, largo, del orden de horas, se encargará de deshacer todas aquellas transacciones que se encuentren desatendidas.
