Refrescar tabla DB2 después de actualizar

Todo lo relacionado a DB2 y otras bases de datos bajo z/OS o VSE o z/VM
Responder
esparragow

Refrescar tabla DB2 después de actualizar

Mensaje por esparragow » 24 Jun 2013, 11:50

Buenos días,

Tengo un problemilla un tanto extraño con una ejecución en un JCL, la secuencia es la siguiente:

1 - Realizo un UNLOAD de una tabla DB2.
2 - Con el fichero de descaga se seleccionan registros que pasan a un programa y se realiza UPDATE sobre ellos. La query de la actualización no está muy optimizada, pero está todo lo que puede estar, ya que no puedo ir por índices al realizar la actualización.
3 - Después del programa, realizo una nueva descarga de la tabla DB2 para comprobar que los datos han sido actualizados correctamente.

El problema es que la descarga del paso 1 y 2 salen exactamente iguales, habiendo realizado correctamente la actualización entre medias. Sé que sale bien, porque si espero un rato y pido una nueva descarga, entonces si me aparecen los cambios.
He mirado los libros y manuales que tengo de DB2, y no he encontrado nada claro de como realizar un refresco de una tabla DB2 antes de actualizar, no sé si el QUIESCE llega a hacer este refresco, y la sentencia REFRESH que he visto, no se utiliza en mi sistema, no sé si está permitada, pero solo se realiza sobre Bases de datos enteras, y no sería buena opción.
En el paso 2 no tengo un COMMIT en el programa, pero debería de estar implícito en la sentencía GOBACK del programa.

¿Conocen alguna manera de refrescar esa tabla DB2 en un JCL?

Muchas gracias de antemano.

esparragow

Re: Refrescar tabla DB2 después de actualizar

Mensaje por esparragow » 25 Jun 2013, 18:18

Bueno, después de muchas vueltas, creo que ya he descubierto porque está pasando eso, pero no estoy seguro, quizás alguien me lo pueda confirmar.

Los dos UNLOAD se están haciendo del TABLESPACE en lugar de la tabla, y creo recordar que, y aquí es donde dudo, que al realizar el UNLOAD del TABLESPACE lo que estoy descargando es una imagen espejo de la tabla, por eso en los pasos de descarga estoy descargando los mismos datos, porque estoy descargando el mismo espejo, cuando entre medías si que se ha actualizado la tabla de verdad, aunque no ha dado tiempo a reflejarse en el TABLESPACE.

No lo he podido comprobar, porque ya no puedo ejecutar el proceso, pero eso que comento es así o ¿me equivoco en algo?

Muchas gracias.

Horacio Villa

Re: Refrescar tabla DB2 después de actualizar

Mensaje por Horacio Villa » 01 Jul 2013, 15:54

Lo que habría que preguntarse en este caso, si no entiendo mal el problema, es con qué proceso se está realizando el Unload.
Si es un utilitario que accede directamente al VSAM y los datos quedaron en los buffers del subsistema DB2, esto explicaría el problema.
Un QUIESCE siempre refresca los datos del VSAM, haciendo flush de todos los buffers al VSAM. El COMMIT podría estar implícito en el GOBACK del programa, si éste es el principal; caso contrario, si fué llamado por otro, el GOBACK no realiza COMMIT.

Responder