|
|
|
|
- Presentación
- Gestión de las transacciones mediante programación
- Implementación de la gestión de las transacciones
- Resumen tabla de las funciones WLanguage utilizadas (para una base de datos HFSQL ISAM o Cliente/Servidor)
- Manipular registros durante una transacción: las reglas a seguir
- Utilizando las transacciones cortas
- Bloqueo de los registros en modo de lectura
- Realizar una transacción a la vez
- No se debe utilizar ninguna interfaz de usuario (ventana, reporte, página, ...) entre el inicio y el final de una transacción.
- La cancelación de una transacción puede fallar ocasionalmente debido a violaciones de las restricciones de integridad y/o duplicar las violaciones de las restricciones..
- Errores específicos de la gestión de las operaciones
- Gestión de casos especiales
- Fallo de alimentación
- Consejo: restauración de la consistencia de la base de datos
- Error durante el uso del programa
- Borrar el registro de transacciones
- Diferencias de comportamiento entre las transacciones ISAM y Cliente/Servidor
- Gestión avanzada
- Transacción: Los archivos creados
- Identificador de el equipo que realiza la transacción
- Transacciones y contexto HFSQL independiente
Transacciones: Procesos secure en archivos de datos HFSQL
Disponible solo con estos tipos de conexión
Este capítulo abarca los siguientes temas: Gestión de las transacciones mediante programación Implementación de la gestión de las transacciones - Si sus archivos de datos están protegidos por una contraseña, abra todos los archivos de datos utilizados durante la transacción antes del inicio de la misma o especifique las diferentes contraseñas con HPass.
Si sus archivos de datos no están protegidos por contraseña, los archivos de datos manejados después de HTransactionStart (o HTransaction) se pondrán automáticamente en transacción. - Inicie la operación con HTransactionStart o HTransaction.
- Realice sus operaciones. Todas las operaciones de escritura realizadas en los ficheros de datos de la transacción se graban automáticamente en el fichero de transacción.. Atención: los procesos realizados son más lentos (porque cada operación se guarda en un archivo de datos específico).
- Cancel (si es necesario) las operaciones realizadas durante la transacción (HTransactionCancel.
- Especifique el fin de la transacción con HTransactionEnd: se valida la transacción.
Observaciones: - El modo de aislamiento de transacciones utilizado es "READ UNCOMMITED".
- El modo de aislamiento de las transacciones se define con HTransactionIsolation. El modo de aislamiento de Default es el modo "READ UNCOMMITED".
- Las transacciones no están disponibles para los archivos de datos de Hyper File 5.5.
Resumen tabla de las funciones WLanguage utilizadas (para una base de datos HFSQL ISAM o Cliente/Servidor) Manipular registros durante una transacción: las reglas a seguir Utilizando las transacciones cortas Los registros utilizados durante la transacción se bloquean automáticamente en modo de escritura para evitar que los otros ordenadores modifiquen los datos afectados y, por tanto, para secure la transacción. En una aplicación de red, si otro usuario intenta modificar un Record en una transacción, la gestión de cerraduras de automatic permitirá a este usuario a Cancel o reintentar la operación. Por lo tanto, la transacción debe ser lo más corta posible para evitar bloquear a los usuarios. Bloqueo de los registros en modo de lectura Todas las modificaciones realizadas durante una transacción son Visible de todos los ordenadores (en una red por ejemplo) antes del final de la transacción. Los otros ordenadores pueden leer los datos con una duración limitada (si la transacción es cancelada por HTransactionCancel, por ejemplo). Por lo tanto, le recomendamos encarecidamente que bloquee los registros relevantes en el modo de lectura. Realizar una transacción a la vez Una aplicación debe realizar una sola transacción a la vez. No se debe realizar ninguna transacción en hilos simultáneos o en contextos HFSQL independientes. No se debe utilizar ninguna interfaz de usuario (ventana, reporte, página, ...) entre el inicio y el final de una transacción. Para anular una operación mediante un botón, utilice una "validación de automatic" control Botón durante un corto período de tiempo. Esto le permite evitar posibles interacciones con los datos manejados desde otros ordenadores de la red. La cancelación de una transacción puede fallar ocasionalmente debido a violaciones de las restricciones de integridad y/o duplicar las violaciones de las restricciones.. Ejemplo 1: Violación de las restricciones duplicadas - El archivo de datos de A manejado por una transacción contiene una clave única.
- Un ordenador A realiza una transacción durante la cual se borra un Record de este archivo de datos.
- Al mismo tiempo, un ordenador B añade un nuevo Record en el mismo fichero de datos con el mismo valor de clave única que el Record borrado por el equipo A.
- La cancelación de la transacción en este momento provocará un error duplicado en la clave única..
Solución 1: Intente Cancel la transacción de nuevo con WDTrans (o WDOptimizer). Esta herramienta permite ignorar los errores de duplicación y/o los errores de integridad ("Desactivar la gestión de la integridad" y "Desactivar la gestión de los duplicados" en el asistente para cancelar las transacciones). Solución 2: Utilice HSetDuplicates antes de cancelar la transacción. Esta función permite ignorar temporalmente la gestión de duplicados.. En este caso, no olvide volver a activar la gestión de duplicados estableciendo el parámetro en True después de cancelar la transacción. A continuación, debe verificar los registros incorrectos y modificarlos en consecuencia. Ejemplo 2: Violación de las restricciones de integridad - El archivo de datos del CLIENTE de A es relacionado a un archivo de datos de PEDIDOS (relacionado en una llave)
- El ordenador A A realiza una transacción durante la cual un Record se añade al archivo del CLIENTE.
- Al mismo tiempo, un equipo B agrega un nuevo registro al archivo de datos ORDERS relacionado con el registro agregado al archivo de datos CUSTOMER.
- La cancelación de la transacción en este preciso momento provocará un error de integridad porque el Record agregado al archivo de datos de PEDIDOS no tendrá ningún vínculo con el Record borrado del archivo de datos de CLIENTES (la adición al archivo de CLIENTES habrá sido cancelada).
Solución 1: Intente Cancel la transacción de nuevo con WDTrans (o WDOptimizer). Esta herramienta permite ignorar los errores de duplicación y/o integridad (marque "Desactivar la gestión de la integridad" y "Desactivar la gestión de los duplicados" en el asistente para cancelar las transacciones). Solución 2: Utilice HSetIntegrity antes de cancelar la transacción. Esta función permite ignorar temporalmente los errores de integridad (estableciendo el parámetro en False). En este caso, no olvide volver a activar la gestión de la integridad estableciendo el parámetro en True después de cancelar la transacción. A continuación, debe verificar los registros incorrectos y modificarlos en consecuencia. Consejo: Plan para este tipo de conflictos en sus programas y al crear archivos de datos en el editor de análisis. - Los errores de duplicación no se producirán si se utilizan claves únicas cuyo tipo sea el identificador automatic.
- Si manipula las claves únicas manualmente (sin identificadores automáticos), debe establecer un valor único para todos los equipos al agregar o modificar registros (con las funciones HAdd y HModify).
Recordatorio: Por defecto, para cada Record que presenta un problema, el motor HFSQL propone la gestión asistida de los errores: una ventana usada para arreglar los conflictos duplicados.
Errores específicos de la gestión de las operaciones - 70031: Operación no permitida en la transacción
Está utilizando una función que no está permitida durante una operación.. Por ejemplo, HTransactionStart (o HTransaction) se utiliza en medio de una transacción. - 70034: La última transacción falló
Usted está tratando de utilizar un Record que pertenece a una transacción fallida (corte de energía, ...). El programa se reinicia pero la transacción no se cancela.. En este caso, le recomendamos que Cancel la transacción que falló (ver más abajo). - 74020: La clave de acceso del fichero de transacción no corresponde a la clave de acceso del fichero fuente.
El archivo de datos (en modo HFSQL Client/Server) y el archivo de transacciones no utilizan la misma contraseña. - 70032: Problema del modo de aislamiento
Este error puede ocurrir en los siguientes casos:
Gestión de casos especiales Si se produce una avería (corte de corriente, reinicio,...) durante una transacción, los archivos de datos pueden dañarse.: la transacción no fue ni validada ni cancelada. El archivo de la transacción se encuentra todavía en el equipo. En este caso, se restaurará la consistencia de la base de datos: Atención: Restaurar la integridad de la base de datos puede llevar un tiempo. Observación: Para saber si hay que restaurar la consistencia de la base de datos, compruebe el resultado de HTransactionInterrupted en el código de inicialización del proyecto (por ejemplo). Consejo: restauración de la consistencia de la base de datos Para restaurar la consistencia de la base de datos, le aconsejamos que realice las siguientes operaciones: - Comprueba el resultado de HTransactionInterrupted en el código de inicialización del proyecto, por ejemplo.
- Si la transacción se interrumpió, realice una de las siguientes operaciones para restaurar la consistencia de la base de datos:
Ejemplo: IF HTransactionInterrupted() = True THEN IF Confirm("The transaction performed by computer " + H.TrsPost + ... " was interrupted. " + ... "Do you want to restore the consistency of data files?") = True THEN // Cancels the interrupted transactions IF HTransactionCancel() = False THEN Error("Unable to cancel the transaction") END END END
Otra solución: El error 70034 también puede ser tratado en la Event de "Inicialización" del proyecto utilizando la palabra clave WHEN EXCEPTION. Por lo tanto, cuando se produzca el error 70034, la consistencia de la base de datos será restaurada por HTransactionCancel, o por HTransactionStart/ HTransactionEnd. Observación: Después de un corte de energía, le recomendamos que vuelva a indexar los archivos de la aplicación. Error durante el uso del programa Cuando la aplicación se detiene debido a una división de programación Error( por cero, por ejemplo), la transacción actual se cancela automáticamente. Borrar el registro de transacciones El registro de transacciones es un archivo HFSQL creado y presente sólo durante el tiempo de la transacción. No debe eliminar este archivo por temor a problemas de integridad de la base de datos.. Diferencias de comportamiento entre las transacciones ISAM y Cliente/Servidor | | | | Comportamiento en HFSQL Classic | Comportamiento en HFSQL Client/Server |
---|
Creación de un archivo de datos durante una transacción (HCreation). | | Si se cancela la transacción, el archivo de datos vuelve a estar vacía. | Cierre de un archivo de datos durante una transacción (HClose). | La transacción se interrumpe. | La transacción no se cancela. | Desbloquear un Record o un archivo de datos durante una transacción. | El bloqueo de las transacciones se cancela. La transacción se interrumpe. | Desbloquear un Record o un archivo de datos La transacción no se cancela. | Ejecutar una consulta INSERT/UPDATE. | La transacción se interrumpe. | La transacción no se cancela. |
Transacción: Los archivos creados Se crean dos tipos de archivos de datos HFSQL al implementar las transacciones: - el registro de operaciones en transacción: Fichero temporal en formato HFSQL que contiene las diferentes operaciones realizadas sobre los ficheros de aplicación que tiene en cuenta la transacción.. Este archivo se crea con HTransactionStart (o con HTransaction). Por Default, se llama <Nombre del proyecto>_$TRS_OPERATION.TRS. Este nombre puede modificarse con HTransactionStart (o HTransaction).
Este archivo se llama TRSOPERATION.TRS. - el registro de valores: Archivo temporal associated con cada archivo de datos que se tiene en cuenta en la transacción. Este archivo se llama <Nombre del archivo de datos>_$$_TRSVAL.TRX. Para cada operación realizada en la transacción, este fichero contiene:
- el contenido de la Record después de la operación (durante una supresión por ejemplo)
- el contenido de la Record después de la operación (durante una adición por ejemplo)
Este archivo se llama <Nombre del archivo de datos>.TRX.
Estos archivos pueden ser tratados por WDTRANS o WDOptimizer.
Identificador de el equipo que realiza la transacción De forma predeterminada, el equipo está identificado con un número único y el nombre del equipo (definido en Windows). Para identificar fácilmente a el equipo que realiza las operaciones en la transacción, se utiliza HComputer para definir un identificador propio de el equipo. Este identificador sustituye al nombre de el equipo. Este identificador se guarda en el registro de operaciones en transacción y se puede consultar con WDTRANS. Transacciones y contexto HFSQL independiente Al copiar un contexto, si una transacción está en curso en el primer contexto, el nuevo contexto no está en la transacción.. Debe llamar a HTransactionStart (o HTransaction) para iniciar una transacción en el nuevo contexto.
Esta página también está disponible para…
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|