Limpieza en archivos de base de datos (I)
Javier Mora   17 Abril 2009
En mi último artículo intenté proporcionar un punto de inicio para aquéllos que estuvieran interesados en conocer y trabajar con las APIs del sistema operativo ¿i? (vamos OS/400). Apunté algunos enlaces de la Web en donde se podrían obtener decenas de artículos y ejemplos de uso. Además, facilité una serie de fuentes con los prototipos y estructuras de datos para manejar las APIs desde ILE RPG. Aunque no están bajo ningún tipo de licencia, pueden distribuirse libremente siempre que se respete su autoría.

En aquella ocasión no di ningún ejemplo, ni tampoco era mi intención. Por experiencia, sé que empezar a trabajar con APIs puede resultar confuso y dificultoso, no es un camino allanado. Hoy os propongo una pequeñísima utilidad que hace uso de algunas APIs, que es utilizable y, además, puede estudiarse su código para aquéllos que quieran conocer sus tripas.

Image:Limpieza en archivos de base de datos (I)

Presentación en sociedad  

Esta utilidad la he llamado Limpiar miembro de archivo físico (CLNPFM) en forma de mandato del sistema. Su función consiste en eliminar, de forma selectiva, un grupo de registros de un archivo y, si se requiere, guardarlos en un archivo de seguridad. Este mandato lo llevo utilizando muchos años y se emplea para eliminar registros de años anteriores de las bibliotecas de producción. En mi caso, no tengo desglosados los años en ficheros distintos y en bibliotecas distintas. Así, nos toca periódicamente hacer limpieza.



Un poco de historia

La herramienta es muy sencilla, diría más, sencillísima. Toma unos registros de entrada, que guarda (si procede) y borra del archivo. Existen varias fórmulas para construirla. Podría crear un programa RPG por cada archivo a limpiar, pero sería inmantenible si tratáramos con cientos o miles de ellos (es mi caso). Otra opción es construir un único programa que pueda procesar cualquier archivo. Se me ocurren dos posibilidades. La primera es un programa RPG que defina dos archivos descritos por programa de un tamaño lo suficientemente grande para poder procesar el registro más grande de mi BBDD. Después con READ, WRITE y DELETEs construir la lógica del programa. Así se desarrolló la primera versión de esta utilidad.

Este enfoque no tiene muchas pegas y funciona. Lo que ocurre es que al procesar registros que no se ajustan al tamaño definido en el programa se generan anotaciones de trabajo por cada uno procesado, generando un joblog muy grande. Así funcionó durante unos años.

Investigando un poco, descubrí una serie de funciones de C que permitían manipular archivos y registros de base de datos y que podrían utilizarse para construir un programa más genérico (y no sé si elegante). Lo que empezó como un experimento se ha convertido en esta utilidad, el mandato CLNPFM.

Estructura

El mandato está compuesto por dos programas: el procesador del mandato en ILE CL y el programa que hace el trabajo sucio (en ILE RPG). El primero se encarga de preparar el entorno de ejecución y realizar algunas verificaciones. Además, realiza una selección de los registros utilizando el mandato OPNQRYF.

El programa RPG se encarga de tomar los registros seleccionados, copiarlos a un archivo de seguridad y eliminarlos del fichero de origen. Muy, muy simple.

Para compilarlo son necesarios los fuentes entregados en el artículo ¿Quieres usar las APIs del sistema con ILE RPG?, de donde se tomarán los prototipos y estructuras de datos de las APIs utilizadas. Junto con el código fuente de la utilidad hay un programa instalador que ayudará al interesado en esta labor.

Para aquéllos que sólo quieran utilizar esta herramienta, creo que sobran las explicaciones. Sin embargo, para los que estén interesados en aprender un poco más, estoy preparando una segunda parte más técnica, en donde detallaré algunas cuestiones relacionadas sobre las APIs utilizadas y algunas vicisitudes que acontecieron durante durante el desarrollo de los programas.

¡Hasta la próxima!
SIDRA400
Entrada