Procesos de solicitud, transacciones, concurrencia y recuperación
Todos los programas SQL se ejecutan como parte de un proceso de aplicación, que implica la ejecución de uno o más programas. Procesos de aplicaciones diferentes pueden implicar la ejecución de programas diferentes o la ejecución del mismo programa en distintos momentos. Cuando una aplicación interactúa con una base de datos de Db2 , se inicia una transacción.
Muchos tipos diferentes de programas acceden a los datos de Db2: aplicaciones escritas por el usuario, sentencias SQL que los usuarios entran dinámicamente e incluso programas de utilidad. El término único que describe cualquier tipo de acceso a los datos de Db2 se denomina proceso de aplicación. Todos los programas de SQL se ejecutan como parte de un proceso de aplicaciones.
Una transacción es una secuencia de acciones entre la aplicación y la base de datos; la secuencia se inicia cuando se leen datos de la base de datos o se escriben datos en ella. Una transacción también se denomina unidad de trabajo.
Por ejemplo, considere lo que sucede cuando acceda a los fondos de una cuenta bancaria. Una transacción bancaria puede implicar la transferencia de capital de una cuenta a otra. Durante la transacción, un programa de aplicación primero resta el capital de la primera cuenta y, a continuación, lo añade el capital a la segunda cuenta. Después del paso de resta, los datos son incoherentes. La coherencia se restablece después de añadir el capital a la segunda cuenta.
Para garantizar la coherencia de los datos, Db2 utiliza diversas técnicas que incluyen una operación de confirmación, una operación de retrotracción y un bloqueo.
Cuando los pasos de resta y adición de la transacción bancaria se han completado, la aplicación puede utilizar la operación de confirmación para finalizar la transacción y, de este modo, los cambios pasan a estar disponibles para otros procesos de aplicaciones. La operación de confirmación hace que los cambios realizados en la base de datos sean permanentes.
Considere lo que sucede si más de un proceso de aplicaciones solicita acceder a los mismos datos al mismo tiempo. O, en determinadas circunstancias, una sentencia de SQL puede ejecutarse simultáneamente con un programa de utilidad en el mismo espacio de tablas. Db2 utiliza bloqueos para mantener la integridad de los datos en estas condiciones y evitar, por ejemplo, que dos procesos de aplicación actualicen la misma fila de datos simultáneamente.
Db2 adquiere bloqueos para evitar que los cambios no confirmados que realiza un proceso de aplicación sean percibidos por otro. Db2 libera automáticamente todos los bloqueos que ha adquirido en nombre de un proceso de solicitud cuando finaliza dicho proceso, pero un proceso de solicitud también puede solicitar explícitamente que los bloqueos se liberen antes. Una operación de confirmación libera los bloqueos que un proceso de aplicaciones ha adquirido y confirma los cambios realizados en la base de datos por el mismo proceso.
Db2 también proporciona un modo de retroceder cambios no confirmados que realiza un proceso de aplicación. Puede ser necesaria una restitución en el caso de una anomalía en la parte de un proceso de aplicaciones o en una situación de punto muerto. Un punto muerto se produce cuando la contienda por la utilización de un recurso como, por ejemplo, una tabla, no se puede resolver. Sin embargo, un proceso de aplicaciones puede solicitar explícitamente que se restituyan los cambios que ha realizado en la base de datos. Esta operación se denomina retrotracción. La interfaz que un programa de SQL utiliza para especificar explícitamente estas operaciones de confirmación y de retrotracción depende del entorno. Por ejemplo, en el entorno JDBC las aplicaciones utilizan métodos de confirmación y retrotracción para confirmar o retrotraer transacciones.