Altova MapForce 2024 Enterprise Edition

Al asignar datos a bases de datos, es posible que encuentre errores relacionados con la BD (p.ej., puede que la cuenta de la base de datos no tenga los privilegios suficientes para ejecutar una acción específica de BD). Para evitar que estos errores cancelen la ejecución de una asignación de datos, puede configurar la reversión de transacciones que le permitirán revertir cualquier cambio. Puede habilitar las transacciones a nivel de la base de datos, a nivel de acciones de tabla, y a nivel de procedimientos almacenados.

 

En este apartado, se describen algunos escenarios que pueden ocurrir al revertir transacciones. Todos los casos en este apartado presentan un archivo de fuente XML llamado Authors.xml y una BD de destino llamada BookCatalog.sqlite (ver la siguiente asignación). Las tablas Authors y Books están vinculadas por una relación de clave foránea. La tabla Author es la tabla principal de la tabla Books.

MF_DBTransactionRollback01

En todos los casos, se han configurado las mismas acciones de tabla de BD:

 

La combinación de las acciones de tablas Actualizar si e Insertar restantes en la tabla Authors. La condición Actualizar si se configura en la columna Author.

La combinación de las acciones de tablas Actualizar si e Insertar restantes en la tabla Books. La condición Actualizar si se configura en la columna Title.

 

Además, se ha habilitado el seguimiento a nivel de los componentes (configurado Siempre), en la tabla Authors (Usar configuración de componentes) y en la tabla Books (Usar configuración de componentes). Las configuraciones de la reversión de transacciones dependerán del caso.

 

Resumen general de casos

A continuación enumeramos los casos descritos en este apartado:

 

Caso 1: Si hay un registro Author erróneo, este registro principal y sus registros secundarios relacionados se revertirán. Si hay un registro Book defectuoso, solamente este registro secundario se revertirá.

Caso 2: Si hay un registro Author erróneo, este registro principal y sus registros secundarios relacionados se revertirán.

Caso 3: Si hay un registro Book defectuoso, solamente este registro secundario se revertirá.

Caso 4: Si un registro Book no se puede insertar, se revertirá su registro principal (similar al caso 2).

Caso 5: Si se produce un error relacionado con la BD, todos los cambios realizados en la BD se revertirán.

 

Caso 1: Revertir Author actual y Book actual

En el primer caso, habilitamos la gestión de transacciones a nivel de acciones de tabla: La opción Revertir transacción actual y continuar está configurada en ambas tablas de la BD. La combinación de estas configuraciones significa que (i) si hay un registro Author erróneo, ni este registro ni sus registros secundarios Book se insertarán en la base de datos, y después se iniciará el procesamiento del siguiente registro; (ii) si hay un registro Book erróneo, pero su registro principal Author es válido, solamente el registro Book erróneo se revertirá, e iniciará el procesamiento del siguiente registro.

 

Authors.xml

El archivo Authors.xml contiene informaciones sobre autores/autoras y sus libros. En uno de los registros Author falta la información sobre el país del autor o de la autora. El archivo de origen también contiene un registro Book que carece de información sobre el editor.

 

BookCatalog.sqlite

Hemos configurado una restricción NOT NULL en la columna Country de la tabla Authors y en la columna Publisher de la tabla Books. Esto significa que si se asignan valores NULL a estas columnas, se genera un error.

 

Resultados

Después de ejecutar el script SQL en el panel Resultados, aparece el siguiente cuadro de diálogo:

MF_DBTransactionRollback02

El cuadro de diálogo Excepción de transacción de BD nos informa sobre un error relacionado con la BD y el motivo de este error. En este ejemplo, no se ha podido insertar un valor NULL en la columna Country de la tabla Authors (ver rectángulo anterior). Este cuadro de diálogo también permite elegir la siguiente acción. Por defecto se selecciona la acción configurada en el cuadro de diálogo Acciones de tablas de BD. También se puede aplicar la misma configuración a todos los errores posteriores o revertir la transacción errónea y detener la operación.

 

Después de confirmar la selección, recibiremos un mensaje sobre otro error que ha ocurrido en la tabla Books (ver imagen siguiente). Este error se ha producido porque la asignación ha intentado insertar la información ausente de Publisher de uno de nuestros registros Book en el campo Publisher de la tabla Books. Dado que el error se ha producido en la tabla secundaria, es posible revertir la transacción actual (Revertir esta transacción y detener/continuar) o todos los cambios hasta el nivel superior (Revertir transacción de nivel superior y detener/continuar). En este contexto, la transacción de nivel superior es el registro principal (Author) del registro secundario defectuoso (Book).

 

Si hay varios niveles en la jerarquía, se realizará una reversión para cada nivel hasta que se alcance el nivel superior en el que se haya habilitado la gestión de transacciones. En función de sus necesidades, la asignación se detendrá o pasará a ejecutar el siguiente componente. La opción Revertir transacción de nivel superior y continuar/detener aparece solamente si hay transacciones anidadas. Para más información sobre cómo revertir transacciones de nivel superior, véase el caso 4 más abajo.

