Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
MANUAL DE SUPERVIVENCIA Conceptos básicos para mis amigos Coboleros Software Factory de Cáceres – CENIT INSA Rafael Campillo Lorenzo CÁCERES – Año lectivo 2006 – 2007 "There is no way to happiness. Happiness is the way. There is no way to peace. Peace is the way. There is no way to enlightenment. Enlightenment is the way." ...Thich Nhat Hanh-Buddha Software Factory Rafael Campillo Lorenzo. Cáceres – 2 ÍNDICE ÍNDICE DE FIGURAS. ............................................................................................... 4 1. MVS (Multiple Virtual Storage) .............................................................................. 6 2. ISPF (Interactive System Productivity Facility)........................................................ 7 3. CICS. (Customer Information Control System) ....................................................... 8 4. Características de los programas bajo CICS. BATCH vs ON LINE............................ 9 5. La Arquitectura de Desarrollo.............................................................................. 10 6. SQL. DB2. cursores. ........................................................................................... 12 6.1. Cursores....................................................................................................... 13 6.2. Documentación para las pruebas de las tablas DB2 utilizadas ....................... 14 7. PROGRAMAS DE REARRANQUE Y rEPOSICIONAMIENTO. ARQUITECTURA BATCH. .................................................................................................................. 16 7.1. Funcionamiento del DB2............................................................................... 16 7.2. Rearranque de programas ............................................................................. 16 7.3. Ficheros dinámicos para salida ..................................................................... 16 7.4. Soporte Físico ............................................................................................... 17 7.5. Concatenación de Ficheros............................................................................ 17 7.6. Borrado de Ficheros de COMMIT. .................................................................. 17 7.7. Borrado Ficheros Ultimo Commit. ................................................................. 18 7.8. Ejemplos de JCL's......................................................................................... 18 7.9. Esqueletos .................................................................................................... 18 7.10. Tratamiento a seguir por los programas de aplicación en base a un ejemplo real. Programa LQBBN01. .................................................................................... 19 8. JCL (JOB CONTROL LANGUAJE) ........................................................................ 44 8.1. Ficheros........................................................................................................ 44 8.2. VTOC. Tabla de contenido del volumen.......................................................... 44 8.3. Ficheros Particionados: PDS.......................................................................... 45 8.4. Formas de localizar un fichero. Catálogos ...................................................... 45 8.5. Lenguaje de Control de Trabajos. Sintaxis. .................................................... 45 8.6. Sentencia JOB .............................................................................................. 45 MSGLEVEL(A,B) ............................................................................................... 45 MSGCLASS ...................................................................................................... 46 CLASS.............................................................................................................. 46 NOTIFY ............................................................................................................ 46 TIME................................................................................................................ 46 TYPRUN ........................................................................................................... 46 RESTART ......................................................................................................... 46 Software Factory Rafael Campillo Lorenzo. Cáceres – 3 REGION ........................................................................................................... 46 COND O IF/END/ELSE .................................................................................... 46 8.7. Sentencia DD................................................................................................ 46 DSN ................................................................................................................. 47 DISP................................................................................................................. 48 UNIT ................................................................................................................ 49 VOL.................................................................................................................. 49 DCB................................................................................................................. 49 SPACE ............................................................................................................. 49 DIR .................................................................................................................. 49 SYSOUT ........................................................................................................... 49 8.8. Sentencia EXEC............................................................................................ 49 Nombre del programa ....................................................................................... 49 NOMBRE DEL PROCEDIMIENTO...................................................................... 49 Acct.................................................................................................................. 50 Addrspc............................................................................................................ 50 Cond ................................................................................................................ 50 Dprty ............................................................................................................... 50 Dynamnbr........................................................................................................ 50 Parm ................................................................................................................ 50 Perform ............................................................................................................ 50 Rd.................................................................................................................... 50 Region.............................................................................................................. 50 time ................................................................................................................. 50 8.9. Utilidades de JCL.......................................................................................... 50 IEHLIST ........................................................................................................... 51 IEBGENER .......................................................................................................51 IEBCOPY.......................................................................................................... 52 IEBCOMPR....................................................................................................... 52 IEFBR14 .......................................................................................................... 52 DFSORT ........................................................................................................... 52 DFDSS ............................................................................................................. 53 8.10. Sentencias avanzadas JCL. CONCATENACIÓN DE FICHEROS..................... 53 REGLAS DE CONCATENACIÓN ........................................................................ 53 ANEXOS................................................................................................................. 55 ANEXO A: Notas y apuntes sobre COBOL y codificación. ...................................... 55 ANEXO 1: Listado de FILE – STATUS.................................................................... 57 ANEXO 2: Tutorial de los SQLCODES y sus causas .............................................. 62 Software Factory Rafael Campillo Lorenzo. Cáceres – 4 ANEXO 2.B SQLCODES EN CASTELLANO. ......................................................... 82 ANEXO 3: ABEND CODES bajo TSO / ISPF.......................................................... 88 ANEXO 4: Utilidades y Objetos para el Reposicionamiento Batch. ......................... 92 ANEXO 4.1. DAREPOS..................................................................................... 92 ANEXO 4.2 DAPROCBATCH. ............................................................................ 93 ANEXO 4.3. INCLUDES y COPYS. ..................................................................... 94 URCOPYS......................................................................................................... 94 URMENSA........................................................................................................ 95 URSWITCH....................................................................................................... 95 URSQLCOD...................................................................................................... 96 URWORK.......................................................................................................... 96 URDCLGEN...................................................................................................... 97 URCURSOR...................................................................................................... 97 ANEXO 4.4 Funciones. XX_CANCELACION_PROCESOS_BATCH. ........................ 98 ANEXO 4.5. JCL REPOSICIONAMIENTO ........................................................... 99 ANEXO 5. Enfrentamiento de ficheros. ............................................................... 101 ANEXO-SORT .................................................................................................... 103 Ordenación básica .......................................................................................... 103 Ordenación parcial ......................................................................................... 104 Copia de un fichero......................................................................................... 105 Copia parcial de un fichero ............................................................................. 106 Ordenar y cambiar disposición de campos....................................................... 107 Eliminar repetidos .......................................................................................... 108 Acumular ....................................................................................................... 109 Operadores y tipos de datos ............................................................................ 109 ANEXO 6. just enough ispf................................................................................. 111 ANEXO 7- DESCRIPCION FILE STATUS EN ESPAÑOL........................................ 132 ANEXO 8 -PROGRAMACION UTILIZANDO HOST Y ARQUITECTURA ISBAN........ 135 ÍNDICE DE FIGURAS. Figura 1 - Subsistemas del OS-390 ........................................................................... 8 Figura 2 - Arquitectura de desarrollo....................................................................... 10 Figura 3 - Herramientas de la arquitectura de desarrollo ......................................... 10 Figura 4 - Herramientas de desarrollo ON-LINE....................................................... 11 Figura 5 - Campos de la tabla DAREPOS................................................................. 92 Figura 6 - Campos de la tabla DAPROCBATCH........................................................ 93 Figura 7 - Parámetros de la función XX_CANCELACION_PROCESOS_BATCH........... 98 Figura 8 - SORT - Ordenacion básica .................................................................... 103 Figura 9 - SORT - Ordenacion parcial.................................................................... 104 Figura 10 - SORT - Copia de un fichero ................................................................. 105 Figura 11 - SORT - Copia parcial de un fichero...................................................... 106 Software Factory Rafael Campillo Lorenzo. Cáceres – 5 Figura 12 - SORT - Ordena y cambia disposicion de campos.................................. 107 Figura 13 - SORT - Eliminar repetidos................................................................... 108 Figura 14 - SORT - Acumular................................................................................ 109 Software Factory Rafael Campillo Lorenzo. Cáceres – 6 1. MVS (MULTIPLE VIRTUAL STORAGE) MVS (Multiple Virtual Storage, Múltiple Almacén Virtual en inglés) fue el sistema operativo más usado en los modelos de mainframes System/370 y System/390 de IBM. No tiene ninguna relación con VM/CMS, otro sistema operativo de IBM. El MVS fue lanzado al mercado por primera vez en 1974, y luego fue renombrado a MVS/XA (por arquitectura extendida en inglés), más tarde a MVS/ESA (por arquitectura de sistemas empresariales), luego se renombró como OS/390 cuando se le añadió al sistema operativo los servicios de UNIX, y finalmente a z/OS cuando los modelos zSeries fueron introducidos al mercado. Todos ellos, sin embargo, son fundamentalmente el mismo sistema operativo. De hecho, los programas que hayan sido diseñados para el sistema MVS pueden correr en z/OS sin modificación alguna. MVS fue creado basado en SVS (Single Virtual Storage, Único Almacén Virtual), y éste a su vez fue creado a partir de MVT, una de las variantes del sistema operativo OS/360. La variante original del OS/360 era PCP (Programa de Control Primario) no soportaba la ejecución de tareas múltiples, y MVT (Multitareas con número de Tareas Variables) era una mejora que era capaz de la ejecución de múltiples tareas. Sobre esta base, el sistema SVS añadió el “almacén virtual”, mejor conocido como memoria virtual; el espacio de direccionamiento de esta memoria era compartido por todas las aplicaciones. MVS, finalmente, añadió la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de allí su nombre.Este sistema se usa típicamente en aplicaciones comerciales y bancarias, y éstas son normalmente escritas en COBOL. Normalmente estos programas escritos en COBOL eran usados en sistemas transaccionales como IMS y CICS. JCL (Job Control Language), la interfaz de proceso Batch. TSO (Time Sharing Option), la interfaz interactiva de tiempo compartido. ISPF Es una interfaz que permite al usuario lograr las mismas tareas que TSO pero de una manera orientada a menús y formularios. El sistema se usa normalmente en negocios y bancos, y las aplicaciones se suelen escribir en COBOL. Los programas COBOL fueron tradicionalmente usados con sistemas de procesamiento de transacciones como IMS YCICS. Para un programa ejecutándose en CICS, se insertan las sentencias especiales EXEC CICS en el código fuente COBOL. Un preprocesador replaza dichas sentencias EXEC CICS por el apropiado código COBOL para llamar a CICS antes de que el programa se compile. Software Factory Rafael Campillo Lorenzo. Cáceres – 7 2. ISPF (INTERACTIVE SYSTEM PRODUCTIVITY FACILITY) (Interfaz TSO/ISPF) Es un conjunto herramienta para el sistema operativo IBM z/OS(MVS, OS/390) en los ordenadores Mainframe. Incluye un editor de pantalla, el interfaz de usuario fue comercializado a finales de los años 80, incluyendo SPFPC. Principalmente provee a la terminal IBM 3270 de un interfaz con menús y diálogos para ejecutar herramientas de sistema bajo TSO. Frecuentemente es utilizado para manipular archivos por medio de su PDF (Product Development Facility). El ISPF es ampliable y muy a menudo es utilizado como interfaz para otros programas de aplicación. Muchos productos vendidos para el sistema operativo MVS utilizan los menús de ISPF para acceder a sus herramientas. Software Factory Rafael Campillo Lorenzo. Cáceres – 8 3. CICS. (CUSTOMER INFORMATION CONTROL SYSTEM) Figura 1 - Subsistemas del OS-390 CICS es un gestor de transacciones. La ejecución de un programa es una transacción, y cada transacción genera una Tarea. Una Transacción es cada una de las entradas que se realiza desde el Terminal. Una Tarea es la unidad de trabajo de CPU creada por una transacción. Cuando se invoca una transacción, un programa determinado se carga en memoria y se inicia la Tarea. Así aunque varios usuarios invoquen la misma transacción, cada uno tendrá una tarea distinta. CICS es multitarea (concurrencia). Además varias tareas diferentes pueden compartir el mismo programa si este es reentrante (no cambia en ningún momento). CICS permite compartir la Procedure Division de un programa y sin embargo acceder a Working Storage Sections diferentes. El CICS es el monitor de teleproceso. Es un producto que permite el tratamiento de procesos en tiempo real, una interfase software para soportar nuestros programas de aplicación en tiempo real entre los programas de aplicación y el sistema operativo. Se podría pensar que el CICS es un Sistema Operativo dentro de otro Sistema Operativo. En estos términos, CICS es un SO especializado cuya finalidad es proveer un entorno para la ejecución de programas de aplicación ON LINE, incluyendo interfases para ficheros y productos de Bases de Datos. El sistema total es conocido normalmente como un sistema DB/DC (Data Base/Data Control) El esquema del proceso en tiempo real puede ser el siguiente: Un operador, desde una oficina, introduce algún dato por el Terminal; la información viaja por la línea telefónica hasta el ordenador central; éste procesa la solicitud (por ejemplo una petición de saldo) y envía la respuesta al Terminal que efectuó la petición. Un Monitor de Teleproceso (CICS) junto a un adecuado Método de Acceso a Telecomunicaciones (VTAM), permiten que este trasiego de información se efectúe de forma muy rápida y eficaz. En un sistema BATCH los recursos utilizados (principalmente ficheros) sólo están disponibles cuando el programa ha acabado de usarlos, llegando así a estar accesibles para cualquier petición. Hay varios CICS: Para Desarrollo, Explotación, Test, Correo Electrónico. Software Factory Rafael Campillo Lorenzo. Cáceres – 9 4. CARACTERÍSTICAS DE LOS PROGRAMAS BAJO CICS. BATCH VS ON LINE Desde el punto de vista de la EJECUCIÓN: • Un programa BATCH se lanza ejecutándose de principio a fin sin que ningún usuario pueda interferir en el proceso durante la ejecución. • Un programa ON-LINE permite interacciones con el usuario a través de un Terminal. Además permite que un mismo programa sea ejecutado simultáneamente por varios usuarios. Desde el punto de vista de la utilización de MEMORIA: • Un programa BATCH mantiene reservado para su uso exclusivo todo el espacio físico de memoria requerido por el programa durante todo el tiempo de ejecución. • Sin embargo en un programa ON-LINE bajo CICS, es éste el que gestiona dinámicamente la memoria, proporcionando áreas de memoria según las necesidades del programa que en ese momento se están ejecutando. Desde el punto de vista de utilización de FICHEROS, • Un programa BATCH hace un uso exclusivo de la información de los ficheros que requiere debiendo ser definidos expresamente en el programa • Mientras que en un programa ON-LINE bajo CICS, se podrá acceder en todo momento a la información de cualquier fichero que reconozca el CICS sin requerir una definición expresa en el programa, pudiendo ser esto mismo realizado por cualquier otro programa que también se esté ejecutando bajo CICS. Un programa BATCH envía sus instrucciones de E/S directamente al SO. Los programas de aplicación del CICS envía tales instrucciones al CICS y éste maneja el interfase con el Sistema Operativo. Desarrollo de aplicaciones en HOST. Teniendo la estación de trabajo conectada al HOST, bajo MVS y desarrollando las aplicaciones bajo TSO O bien funcionando de forma autónoma disponiendo de un CICS/OS2. Software Factory Rafael Campillo Lorenzo. Cáceres – 10 5. LA ARQUITECTURA DE DESARROLLO Figura 2 - Arquitectura de desarrollo Es una estructura que pretende facilitar el desarrollo de aplicaciones que deben ejecutarse bajo COBOL/II, CICS y DB2. Se compone de una serie de productos, programas, enganches con otras aplicaciones, etc... Esta infraestructura proporciona una rápida puesta en marcha de aplicaciones y ahorro de tiempo en el mantenimiento. Se puede ver como un conjunto de herramientas que para su estudio las agruparemos en herramientas de manejo de datos, para el desarrollo ON-LINE y el desarrollo BATCH. Herramientas de Manejo de Datos. Figura 3 - Herramientas de la arquitectura de desarrollo Software Factory Rafael Campillo Lorenzo. Cáceres – 11 Diccionario de Datos: Se definen Entidades de las aplicaciones, así como los Atributos que las componen, esto es, las tablas DB2 y sus campos. Permite relacionar atributos de otras entidades y efectuar el mantenimiento de índices y vistas. QMF: Es un producto mediante el cual se pueden emitir sentencias (en SQL) contra Bases de Datos DB2 de forma interactiva. SPUFI: También emite comandos SQL con la salvedadde que el proceso a realizar está ya escrito en un fichero y permite usar sentencias de definición de datos PROEDIT: Editor para tablas DB2 que permite procesar tablas DB2 fácil y rápidamente pues es de apariencia similar al ISPF. Usando esta aplicación se pueden modificar filas de las tablas sin conocimientos de SQL. LIBRARIAN: Es un gestor de módulos fuentes, esto es, programas y copies que mantiene hasta 10 versiones de un programa y 5 de una copy. Las copies del programa deben ser pasadas a librarian antes que él para que la compilación de cambio de entorno no falle. Herramientas de desarrollo ON-LINE Figura 4 - Herramientas de desarrollo ON-LINE Software Factory Rafael Campillo Lorenzo. Cáceres – 12 6. SQL. DB2. CURSORES. DB2 es el sistema gestor de Bases de Datos de IBM. (Ha de permitir concurrencia, seguridad (privilegios y prohibiciones) e integridad referencial, (coherencia dentro de la BD)). Clave Primaria (PRIMARY KEY): Si una columna está definida como clave primaria, los datos de esa columna (campo) serán únicos. Es una columna o un conjunto de columnas que identifican unívocamente a cada fila. Debe ser única, no nula y obligatoria. Como máximo, podemos definir una clave primaria por tabla. Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave primaria, automáticamente se crea un índice que facilita el acceso a la tabla. Clave Ajena, Externa (FOREING KEY): Esta formada por una o varias columnas que están asociadas a una clave primaria de otra o de la misma tabla. Se pueden definir tantas claves ajenas como se precise, y pueden estar o no en la misma tabla que la clave primaria. El valor de la columna o columnas que son claves ajenas debe ser: NULL o igual a un valor de la clave referenciada (regla de integridad referencial). SQL: es un lenguaje declarativo. En cualquier BD trabajaremos con el lenguaje SQL. DDL: Data Definition Language: CREATE, DROP, ALTER DML: Data Manipulation Language: SELECT, INSERT, UPDATE, DELETE. DCL: Data Control Language: … CREATE DATABASE NombreDB DROP DATABASE NombreDB CREATE TABLE NombreTabla (Nom-campo TipoDato RestriccionNulidad, Nom-campo2 TipoDato2 RestricciónNulidad …) RESTRICCIÓN NULIDAD: NOT NULL: si a un campo le especificamos NOT NULL, obligamos a que en ese campo se meta información, no se puede quedar vacío. NOT NULL WITH DEFAULT: No permite nulos, pero si se deja en blanco rellena. Con esta opción podríamos dejar campos sin rellenar en la tabla. NULLABLE: que permite nulos ( en caso de no poner nada cogería esa opción por defecto DROP TABLE NombreTabla ( RESTRICT / CASCADE ) SELECT Campo1, ... ,CampoN INTO :Var1, ... , :VarN FROM Tabla WHERE condiciones GROUP BY Agrupaciones para sacar datos comunes Software Factory Rafael Campillo Lorenzo. Cáceres – 13 HAVING Filtro. Establece condiciones pero para grupos ORDER BY Ordena INSERT INTO Tabla (Campo1, Campo2, … , CampoN) VALUES (Valor UPDATE Tabla SET Campo1 = valor, … , CampoN = valor WHERE … DELETE FROM Tabla WHERE … Desde que nos conectamos hasta que ejecutemos ROLLBACK, El rollback recupera la BD y la deja como estaba. Se usa en caso de error. EXEC SQL ROLLBACK END-EXEC El commit al contrario que Rollback, hace los cambios permanentes en las tablas. Para evitar largos bloqueos de las tablas, las aplicaciones deben hacer confirmaciones de los cambios realizados cada cierto número de registros (COMMIT), lo que liberará los bloqueos existentes hasta ese momento. Para ello, durante el proceso se harán confirmaciones periódicas de los datos modificados (COMMIT), de forma que cuando el proceso falla en su ejecución, el DB2 se encarga de restablecer las tablas a su estado en la última confirmación, deshaciendo todos los cambios no confirmados (ROLL BACK). EXEC SQL COMMIT END-EXEC 6.1. Cursores Hasta ahora solo se nos devolvía dentro de cobol una fila. Los cursores nos permitirán trabajar con consultas de más de una fila. Declaración: EXEC SQL DECLARE Nombre-cursor CURSOR FOR SELECT WHERE Campo = var END-EXEC PROCEDURE DIVISION Software Factory Rafael Campillo Lorenzo. Cáceres – 14 MOVE VALOR TO VAR EXEC SQL EXEC SQL OPEN Nombre-cursor CLOSE Nombre-cursor END-EXEC END-EXEC Lectura: EXEC SQL FETCH Nombre-cursor INTO :VAR END-EXEC Cambios dentro de las tablas: WORKING STORAGE EXEC SQL DECLARE Nombre-cursor CURSOR FOR SELECT … FOR UPDATE OF Campo / s END-EXEC Si se hacen actualizaciones en la tabla, hay que indicárselo al cursor cuando se declara. PROCEDURE DIVISION EXEC SQL UPDATE Tabla SET Campo = :valor WHERE CURRENT OF Nombre-cursor END-EXEC Sólo se puede modificar la última lectura, aunque el puntero apunte a la siguiente El cursor nos devuelve la tabla virtual, y podemos trabajar sobre ella, pero la tratamos como un fichero secuencial 6.2. Documentación para las pruebas de las tablas DB2 utilizadas Aparte del documento de ciclos y de los ficheros de E/S, hay que presentar el contenido de las tablas DB2 con las que hemos probado el programa. Si nuestro programa hace algún tipo de modificación (insert, update o delete) sobre estas tablas, tendremos que presentar el contenido de las mismas antes de realizar la modificación y después de hacerla. Por cada tabla tendremos que presentar un (dos si sufre modificación) fichero con formato EXCEL que construimos de la siguiente forma: Vamos a la ventana de mandatos (MS-DOS) Exportamos la tabla que queremos presentar. Para ello ejecutamos el siguiente comando: DB2 EXPORT TO Destino OF WSF SELECT * FROM xxxx Software Factory Rafael Campillo Lorenzo. Cáceres – 15 Donde: xxxx es el nombre de la tabla que queremos exportar. Y Destino es el lugar donde vamos a dejar el fichero que contiene los datos de la tabla. El nombre que le vamos a dar tendrá extensión wks. Nos vamos a Excel y creamos un fichero nuevo. Abrimos desde Excel nuestro fichero wks y seleccionamos todas las filas y las copiamos al fichero nuevo. Ahora en ese fichero: FORMATO / COLUMNA / AUTOAJUSTAR SELECCIÓN Software Factory Rafael Campillo Lorenzo. Cáceres – 16 7. PROGRAMAS DE REARRANQUE Y REPOSICIONAMIENTO. ARQUITECTURA BATCH. Los grandes procesos Batch con gran número de actualizaciones DB2 plantean problemas ya que mantienen durante largo tiempo bloqueos en las tablas modificadas, impidiendo la concurrencia de otros procesos batch o del online. Por otra parte su recuperación en caso de abend o de rearranque de todo el sistema es muy costosa ya que el DB2 debe restaurar sus tablas a la situación inicial, bloqueando todas las páginas que se hubieran utilizado. Para evitar ambos problemas la aplicación debe estar preparada para efectuar confirmaciones de los cambios (inserciones, borrado, modificaciones) cada cierto número de actualizaciones (COMMIT). De esta manera se liberaran los bloqueos adquiridoshasta ese momento y se suavizará la recuperación del proceso. Pero surge el problema del tratamiento de los objetos no DB2, tales como ficheros, ya que el sistema no contempla de manera estándar su tratamiento. Para esto se ha desarrollado una serie de utilidades que mediante la alocación dinámica de ficheros sincroniza la actualización de ficheros secuenciales de salida con la de objetos DB2. 7.1. Funcionamiento del DB2 El DB2 en caso de tener que hacer recuperación después de un error en ejecución de programa, debe buscar en el Log propio del subsistema que contiene los datos de cambios en Base de Datos y Puntos de Control del Sistema. Para eliminar el problema de bloqueo, DB2 utiliza la sentencia COMMIT que libera todos los recursos DB2 que el proceso estuviera utilizando (páginas, tablespaces, índices, etc.). Por defecto cierra todos aquellos cursores que estuviesen abiertos y considera definitivos todos los cambios realizados sobre las tablas. Se llama unidad de recuperación (UR) a la secuencia de operaciones realizadas entre dos puntos de COMMIT y hay que tener en cuenta que en caso de un ABEND el DB2 desharía todos los cambios realizados en la última UR, es decir, hasta el último COMMIT. El DB2 deshace los cambios no confirmados en caso de error (ROLL BACK), por ello, para reposicionar los procesos que sólo actualizan datos en DB2, bastará con guardar la última clave tratada y confirmada en los ficheros de entrada, para continuar desde ella al rearrancar. Dicha clave se alamcena en una tabla de la arquitectura y se recuperararía en un relanzamiento del programa para releer los ficheros de entrada o las tablas hasta el último COMMIT realizado antes de que se interrumpiera la ejecución. Uno de los problemas es que no se contempla el reposicionamiento de objetos no DB2 tales como ficheros de salida; para ello la arquitectura ha generado herramientas para su tratamiento. 7.2. Rearranque de programas Se realizará rearranque cuando la ejecución se interrumpa de alguna manera (caída de línea, de DB2, ABEND, etc.). Entonces el DB2 hará ROLLBACK (vuelta atrás automática de los cambios realizados en las tablas en la última unidad de recuperación, desde el último COMMIT). 7.3. Ficheros dinámicos para salida Como se ha apuntado el DB2, automáticamente vuelve a la situación que existía en el último punto de COMMIT, pero los objetos no DB2 no. Software Factory Rafael Campillo Lorenzo. Cáceres – 17 Los ficheros de salida se han seguido generando y no podemos conocer cuales eran sus datos antes. Por ello la arquitectura ha creado una serie de utilidades que mediante la alocación dinámica de ficheros sincroniza la actualización de ficheros secuenciales de salida con la de los objetos DB2. El sistema, por cada uno de los ficheros de salida, que se han definido en una de las tablas de trabajo, genera tantos ficheros dinámicos como procesos de COMMIT se hayan realizado y posteriormente realizará una unión de todos ellos. 7.4. Soporte Físico Como soporte a éste tratamiento y para hacerlo posible se utilizan dos tablas DB2, varias rutinas para la alocación dinámica, diversos parámetros en el JCL de ejecución de cada proceso y varios JCL's que enmarcan la ejecución de nuestros programas batch. En la arquitectura HOST de ISBAN Las aplicaciones guardarán toda la información necesaria para reposicionar sus procesos Batch en caso de rearranque, en las tablas DAREPOS y DAPROCBATCH pertenecientes a la arquitectura. (ver ANEXO3) También se facilitan una serie de esqueletos de programas, así como copys con campos estándar para la codificación de los mismos. (ver COPYS) DCLGEN de las Tablas DB2. D0204200 Dclgen de la tabla DAREPOS generada por Arquitectura. D0204100 Dclgen de la tabla DAPROCBATCH generada por Arquitectura. URDCLGEN Dclgen de la tabla DAREPOS que se usará en los programas. INCLUDES a Utilizar en los Programas con Reposicionamiento. URCOPYS Definición de las variables RURCOMM y RUROPER de comunicación con la rutina UR0000. URWORK Definición de las variables de trabajo para reposicionamiento. URCURSOR Definición del cursor a utilizar en el programa con reposicionamiento. COPYS a Utilizar en los Programas con Reposicionamiento. URSQLCOD Definición de la variable para controlar el SQLCODE de los cursores de reposicionamiento. MURSWITCH Definición de los SWITCHES utilizados por el programa con Reposicionamiento. URMENSA Definición de las variables de trabajo a utilizar para la cancelación. 7.5. Concatenación de Ficheros. Se efectúa mediante el procedimiento URSORTX. Debe haber tantos JCL's de concatenación como distintos ficheros de salida trate el proceso. 7.6. Borrado de Ficheros de COMMIT. Una vez concatenados los ficheros y antes de volver a pasar el proceso se deben borrar. Para ello existe un JCL que ejecuta una CLIST llamada URCLEAR, pasándole como en el caso anterior, el nombre del plan, numero de registros por COMMIT, proceso y prefijo de los ficheros. Software Factory Rafael Campillo Lorenzo. Cáceres – 18 Esta CLIST ejecuta un plan que borra todos los ficheros y restaura el estado del proceso a P sobre la tabla DAREPOS, estado que deja preparado el proceso para ejecutarse. Como en el caso anterior se crea y copia un fichero de PROFILE a fin de evitar contenciones entre varios JCLs de éste tipo. 7.7. Borrado Ficheros Ultimo Commit. En caso de tener que relanzar el proceso es necesario borrar los ficheros del COMMIT que no llegó a efectuar. Para ello se ejecuta una CLIST llamada URCLEARU a la que se le pasa como parámetros el nombre del plan, numero de registros del COMMIT, proceso, prefijo de los ficheros y el subsistema DB2. Si no se ha alocado ningún fichero la CLIST no hace nada, razón por la que se debe ejecutar siempre antes del programa de reposicionamiento. Si no se realiza éste paso la aplicación intentará alocar el fichero que ya existe, dando un error de catalogación NOT CATLG 2 y por consiguiente un ABEND del proceso. Por otra parte si se varia alguna característica del fichero (como el tanto por ciento de registros por COMMIT) al reutilizar el mismo fichero no se recogerá el cambio efectuado con lo cual se repetirá el error anterior. 7.8. Ejemplos de JCL's. Pueden consultarse en la libreria SIS.GRUR.REPOS. Hay distintos tipos según el entorno de ejecución, ya que las CLIST y las librerías cambian. En estos ejemplos aparecen con raya continua todas las variables que son propias del proceso o del usuario que lo ejecuta. Muchos de estos parámetros están interrelacionados. Todos los JCL's deberán seguir las normas generales de la instalación, cómo por ejemplo los nombres de los ficheros o los pasos a ejecutar. (ver #JCLREPOS) 7.9. Esqueletos Para facilitar la codificación de los programas se disponen de unos esqueletos en 5 modalidades distintas según utilicen ficheros secuenciales o tablas DB2, de entrada o salida. Dichos esqueletos son unas plantillas sobre las que se insertará la lógica de nuestro programa. En ellos se controla todo el proceso de reposicionamiento y relanzamiento. Se encuentran en la librería: SIS.GRUR.EJEMPLOS. REPOSPS: Esqueleto de programa que efectúa reposicionamiento utilizando un fichero secuencial de entrada y uno de salida. El plan debe llevar asociado la rutina 'UR0000'. REPOSPS. En el programa no aparecerá la llamada a dicha rutina explícitamente ya que se utilizará la variable RUR-CALL de la copy RUROPER para hacer llamadas dinámicas a rutinas. Entrada: Fichero secuencial. Salida: Fichero secuencial. Se emiten COMMIT's cada 10.000 registros tratados. Por cada COMMITse cierra el fichero de salida actual y se abre otro nuevo. Si se produce el ABEND, el fichero de salida queda incompleto y con un contenido impredecible. Antes de rearrancar el Software Factory Rafael Campillo Lorenzo. Cáceres – 19 proceso debe borrase el último fichero utilizado porque se intentará crear de nuevo, obteniendo un error de catálogo puesto que ya existe. Al rearrancar, se relee el fichero de entrada a partir de los apuntadores guardados en DAREPOS al hacer el último COMMIT, y se continúa grabando en el fichero de salida correspondiente. @-------¬ | START | $-------% 10k 20k 30k 40k 50k 60k FIC [ - - - -_- - - - -_- - - - -_- - - - -_- - - - -_- - - - -_- - - . . . . . . . . . . . . . . . . C C C A S [--------_---------_---------_-----_ X1 Z1 Z2 Z3 X2 X3 X4----] C = Punto de COMMIT A = Punto de ABEND X = Abre fichero de salida Z = Cierra fichero de salida @-------¬ |RESTART| Previo borrado del último fichero de COMMIT (4) $-------% 10k 20k 30k 40k 50k 60k FIC [ - - - - - - - - - - - - - ->- - - - -_- - - - -_- - - - -_- - - . 10k 20k . 30k . . . . . . . . . . . . R C C F S _---------_---------_----_ X4 Z4 Z5 Z6 X5 X6 R = Punto de RESTART C = Punto de COMMIT F = Punto de FINAL X = Abre fichero de salida Z = Cierra fichero de salida 7.10. Tratamiento a seguir por los programas de aplicación en base a un ejemplo real. Programa LQBBN01. Lo primero que se ha de hacer siempre que nos enfrentemos a la resolución de programas de este tipo es identificar del tipo de programa: Se debe buscar el esqueleto que más se ajuste al programa que se va a ejecutar. A continuación se obtiene una copia del esqueleto pasando el esqueleto a nuestras librerías, sin modificar lo directamente pues más adelante serán utilizados por otros usuarios. Durante la codificación hay que tener en cuenta que cada vez que se realiza un COMMIT todos los cursores se cierran (aunque no se haya realizado CLOSE); por eso si se ha abierto alguno que no pertenezca al reposicionamiento, hemos de recordar abrirlo de nuevo. Todos los switch que controlen el proceso deben guardarse (en la tabla DAREPOS) porque si hay relanzamiento se debe saber qué parte del programa se debe ejecutar. Si se utilizan tablas internas para validaciones, el primer paso al rearrancar, debe ser cargarlas de nuevo. Se trata de reconstruir la situación al punto donde se quedó. Software Factory Rafael Campillo Lorenzo. Cáceres – 20 Debe tenerse en cuenta que si se utilizan en el programa tablas internas en las que se guarden acumuladores o datos intermedios, no se dispondrá de ellos en el momento del relanzamiento. Entonces será necesario utilizar una tabla DB2 y trabajar con ella de la misma forma que con los cursores de reposicionamiento. Podría ser utilizada la tabla DAREPOS si el volumen de los datos lo permite. ¡¡Es importante decidir el criterio lógico de COMMIT, es decir, cada cuánto tiempo se realiza un commit. Se puede establecer según el número de registros leídos del fichero maestro, tratados o grabados en el fichero de salida, o según el número de acceso a una tabla DB2, pero se ha de tener clara la lógica para realizar el incremento del contador que nos dirá cuando efectuamos un COMMIT..!! En el programa LQBBN01 se enfrentan dos ficheros de entrada, y como lógica se ha decidido ir incrementando el contador en base alas lecturas del fichero maestro. Los programas Batch con reposicionamiento reciben como entrada los parámetros necesarios para su control. No son parámetros de aplicación, si necesitase otros parámetros para su proceso estos deberán pasarse al programa mediante ficheros de entrada. Los parámetros para el control del reposicionamiento son: PLAN Nombre del plan a ejecutar con reposicionamiento. Debería corresponder con el propio. NUMREG Número de registros que se van a procesar antes de cada confirmación. Realmente no tiene porque indicar el número de registros de entrada: sólo es el tope del contador del bucle de proceso de registros. NUMPROC Número del proceso asociado a ese Job. Normalmente siempre es '1' salvo el caso de programas que bifurcan y tratan tablas distintas según alguna entrada que lean. En este caso se pueden lanzar dos o más Jobs en paralelo con el mismo programa/plan pero distinto Número de Proceso para poder reposicionarse cada cual correctamente e independientemente del otro Job. PREFIX Prefijo de los ficheros de salida generados. POOL Pool de discos. Este parámetro es opcional, si no se pone toma por defecto SYSDA. Ahora se han de preparar las tablas para la ejecución. Para ello se han de obtener y modificar los JCL's correspondientes. No debemos olvidar probar el proceso de relanzamiento una ver construído el programa. Se deb cancelar una vez que se está ejecutando y volverlo a submitir. (EJECUTAR). **************************************************************************************** *** **************************************************************************************** *** * PROGRAMA: LQBBN01 * * FECHA CREACION: 07-11-2006 * * AUTOR: INSA * * INSTALACION: CLIENTE.ISBAN. * * DESCRIPCION: EL PROCESO DARÁ NUEVAS ALTAS EN LA TABLA DE SALDOS * VALOR PARA LIQUIDACIÓN DE CONTRADOS DE PR�STAMOS.(SALDO_VALOR_ Software Factory Rafael Campillo Lorenzo. Cáceres – 21 * _PTM). * A PARTIR DEL FICHERO DE ALTAS DEL DÍA(ALTAS1),ORDENADO POR * CONTRATO, Y DEL FICHERO DE CONTRATOS QUE LIQUIDAN POR EL NUEVO * SISTEMA(CONTBA3) ORDENADO POR CONTRATO, SELECCIONAMOS LAS ALTAS * ENFRENTANDO AMBOS FICHEROS. CON CADA ALTA VÁLIDA(ENCONTRADA EN * EL FICHERO DE CONTRATOS) GENERAMOS UN REGISTRO EN LA TABLA * SALDO_VALOR_PTM CON EL SALDO A 0 POR CADA POSICIÓN LEÍDA EN EL * FICHERO CONTBA3. LA PREESISTENCIA DEL REGISTRO QUE SE VA A DAR * DE ALTA EN SALDO_VALOR_PTM IMPLICA UN ERROR, POR LO QUE SE * GRABA EN EL FICHERO DE SALIDA DE ERRORES (ERRALTA) * **************************************************************************************** *** * * RUTINAS: * RUTINA1: XX_CANCELACION_PROCESOS_BATCH:* * CANCELAR LA EJECUCION DE UN PROGRAMA POR * CUALQUIER TIPO DE ERROR * * RUTINA2: UR0000: * * MUEVE LOS PARÁMETROS JCL A LA RURCOMM, Y * ACCEDE AL DB2 * **************************************************************************************** ** * * TABLAS: * TABLA1: SALDO_VALOR_PTM * * SALDOS VALOR PARA LIQUIDACIÓN DE CONTRATOS * DE PR�STAMOS * **************************************************************************************** *** **************************************************************************************** *** * * MODIFICACIONES * ---------------- * * USUARIO FECHA DESCRIPCION * ------- ----- ----------------------- * XXXXXXX DD-MM-AA XXXXXXXXXXXXXXXXXXXXXXX *---------------------------------------------------------------- **************************************************************************************** *** **************************************************************************************** *** ************************** IDENTIFICATION DIVISION. ************************** PROGRAM-ID. LQBBN01. AUTHOR. RAFITASUPERSTAR. DATE-WRITTEN. 10/11/2006. DATE-COMPILED. 13/11/2006. *################################################################* *# #* *# ENVIRONMENT DIVISION *# #* *################################################################* ************************** ENVIRONMENT DIVISION. ************************** CONFIGURATION SECTION. SPECIAL-NAMES. DECIMAL-POINT IS COMMA. INPUT-OUTPUT SECTION. FILE-CONTROL. Software Factory Rafael Campillo Lorenzo. Cáceres – 22 * FICHERO DE CONTRATOS DE PRESTAMOS QUE LIQUIDAN POR EL NUEVO * SISTEMA. FICHERO SECUENCIAL DE ENTRADA1 SELECT CONTBA3 ASSIGN TO CONTBA3 FILE STATUS IS FS-CONTBA3. * FICHERO CON LAS ALTAS DEL DÍA.FICHERO SECUENCIAL DE ENTRADA2 SELECT ALTAS1 ASSIGN TO ALTAS1 FILE STATUS IS FS-ALTAS1. * FICHERO DONDE SE GRABAN LAS ALTAS NO PRODUCIDAS POR CLAVE * DUPLICADA.FICHERO SECUENCIAL DE SALIDA. SELECT ERRALTA ASSIGN TO ERRALTA FILE STATUS IS FS-ERRALTA. *################################################################* *# #* *# DATA DIVISION #* *# #* *################################################################* *************************************************** DATA DIVISION. *************************************************** FILE SECTION. FD CONTBA3 LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGCONTBA3 PIC X(280). FD ALTAS1 LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGALTAS1 PIC X(140). FD ERRALTA LABEL RECORD ARE STANDARD BLOCK CONTAINS 0 RECORDS RECORDING MODE IS F. 01 REGERRALTA PIC X(147). *************************************************** WORKING-STORAGE SECTION. *************************************************** **************************************************************************************** ** *** COPY DE MENSAJES DE ERROR PARA PROGRAMAS BATCH QUE *** USEN " REPOSICIONAMIENTO " **************************************************************************************** ** COPY URMENSA. **************************************************************************************** *** *** COPY QUE CONTIENE LOS " SWITCHES " UTILIZADOS *** POR PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO. **************************************************************************************** ***COPY URSWITCH. **************************************************************************************** *** *** COPY QUE CONTIENE LOS CAMPOS DE TRABAJO UTILIZADOS *** EN PROGRAMAS BATCH QUE UTILIZAN REPOSICIONAMIENTO. **************************************************************************************** *** Software Factory Rafael Campillo Lorenzo. Cáceres – 23 EXEC SQL INCLUDE URWORK END-EXEC. **************************************************************************************** *** *** CLAVES DE RELANZAMIENTO Y DE REPOSICIÓN PARA EL *** FICHERO CONTBA3 Y ALTAS1 En caso de que un programa vea cancelada su ejecución y tengamos que relanzarlo, tenemos que releer el fichero maestro hasta el punto guardado tras el último COMMIT efectuado antes de su caída. La cave guardada en ese último COMMIT será CLAVE-ALTAS1, que es la clave de reposicionamiento, y la clave temporal que ser irá comparando con ésta en la relectura del maestro, será UR-CLAVE-RELANZAMIENTO. 01 UR-CLAVE-RELANZAMIENTO. 10 IDEMPR-RELANZAMIENTO PIC X(4). 10 IDCENT-RELANZAMIENTO PIC X(4). 10 IDPROD-RELANZAMIENTO PIC X(3). 10 IDCONTR-RELANZAMIENTO PIC X(7). * LA CLAVE DE REPOSICIONAMIENTO ES LA DEL FICHERO MAESTRO ALTAS1 01 CLAVE-ALTAS1. 10 IDEMPR-ALTAS1 PIC X(4). 10 IDCENT-ALTAS1 PIC X(4). 10 IDPROD-ALTAS1 PIC X(3). 10 IDCONTR-ALTAS1 PIC X(7). 01 CLAVE-CONTBA3. 10 IDEMPR-CONTBA3 PIC X(4). 10 IDCENT-CONTBA3 PIC X(4). 10 IDPROD-CONTBA3 PIC X(3). 10 IDCONTR-CONTBA3 PIC X(7). **************************************************************************************** *** *--- ESTRUCTURA DE LQCBN02-TAB-SALDOS-VALOR: 01 TAB-SALDOS-VALOR-TRA. 02 REG-SALDOS-VALOR-TRA OCCURS 2. 05 ELE-SALDOS-VALOR-TRA OCCURS 600. 10 FEC-VALOR-TRA PIC S9(8) COMP-3. 10 DIAS-AVX-TRA PIC S9(8) COMP-3. 10 DIAS-AVB-TRA PIC S9(3) COMP-3. 10 SALDO-VALOR-TRA PIC S9(13)V9(2) COMP-3. **************************************************************************************** *** *** INTRODUCIR AQUI LA COPY QUE CONTIENE LOS CAMPOS *** DE LOS FICHEROS DE ENTRADA Y SALIDA **************************************************************************************** *** * COPY DEL FICHERO DE ENTRADA CONTBA3 DE CONTRATOS DE PRESTAMOS COPY LQYCONTL. * COPY DEL FICHERO ALTAS1 CON LAS ALTAS DEL DÍA COPY BNYDE008. * COPY DEL FICHERO ERRALTA COPY JWYARC01. Añadir en el programa las COPYS e INCLUDES necesarias para el reposicionamiento. **************************************************************************************** *** *** INCLUDES DE LA COPY PARA DB2 **************************************************************************************** *** EXEC SQL INCLUDE SQLCA END-EXEC. Software Factory Rafael Campillo Lorenzo. Cáceres – 24 **************************************************************************************** *** *** INCLUDE DE LAS COPYS PARA REPOSICIONAMIENTO *** " RURCOMM " Y " RUROPER " **************************************************************************************** *** * EXEC SQL INCLUDE URCOPYS END-EXEC. **************************************************************************************** *** *** INCLUDE DE LA COPY DE LA DCLGEN DE " DAREPOS ". *** (TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH) **************************************************************************************** *** * EXEC SQL INCLUDE URDCLGEN END-EXEC. **************************************************************************************** *** *** COPY QUE INCLUYE EL CURSOR FOR UPDATE DE DAREPOS. *** TABLA UTILIZADA PARA EL REPOSICIONAMIENTO EN BATCH. **************************************************************************************** *** * EXEC SQL INCLUDE URCURSOR END-EXEC. *------------------------------------------------------------ * TABLA DE ACTUALIZACIÓN SALDO_VALOR_PTM *------------------------------------------------------------ EXEC SQL INCLUDE D3445800 END-EXEC. *------------------------------------------------------------ * SWITCHES *------------------------------------------------------------ 01 SW-SWITCHES. 05 SW-FIN-ALTAS1 PIC 9(1). 88 SW-SI-FIN-ALTAS1 VALUE 1. 88 SW-NO-FIN-ALTAS1 VALUE 0. 05 SW-FIN-CONTBA3 PIC 9(1). 88 SW-SI-FIN-CONTBA3 VALUE 1.88 SW-NO-FIN-CONTBA3 VALUE 0. * PARA LOS CONTROLES DE DB2 05 SW-DB2-RETURN-CODE PIC S9(04) COMP VALUE ZEROES. 88 DB2-OK VALUE 0. 88 DB2-CLV-NOT-FOUND VALUE +100. 88 DB2-CLV-DUPLI-INSERT VALUE -803. 88 DB2-CLV-DUPLI-SELECT VALUE -811. 88 DB2-RECURSO-NO-DISPONIBLE VALUE -911. 88 DB2-TABLA-BLOQUEADA VALUE -904. 05 SW-LEER-ALTAS1 PIC 9(1). 88 SW-SI-LEE-ALTAS1 VALUE 1. 88 SW-NO-LEE-ALTAS1 VALUE 0. *----------------------------------------------------------------* * CONSTANTES * *----------------------------------------------------------------* 01 CT-CONSTANTES. 05 CA-LQBBN01 PIC X(7) VALUE 'LQBBN01'. 05 CA-PARRAFO-INICIO PIC X(14) VALUE 'PARRAFO-INI - 'CIO'. 05 CA-PROGRAMA-LQBBN01 PIC X(30) VALUE ' PROGRAMA - ' LQBBN01'. 05 CA-ASTERISCO PIC X(42) VALUE '*********** - '******************************'. 05 CA-RESPONSABLE PIC X(26) VALUE 'DESAROLLO-L - 'IQUIDACIONES'. 05 CA-ALTAS1 PIC X(6) VALUE 'ALTAS1'. 05 CA-CONTBA3 PIC X(7) VALUE 'CONTBA3'. Software Factory Rafael Campillo Lorenzo. Cáceres – 25 05 CA-ERRALTA PIC X(7) VALUE 'ERRALTA'. 05 CA-ERROR-APERTURA PIC X(26) VALUE 'ERROR AL AB - 'RIR EL FICHERO'. 05 CA-ERROR-INSERT PIC X(26) VALUE 'ERROR AL HA - 'CER EL INSERT'. 05 CA-ERROR-LECTURA PIC X(26) VALUE 'ERROR AL LE - 'ER EL FICHERO'. 05 CA-ESCRIBIR-SALDO-PTM PIC X(28) VALUE 'ESCRIBIR SA - 'LDO-VALOR-PTM'. 05 CA-SALDO-VALOR-PTM PIC X(21) VALUE 'SALDO-VALOR - '-PTM'. 05 CA-LEER-ALTAS1 PIC X(21) VALUE 'LEER FICHER - 'O ALTAS1'. 05 CA-LEER-CONTBA3 PIC X(22) VALUE 'LEER FICHER - 'O CONTBA3'. 05 CN-CERO PIC 9(1) VALUE 0. 05 CN-UNO PIC 9(1) VALUE 1. 05 CN-OCHO PIC 9(1) VALUE 8. 05 CN-DIECISIETE PIC 9(2) VALUE 17. 05 CN-DIECIOCHO PIC 9(2) VALUE 18. 05 CN-OCHENTA PIC 9(2) VALUE 80. 05 CA-TIPO-ERROR-F PIC X(1) VALUE 'F'. 05 CA-ESTADO-C PIC X(1) VALUE 'I'. 05 CA-ESTADO-I PIC X(1) VALUE 'P'. 05 CA-ESTADO-P PIC X(1) VALUE 'C'. 05 CA-ESTADO-F PIC X(1) VALUE 'F'. 05 CA-TIPO-ERROR-D PIC X(1) VALUE 'D'. 05 CA-COD-RETORNO PIC X(4) VALUE '3333'. 05 CA-FICH-OK PIC X(2) VALUE '00'. 05 CA-FIN-FICH PIC X(2) VALUE '10'. 05 CA-CODERROA PIC X(4) VALUE 'GL01'. 05 CA-CODCESTX PIC X(3) VALUE 'PTM'. 05 CA-AORIGEN PIC X(3) VALUE 'CSV'. *------------------------------------------------------------ * CAMPOS PARA LA FUNCIÓN DE ERRORES *------------------------------------------------------------ 01 WK-CANCELA. 05 WK-TIPO-ERROR PIC X(001). 05 WK-COD-RETORNO PIC X(004). 05 WK-DESCRIPCION PIC X(080). 05 WK-RESPONSABLE PIC X(030). 05 WK-PROGRAMA PIC X(008) VALUE 'LQBBN01'. 05 WK-PARRAFO PIC X(030). 05 WK-ERROR-DB2. 10 WK-SQLCA PIC X(148). 10 WK-TABLA-DB2 PIC X(015). 10 WK-DATOS-ACCESO PIC X(104). 05 WK-ERROR-RUTINA. 10 WK-RUTINA PIC X(008). 10 WK-PARAMETROS PIC X(114). 05 WK-ERROR-TABLA-MEMORIA. 10 WK-TABLA-MEM PIC X(030). 10 WK-INDICE PIC X(006). 10 WK-DATOS-TABMEM PIC X(086). 05 WK-ERROR-FICHERO. 10 WK-DDNAME PIC X(008). 10 WK-FILE-STATUS PIC X(002). 10 WK-DATOS-REGISTRO PIC X(112). 05 WK-EXISTENCIA-CONTRATO. 10 FILLER PIC X(57) VALUE 'YA EXISTE - 'CONTRATO EN SALDO_VALOR_PTM PARA POSI - 'CIÓN = '. 10 WK-TIPMVTO PIC X(3) VALUE SPACES. 05 WK-LECTURAS-CONTBA3. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEÍDOS EN EL FICHERO CONTBA3: '. 10 WK-CONT-CONTBA3 PIC 9(9) VALUE ZEROS. 05 WK-LECTURAS-ALTAS1. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEÍDOS EN EL FICHERO ALTAS1: '. 10 WK-CONT-ALTAS1 PIC 9(9) VALUE ZEROS. 05 WK-ESCRITURAS-ERRALTA. 10 FILLER PIC X(46) VALUE 'REGISTROS - 'ESCRITOS EN EL FICHERO ERRALTA: '. Software Factory Rafael Campillo Lorenzo. Cáceres – 26 10 WK-CONT-ERRALTA PIC 9(9) VALUE ZEROS. 05 WK-ESCRITURAS-SALDO-VALOR-PTM. 10 FILLER PIC X(57) VALUE 'REGISTROS - 'ESCRITOS EN LA TABLA SALDO_VALOR_PTM' . 10 WK-CONT-SALDO-VALOR-PTM PIC 9(9) VALUE ZEROS. * PARÁMETROS PARA EL RESTO DE INCIDENCIAS SIN CATALOGAR(TIPO Q) 05 WK-ERROR-OTROS. 10 WK-RESTO-DATOS PIC X(122). 01 IND-I PIC 9(1).01 FECAPER-NUM PIC X(8). 01 FECAPER-COMP3 REDEFINES FECAPER-NUM. 05 FECAPER-FECHA PIC 9(8). *------------------------------------------------------------ * DEFINICIÓN DE LOS CAMPOS DE LOS FICHEROS *------------------------------------------------------------ 01 CONT-CONTBA3 PIC 9(9) VALUE ZEROS. 01 CONT-ALTAS1 PIC 9(9) VALUE ZEROS. 01 CONT-SALDO-VALOR-PTM PIC 9(9) VALUE ZEROS. 01 CONT-ERRALTA PIC 9(9) VALUE ZEROS. *--- FILE STATUS 01 FS-CONTBA3 PIC X(2) VALUE '00'. 01 FS-ALTAS1 PIC X(2) VALUE '00'. 01 FS-ERRALTA PIC X(2) VALUE '00'. *------------------------------------------------------------ * TABLAS INTERNAS *------------------------------------------------------------ 01 W-POSICION-ALTA PIC X(03). 01 W-POSICIONES. 05 W-POSICION OCCURS 8 PIC X(03). ****************** LINKAGE SECTION. ****************** En esta variable de linkage se recibirán los datos pasados en PARÁMETROS en el JCL a través de la copy RURCOMM. 01 PARMLIST. 05 PARM-LNG PIC XX. 05 PARAMETRO PIC X(200). ************************************ PROCEDURE DIVISION USING PARMLIST. ************************************ ******************************************** * RUTINA-PRINCIPAL. ******************************************** Algo que llamará la atención pero que no ha de asustarnos es el hecho de que se usen dos inicios y dos finales en la rutina principal del programa. Esto tiene su sentido porque utilizamos un inicio y un final del esqueleto que en el que se controlan temas relacionados con el reposicionamiento. Esto no implica que la lógica de nuestro programa encaje exactamente con A100-INICIO-PROGRAMA, A400-PROCESO- PROGRAMA Y S900-FIN, ya que iremos entremezclando nuestra lógica con la del esqueleto con lo que es necesario conocer qué hace el esqueleto para encajar nuestro programa. PERFORM S100-INICIO THRU S100-INICIO-EXIT. *----------- PERFORM A100-INICIO-PROGRAMA THRU A100-INICIO-PROGRAMA-EXIT. PERFORM A400-PROCESO-PROGRAMA THRU A400-PROCESO-PROGRAMA-EXIT. PERFORM A900-FIN-PROGRAMA THRU A900-FIN-PROGRAMA-EXIT. Software Factory Rafael Campillo Lorenzo. Cáceres – 27 *----------- PERFORM S900-FIN THRU S900-FIN-EXIT. STOP RUN. **************************************************************************************** ** *** *** S100-INICIO *** **************************************************************************************** ** S100-INICIO. *---------------------------------------------------------------* *--- INICIALIZAR VARIABLES DE PROCESO (COPY URSWITCH) *---------------------------------------------------------------* SET NO-HAY-ERROR-PROCESO TO TRUE. SET NO-FIN-PROCESO TO TRUE. SET NO-RELANZAMIENTO TO TRUE. SET NO-FIN-DATOS TO TRUE. SET NO-ERROR TO TRUE. MOVE ZEROS TO CA-COMMIT. *---------------------------------------------------------------* *--- ACTUALIZACION DE DATOS DE RURCOMM CON LOS DATOS DE *--- PARAMETRO Y DAPROCBATCH. *----------------------------------------------------------------* Estos parámetros son pasados al programa por el JCL y recibidos en LINKAGE (PARMLIST). Para obtenerlos se invoca la rutina UR0000 con RUR-INIT, ésta deja los parámetros desglosados en subniveles de la variable RURCOMM. Esta llamada inicial a la rutina UR0000 se tiene que hacer siempre, aunque el proceso no tenga ficheros de salida. La variable RUR-CALL ya contiene el nombre 'UR0000' y pertenece a una de las Copys. El formato de la llamada puede ser uno de los siguientes: EXEC-FUN UR_PARM PARMS(PARAMETROS) END-FUN o CALL RUR-CALL USING RUR-INIT RURCOMM PARAMETROS Las variables obtenidas son: CA-PLANNAME Nombre del plan. CA-PROCESO Número de proceso. CA-NUMREG Número de registros tratados en cada confirmación (COMMIT). CA-PREF Prefijo de los ficheros, dependerá del subsistema donde se esté ejecutando (DES: desarrollo, SIS: sistemas, EXP: explotación). Cuando el proceso tiene ficheros de salida, esta llamada a la rutina sirve también para recuperar sus datos, que se almacenarán la variable CA-DDNAMES de la copy RURCOMM. CALL RUR-CALL USING RUR-INIT RURCOMM PARAMETRO MOVE CA-PROCESO TO UR-PROCESO Antes de comenzar el tratamiento de los datos de entrada, se consultará en qué estado se encuentra el proceso, para saber si es necesario reposicionar o por el contrario se comienza el proceso desde el principio. Para ello se accede a la tabla DAREPOS utilizando el cursor “REP”, proporcionado en la INCLUDE URCURSOR. Se abrirá el cursor para el plan y el número de proceso pasados en los parámetros de reposicionamiento y se recuperará una única fila.
Compartir