Ejecutar archivos SQL desde CLP de DB2

Tenemos la necesidad de subir controles de cambios en nuestra base de datos IBM DB2 tenemos un conjunto de sentencias SQL tales como DML o DDL que desean ejecutar como un archivo utilizando el CLP de DB2.

Si alguna de las sentencias contenidas en el archivo falla, es necesario revertir cada instrucción ejecutada con éxito y dejar la base de datos en su estado original. ¿Cómo haces esto?

La respuesta corta es evitar cualquier cambio de estado en la conexión al momento de ejecutar el archivo usando la opción -f del CLP.

Tenemos que tener en cuanta que cualquier sentencia explicita dentro del archivo que pueda comprometer los cambios, cerrar la conexión confirmar todos los cambios hasta ese momento, independientemente de lo que haya designado para la sesión.

Si permanece conectado al final del procesamiento de un archivo usando las opciones +c -s -t  -f, puede revertir de forma explícita las transacciones que sucedieron antes del momento del fallo.

Algunas de las sentencias que no podemos soportar dentro de nuestro archivo son QUIT, CONNECT RESET , COMMIT, TERMINATE.

Para el siguiente ejercicio vamos a crear una tabla:

Vamos a crear un archivo CAMBIOS_DML_DDL.sql, con las siguientes sentencias DDL y DML a ejecutar:

Ahora vamos a desarrollar un pequeño script de linux para ejecutar el fichero.

Como vemos en el script el CLP de db2 nos retorna un “exit status” con los resultados de la transacción. Estos son algunos de los valores de “db2 exit status”:

  • 8 on system error
  • 4 db2 error (constraint violation, object not found etc)
  • 2 db2 warning
  • 1 no rows found

Como podemos ver con las opciones de CLP de db2, controlando el db2 exit status y asegurando que nuestro fichero DDL o DML no tenga sentencias que puedan comprometer la transaccional podemos realizar cambios de forma automática y reversar en caso de algun fallo.

 

Comments are closed.