MF_DBTransactionRollback03

En este ejemplo, dejamos la opción de reversión de transacciones mostrada en la imagen anterior tal y como está. Una vez finalizado el procesamiento de todos los registros, podemos ver las instrucciones SQL generadas en el panel Resultados, el informe de seguimiento en formato XML y los datos que están ahora disponibles en la BD.

 

Instrucciones SQL generadas

A continuación se puede ver un extracto del script SQL generado. La operación de inserción errónea se ha revertido al SAVEPOINT (punto de recuperación). El comando SAVEPOINT representa un punto de recuperación al cual la transacción se retrocederá. El comando SAVEPOINT permite deshacer los cambios realizados después del SAVEPOINT y restaurar la transacción al estado del SAVEPOINT.

MF_DBTransactionRollback05

Informe de seguimiento

A continuación se ilustra un extracto del informe de seguimiento. El informe de seguimiento muestra los campos junto con sus valores monitorizados (p.ej., <Price>8.6</Price>), da información sobre las acciones realizadas (p.ej., insertar) y el error ocurrido (ver el elemento trace:error).

 

<Books>

<trace:values>

<Title>Cockroaches</Title>

<AuthorID>41</AuthorID>

<ISBN>0099590328</ISBN>

<Publisher xsi:nil="true"/>

<NumPages>464</NumPages>

<Year>2016</Year>

<Genre>Crime &amp; Mystery</Genre>

<Price>8.6</Price>

</trace:values>

<trace:actions>

<trace:update rows-affected="0"/>

<trace:insert>

<trace:error code="19" state="1299">La restricción NOT NULL ha fallado: Books.Publisher</trace:error>

</trace:insert>

</trace:actions>

</Books>

 

Datos actualizados en la BD

En el panel de consulta de BD, puede consultar qué datos están disponibles en la BD actualmente. El extracto de la tabla Books que aparece a continuación muestra que se han insertado correctamente varios registros nuevos. Como la inserción de uno de los libros de Jo Nesbo ha dado error (ver informe de seguimiento anterior), sólo se han asignado dos de sus tres libros (The Bat y The Redbreast).

MF_DBTransactionRollback04

 

Otros casos posibles

A continuación se describen otros casos posibles.

 

Caso 2: Revertir Author actual y todos sus Books

En este caso, la opción Revertir transacción actual y continuar se establece sólo en la tabla Authors. Con esta configuración, cada registro Author y los registros Book correspondientes se consideran una operación atómica. Si hay un registro Author defectuoso o si al menos uno de los libros del autor es erróneo, este registro principal y sus registros secundarios relacionados se revertirán. Después, el procesamiento seguirá con el siguiente registro Author.

 

Caso 3: Revertir solamente el Book actual

En este caso, la opción Revertir transacción actual y continuar se establece sólo en la tabla Books. Si hay un registro Book erróneo, solamente este registro Book se revertirá, pues se iniciará el procesamiento del siguiente registro. Si configura la opción Revertir transacción de nivel superior y continuar en la tabla Books y ninguna otra opción de gestión de transacciones en el nivel principal, también se revertirá sólo el registro Book defectuoso. En este caso no hay diferencia entre revertir la transacción superior y la actual, porque sólo hay un único nivel de transacción y no hay anidamiento de transacciones.

 

Caso 4: Revertir Author si no se puede insertar Book

En este caso, la transacción de la tabla Authors se ha configurado en Revertir transacción actual y continuar, mientras para la tabla Books se ha seleccionado Revertir transacción de nivel superior y continuar. Con esta configuración, si falla la inserción de un registro secundario, la transacción se revertirá en cada nivel de la jerarquía, hasta el nivel superior en el que se haya habilitado la gestión de transacciones. Por ejemplo, queremos insertar un nuevo registro Author (Jo Nesbo) y sus tres registros secundarios. En uno de los registros Book (The Cockroaches), falta la información sobre el editor. Dado que la tabla Books tiene una restricción NOT NULL en la columna Publisher, la asignación de un valor null a este campo provocará un error. En este caso, cuando se produce un error, el registro Book defectuoso (The Cockroaches) se revertirá junto con los otros dos registros Book y el registro principal. Después, el procesamiento continuará con el siguiente registro Author.

 

La combinación de las opciones de gestión de transacciones descritas en este caso es especialmente relevante cuando se trata de estructuras anidadas más complejas (p.ej., una tabla principal con dos o más tablas secundarias).

 

Caso 5: Revertir todas las transacciones de BD y continuar

En este caso, la opción Revertir transacción de nivel superior y continuar se establece a nivel de componente de BD. Esta opción puede ser útil si se trata de una asignación encadenada (p.ej., XML-BD-JSON). Si se produce un error relacionado con la BD, todos los cambios realizados en el componente de BD se revertirán y el procesamiento continuará con el componente JSON.

 

© 2017-2023 Altova GmbH