La simultaneidad hace referencia al uso compartido de recursos por
parte de diversos usuarios interactivos o programas de aplicación al mismo
tiempo. DB2
Everyplace
soporta las transacciones simultáneas, lo que permite a una aplicación
establecer varias conexiones distintas con la misma base de datos.
Al desarrollar este tipo de aplicación, tenga cuidado para
evitar efectos no deseados como, por ejemplo:
- Pérdida de actualizaciones. Es posible que dos aplicaciones, A y B,
lean la misma fila de la base de datos y que ambas calculen nuevos valores para
una de sus columnas basándose en los datos que dichas aplicaciones lean. Si A
actualiza la fila con su nuevo valor y luego B también actualiza la fila, la
actualización realizada por A se perderá.
- Acceso a datos no confirmados. Es posible que la aplicación A actualice
un valor en la base de datos y la aplicación B lea este valor antes de que se
confirme.
Entonces, si el valor de A no se confirma posteriormente sino que se
retrotrae, los cálculos realizados por B se basarán en datos no confirmados (y
supuestamente no válidos).
- Lecturas no repetibles. Algunas aplicaciones implican la siguiente
secuencia de sucesos: la aplicación A lee una fila de la base de datos y, a
continuación, pasa a procesar otras peticiones de SQL. Mientras tanto, la
aplicación B modifica o suprime la fila y confirma el cambio. Posteriormente,
si la aplicación A intenta volver a leer la fila original, recibirá la fila
modificada o descubrirá que la fila original se ha suprimido.
- Lecturas fantasma. El fenómeno de las lecturas fantasma se
produce cuando:
- La aplicación ejecuta una consulta.
- Otra aplicación inserta o actualiza datos que satisfacen los criterios de
consulta de la aplicación.
- La aplicación repite la consulta del paso 1 (dentro de la misma unidad de
trabajo), pero el conjunto de resultados es diferente porque incluye filas
"fantasma" adicionales insertadas o actualizadas por la otra aplicación.
Este comportamiento se puede evitar en una aplicación de DB2 Everyplace gestionando bloqueos y niveles de
aislamiento. Si la aplicación no necesita múltiples conexiones de base de datos,
se pueden evitar todos los problemas de simultaneidad inhabilitando el acceso
compartido por completo. Por ejemplo, el método connect de la interfaz java.sql.Driver
soporta ENABLE_SHARED_DATABASE_ACCESS, una propiedad booleana que se puede establecer en
false para inhabilitar el acceso simultáneo. DB2
Everyplace
soporta propiedades y métodos similares para otros lenguajes. Para obtener
más información, consulte la documentación de consulta.