169
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 enl ightenment. Enlightenment is the way." ...Thich Nhat Hanh-Buddha

Manual Cobol

Embed Size (px)

Citation preview

  • MANUAL DE SUPERVIVENCIA Conceptos bsicos para mis amigos Coboleros

    Software Factory de Cceres CENIT INSA

    Rafael Campillo Lorenzo CCERES Ao 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. Cceres

    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. Caractersticas 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. Documentacin 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 dinmicos para salida ..................................................................... 16

    7.4. Soporte Fsico ............................................................................................... 17

    7.5. Concatenacin 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 aplicacin 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. Catlogos ...................................................... 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. Cceres

    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. CONCATENACIN DE FICHEROS..................... 53

    REGLAS DE CONCATENACIN ........................................................................ 53

    ANEXOS................................................................................................................. 55

    ANEXO A: Notas y apuntes sobre COBOL y codificacin. ...................................... 55

    ANEXO 1: Listado de FILE STATUS.................................................................... 57

    ANEXO 2: Tutorial de los SQLCODES y sus causas .............................................. 62

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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

    Ordenacin bsica .......................................................................................... 103

    Ordenacin parcial ......................................................................................... 104

    Copia de un fichero......................................................................................... 105

    Copia parcial de un fichero ............................................................................. 106

    Ordenar y cambiar disposicin 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 ESPAOL........................................ 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 - Parmetros de la funcin XX_CANCELACION_PROCESOS_BATCH........... 98 Figura 8 - SORT - Ordenacion bsica .................................................................... 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. Cceres

    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. Cceres

    6

    1. MVS (MULTIPLE VIRTUAL STORAGE) MVS (Multiple Virtual Storage, Mltiple Almacn Virtual en ingls) fue el sistema operativo ms usado en los modelos de mainframes System/370 y System/390 de IBM. No tiene ninguna relacin 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 ingls), ms tarde a MVS/ESA (por arquitectura de sistemas empresariales), luego se renombr como OS/390 cuando se le aadi 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 diseados para el sistema MVS pueden correr en z/OS sin modificacin alguna. MVS fue creado basado en SVS (Single Virtual Storage, nico Almacn 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 ejecucin de tareas mltiples, y MVT (Multitareas con nmero de Tareas Variables) era una mejora que era capaz de la ejecucin de mltiples tareas. Sobre esta base, el sistema SVS aadi el almacn virtual, mejor conocido como memoria virtual; el espacio de direccionamiento de esta memoria era compartido por todas las aplicaciones. MVS, finalmente, aadi la capacidad de que cada programa tuviera su propio espacio de direccionamiento de memoria, de all su nombre. Este sistema se usa tpicamente 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 mens 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 ejecutndose en CICS, se insertan las sentencias especiales EXEC CICS en el cdigo fuente COBOL. Un preprocesador replaza dichas sentencias EXEC CICS por el apropiado cdigo COBOL para llamar a CICS antes de que el programa se compile.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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 aos 80, incluyendo SPFPC. Principalmente provee a la terminal IBM 3270 de un interfaz con mens y dilogos 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 aplicacin. Muchos productos vendidos para el sistema operativo MVS utilizan los mens de ISPF para acceder a sus herramientas.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    8

    3. CICS. (CUSTOMER INFORMATION CONTROL SYSTEM)

    Figura 1 - Subsistemas del OS-390

    CICS es un gestor de transacciones. La ejecucin de un programa es una transaccin, y cada transaccin genera una Tarea. Una Transaccin es cada una de las entradas que se realiza desde el Terminal. Una Tarea es la unidad de trabajo de CPU creada por una transaccin. Cuando se invoca una transaccin, un programa determinado se carga en memoria y se inicia la Tarea. As aunque varios usuarios invoquen la misma transaccin, cada uno tendr una tarea distinta. CICS es multitarea (concurrencia). Adems varias tareas diferentes pueden compartir el mismo programa si este es reentrante (no cambia en ningn 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 aplicacin en tiempo real entre los programas de aplicacin y el sistema operativo. Se podra pensar que el CICS es un Sistema Operativo dentro de otro Sistema Operativo. En estos trminos, CICS es un SO especializado cuya finalidad es proveer un entorno para la ejecucin de programas de aplicacin 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 algn dato por el Terminal; la informacin viaja por la lnea telefnica hasta el ordenador central; ste procesa la solicitud (por ejemplo una peticin de saldo) y enva la respuesta al Terminal que efectu la peticin. Un Monitor de Teleproceso (CICS) junto a un adecuado Mtodo de Acceso a Telecomunicaciones (VTAM), permiten que este trasiego de informacin se efecte de forma muy rpida y eficaz. En un sistema BATCH los recursos utilizados (principalmente ficheros) slo estn disponibles cuando el programa ha acabado de usarlos, llegando as a estar accesibles para cualquier peticin. Hay varios CICS: Para Desarrollo, Explotacin, Test, Correo Electrnico.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    9

    4. CARACTERSTICAS DE LOS PROGRAMAS BAJO CICS. BATCH VS ON LINE Desde el punto de vista de la EJECUCIN:

    Un programa BATCH se lanza ejecutndose de principio a fin sin que ningn usuario pueda interferir en el proceso durante la ejecucin.

    Un programa ON-LINE permite interacciones con el usuario a travs de un

    Terminal. Adems permite que un mismo programa sea ejecutado simultneamente por varios usuarios.

    Desde el punto de vista de la utilizacin de MEMORIA:

    Un programa BATCH mantiene reservado para su uso exclusivo todo el espacio fsico de memoria requerido por el programa durante todo el tiempo de ejecucin.

    Sin embargo en un programa ON-LINE bajo CICS, es ste el que gestiona

    dinmicamente la memoria, proporcionando reas de memoria segn las necesidades del programa que en ese momento se estn ejecutando.

    Desde el punto de vista de utilizacin de FICHEROS,

    Un programa BATCH hace un uso exclusivo de la informacin 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 informacin de cualquier fichero que reconozca el CICS sin requerir una definicin expresa en el programa, pudiendo ser esto mismo realizado por cualquier otro programa que tambin se est ejecutando bajo CICS.

    Un programa BATCH enva sus instrucciones de E/S directamente al SO. Los programas de aplicacin del CICS enva tales instrucciones al CICS y ste maneja el interfase con el Sistema Operativo. Desarrollo de aplicaciones en HOST. Teniendo la estacin de trabajo conectada al HOST, bajo MVS y desarrollando las aplicaciones bajo TSO O bien funcionando de forma autnoma disponiendo de un CICS/OS2.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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 rpida 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. Cceres

    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: Tambin emite comandos SQL con la salvedad de que el proceso a realizar est ya escrito en un fichero y permite usar sentencias de definicin de datos PROEDIT: Editor para tablas DB2 que permite procesar tablas DB2 fcil y rpidamente pues es de apariencia similar al ISPF. Usando esta aplicacin se pueden modificar filas de las tablas sin conocimientos de SQL. LIBRARIAN: Es un gestor de mdulos 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 compilacin de cambio de entorno no falle. Herramientas de desarrollo ON-LINE

    Figura 4 - Herramientas de desarrollo ON-LINE

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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) sern nicos. Es una columna o un conjunto de columnas que identifican unvocamente a cada fila. Debe ser nica, no nula y obligatoria. Como mximo, podemos definir una clave primaria por tabla. Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave primaria, automticamente se crea un ndice que facilita el acceso a la tabla. Clave Ajena, Externa (FOREING KEY): Esta formada por una o varias columnas que estn 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 RestriccinNulidad ) RESTRICCIN NULIDAD: NOT NULL: si a un campo le especificamos NOT NULL, obligamos a que en ese campo se meta informacin, no se puede quedar vaco. NOT NULL WITH DEFAULT: No permite nulos, pero si se deja en blanco rellena. Con esta opcin podramos dejar campos sin rellenar en la tabla. NULLABLE: que permite nulos ( en caso de no poner nada cogera esa opcin 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. Cceres

    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 nmero de registros (COMMIT), lo que liberar los bloqueos existentes hasta ese momento. Para ello, durante el proceso se harn confirmaciones peridicas de los datos modificados (COMMIT), de forma que cuando el proceso falla en su ejecucin, el DB2 se encarga de restablecer las tablas a su estado en la ltima confirmacin, deshaciendo todos los cambios no confirmados (ROLL BACK).

    EXEC SQL COMMIT END-EXEC

    6.1. Cursores Hasta ahora solo se nos devolva dentro de cobol una fila. Los cursores nos permitirn trabajar con consultas de ms de una fila. Declaracin: EXEC SQL DECLARE Nombre-cursor CURSOR FOR SELECT WHERE Campo = var END-EXEC PROCEDURE DIVISION

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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 indicrselo al cursor cuando se declara. PROCEDURE DIVISION EXEC SQL UPDATE Tabla SET Campo = :valor WHERE CURRENT OF Nombre-cursor END-EXEC Slo 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. Documentacin 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 algn tipo de modificacin (insert, update o delete) sobre estas tablas, tendremos que presentar el contenido de las mismas antes de realizar la modificacin y despus de hacerla. Por cada tabla tendremos que presentar un (dos si sufre modificacin) 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. Cceres

    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 extensin 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 SELECCIN

  • Software Factory Rafael Campillo Lorenzo. Cceres

    16

    7. PROGRAMAS DE REARRANQUE Y REPOSICIONAMIENTO. ARQUITECTURA BATCH. Los grandes procesos Batch con gran nmero 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 recuperacin en caso de abend o de rearranque de todo el sistema es muy costosa ya que el DB2 debe restaurar sus tablas a la situacin inicial, bloqueando todas las pginas que se hubieran utilizado. Para evitar ambos problemas la aplicacin debe estar preparada para efectuar confirmaciones de los cambios (inserciones, borrado, modificaciones) cada cierto nmero de actualizaciones (COMMIT). De esta manera se liberaran los bloqueos adquiridos hasta ese momento y se suavizar la recuperacin del proceso. Pero surge el problema del tratamiento de los objetos no DB2, tales como ficheros, ya que el sistema no contempla de manera estndar su tratamiento. Para esto se ha desarrollado una serie de utilidades que mediante la alocacin dinmica de ficheros sincroniza la actualizacin de ficheros secuenciales de salida con la de objetos DB2.

    7.1. Funcionamiento del DB2 El DB2 en caso de tener que hacer recuperacin despus de un error en ejecucin 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 (pginas, 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 recuperacin (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 deshara 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 slo 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 recuperarara 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 ejecucin. 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 ejecucin se interrumpa de alguna manera (cada de lnea, de DB2, ABEND, etc.). Entonces el DB2 har ROLLBACK (vuelta atrs automtica de los cambios realizados en las tablas en la ltima unidad de recuperacin, desde el ltimo COMMIT).

    7.3. Ficheros dinmicos para salida Como se ha apuntado el DB2, automticamente vuelve a la situacin que exista en el ltimo punto de COMMIT, pero los objetos no DB2 no.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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 alocacin dinmica de ficheros sincroniza la actualizacin 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 dinmicos como procesos de COMMIT se hayan realizado y posteriormente realizar una unin de todos ellos.

    7.4. Soporte Fsico Como soporte a ste tratamiento y para hacerlo posible se utilizan dos tablas DB2, varias rutinas para la alocacin dinmica, diversos parmetros en el JCL de ejecucin de cada proceso y varios JCL's que enmarcan la ejecucin de nuestros programas batch. En la arquitectura HOST de ISBAN Las aplicaciones guardarn toda la informacin necesaria para reposicionar sus procesos Batch en caso de rearranque, en las tablas DAREPOS y DAPROCBATCH pertenecientes a la arquitectura. (ver ANEXO3) Tambin se facilitan una serie de esqueletos de programas, as como copys con campos estndar para la codificacin 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 Definicin de las variables RURCOMM y RUROPER de comunicacin con la rutina UR0000.

    URWORK Definicin de las variables de trabajo para reposicionamiento. URCURSOR Definicin del cursor a utilizar en el programa con

    reposicionamiento. COPYS a Utilizar en los Programas con Reposicionamiento.

    URSQLCOD Definicin de la variable para controlar el SQLCODE de los cursores de reposicionamiento.

    MURSWITCH Definicin de los SWITCHES utilizados por el programa con Reposicionamiento.

    URMENSA Definicin de las variables de trabajo a utilizar para la cancelacin.

    7.5. Concatenacin de Ficheros. Se efecta mediante el procedimiento URSORTX. Debe haber tantos JCL's de concatenacin 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, pasndole 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. Cceres

    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 parmetros el nombre del plan, numero de registros del COMMIT, proceso, prefijo de los ficheros y el subsistema DB2. Si no se ha alocado ningn fichero la CLIST no hace nada, razn por la que se debe ejecutar siempre antes del programa de reposicionamiento. Si no se realiza ste paso la aplicacin intentar alocar el fichero que ya existe, dando un error de catalogacin NOT CATLG 2 y por consiguiente un ABEND del proceso. Por otra parte si se varia alguna caracterstica 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 segn el entorno de ejecucin, ya que las CLIST y las libreras 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 parmetros estn interrelacionados. Todos los JCL's debern seguir las normas generales de la instalacin, cmo por ejemplo los nombres de los ficheros o los pasos a ejecutar.

    (ver #JCLREPOS)

    7.9. Esqueletos Para facilitar la codificacin de los programas se disponen de unos esqueletos en 5 modalidades distintas segn utilicen ficheros secuenciales o tablas DB2, de entrada o salida. Dichos esqueletos son unas plantillas sobre las que se insertar la lgica de nuestro programa. En ellos se controla todo el proceso de reposicionamiento y relanzamiento. Se encuentran en la librera: SIS.GRUR.EJEMPLOS. REPOSPS: Esqueleto de programa que efecta 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 explcitamente ya que se utilizar la variable RUR-CALL de la copy RUROPER para hacer llamadas dinmicas a rutinas.

    Entrada: Fichero secuencial. Salida: Fichero secuencial. Se emiten COMMIT's cada 10.000 registros tratados. Por cada COMMIT se 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. Cceres

    19

    proceso debe borrase el ltimo fichero utilizado porque se intentar crear de nuevo, obteniendo un error de catlogo 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 contina 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 aplicacin en base a un ejemplo real. Programa LQBBN01.

    Lo primero que se ha de hacer siempre que nos enfrentemos a la resolucin de programas de este tipo es identificar del tipo de programa: Se debe buscar el esqueleto que ms se ajuste al programa que se va a ejecutar. A continuacin se obtiene una copia del esqueleto pasando el esqueleto a nuestras libreras, sin modificar lo directamente pues ms adelante sern utilizados por otros usuarios. Durante la codificacin 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 situacin al punto donde se qued.

  • Software Factory Rafael Campillo Lorenzo. Cceres

    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. Podra ser utilizada la tabla DAREPOS si el volumen de los datos lo permite. Es importante decidir el criterio lgico de COMMIT, es decir, cada cunto tiempo se realiza un commit. Se puede establecer segn el nmero de registros ledos del fichero maestro, tratados o grabados en el fichero de salida, o segn el nmero de acceso a una tabla DB2, pero se ha de tener clara la lgica 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 lgica se ha decidido ir incrementando el contador en base alas lecturas del fichero maestro. Los programas Batch con reposicionamiento reciben como entrada los parmetros necesarios para su control. No son parmetros de aplicacin, si necesitase otros parmetros para su proceso estos debern pasarse al programa mediante ficheros de entrada. Los parmetros para el control del reposicionamiento son: PLAN Nombre del plan a ejecutar con reposicionamiento. Debera corresponder con el propio. NUMREG Nmero de registros que se van a procesar antes de cada confirmacin. Realmente no tiene porque indicar el nmero de registros de entrada: slo es el tope del contador del bucle de proceso de registros. NUMPROC Nmero del proceso asociado a ese Job. Normalmente siempre es '1' salvo el caso de programas que bifurcan y tratan tablas distintas segn alguna entrada que lean. En este caso se pueden lanzar dos o ms Jobs en paralelo con el mismo programa/plan pero distinto Nmero 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 parmetro es opcional, si no se pone toma por defecto SYSDA. Ahora se han de preparar las tablas para la ejecucin. Para ello se han de obtener y modificar los JCL's correspondientes. No debemos olvidar probar el proceso de relanzamiento una ver construdo 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 LIQUIDACIN DE CONTRADOS DE PRSTAMOS.(SALDO_VALOR_

  • Software Factory Rafael Campillo Lorenzo. Cceres

    21

    * _PTM). * A PARTIR DEL FICHERO DE ALTAS DEL DA(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 VLIDA(ENCONTRADA EN * EL FICHERO DE CONTRATOS) GENERAMOS UN REGISTRO EN LA TABLA * SALDO_VALOR_PTM CON EL SALDO A 0 POR CADA POSICIN LEDA 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 PARMETROS JCL A LA RURCOMM, Y * ACCEDE AL DB2 *

    ****************************************************************************************

    **

    *

    * TABLAS: * TABLA1: SALDO_VALOR_PTM *

    * SALDOS VALOR PARA LIQUIDACIN DE CONTRATOS * DE PRSTAMOS *

    ****************************************************************************************

    ***

    ****************************************************************************************

    ***

    *

    * 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. Cceres

    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 DA.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. Cceres

    23

    EXEC SQL INCLUDE URWORK END-EXEC.

    ****************************************************************************************

    ***

    *** CLAVES DE RELANZAMIENTO Y DE REPOSICIN PARA EL *** FICHERO CONTBA3 Y ALTAS1 En caso de que un programa vea cancelada su ejecucin y tengamos que relanzarlo, tenemos que releer el fichero maestro hasta el punto guardado tras el ltimo COMMIT efectuado antes de su cada. 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 DA COPY BNYDE008.

    * COPY DEL FICHERO ERRALTA COPY JWYARC01.

    Aadir 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. Cceres

    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 ACTUALIZACIN 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. Cceres

    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 FUNCIN 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 - 'CIN = '. 10 WK-TIPMVTO PIC X(3) VALUE SPACES. 05 WK-LECTURAS-CONTBA3. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEDOS EN EL FICHERO CONTBA3: '. 10 WK-CONT-CONTBA3 PIC 9(9) VALUE ZEROS. 05 WK-LECTURAS-ALTAS1. 10 FILLER PIC X(42) VALUE 'REGISTROS - 'LEDOS 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. Cceres

    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. * PARMETROS 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).

    *------------------------------------------------------------

    * DEFINICIN 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 recibirn los datos pasados en PARMETROS en el JCL a travs 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 atencin 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 lgica de nuestro programa encaje exactamente con A100-INICIO-PROGRAMA, A400-PROCESO-PROGRAMA Y S900-FIN, ya que iremos entremezclando nuestra lgica 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. Cceres

    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 parmetros 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 parmetros 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 Nmero de proceso. CA-NUMREG Nmero de registros tratados en cada confirmacin (COMMIT). CA-PREF Prefijo de los ficheros, depender del subsistema donde se est

    ejecutando (DES: desarrollo, SIS: sistemas, EXP: explotacin). Cuando el proceso tiene ficheros de salida, esta llamada a la rutina sirve tambin para recuperar sus datos, que se almacenarn 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 nmero de proceso pasados en los parmetros de reposicionamiento y se recuperar una nica fila. EXEC SQL OPEN REP

  • Software Factory Rafael Campillo Lorenzo. Cceres

    28

    END-EXEC. MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-OPEN-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE. EXEC SQL FETCH REP INTO :RUR-PLANNAME, :RUR-PROCES, :RUR-ESTADO, :RUR-NUMCOMM, :RUR-PUNTEROS END-EXEC. * MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK *---------------------------------------------------------------* *--- "I" : ESTADO DE EJECUCIN MEDIANTE ARSB (VIA ONLINE) *--- SE HA RESERVADO EL NUMERO DE PROCESO PARA LA *--- EJECUCION. *---------------------------------------------------------------* IF RUR-ESTADO = CA-ESTADO-I MOVE SPACES TO UR-VALOR-REGISTRO-TEXT MOVE 254 TO UR-VALOR-REGISTRO-LEN MOVE ZEROES TO UR-CEROS *--- ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS. EXEC SQL UPDATE DAREPOS SET RUR_ESTADO = :CA-ESTADO-C, RUR_NUMCOMM = :UR-CEROS, RUR_PUNTEROS = :UR-VALOR-REGISTRO WHERE CURRENT OF REP END-EXEC MOVE SQLCODE TO SW-DB2-RETURN-CODE EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-UPDA-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE *--- REALIZAMOS COMMIT: Y AS ACTUALIZAMOS LA TABLA DAREPOS. *--- SE RECOMIENDA CONTROLAR EL CODIGO DE RETORNO DE LA SENTENCIA *--- COMMIT Y ABENDAR EL PROGRAMA EN CASO DE SQLCODE DISTINTO DE *--- CERO, YA QUE LOS DATOS PUEDEN QUEDAR INCONSISTENTES.

    Antes de comenzar se debe hacer una primera confirmacin (COMMIT) para liberar el bloqueo sobre la tabla DAREPOS. sta no contabiliza en el proceso del nmero de

  • Software Factory Rafael Campillo Lorenzo. Cceres

    29

    confirmaciones, de hecho, si no hay reposicionamiento, se ha inicializado a cero en la tabla DAREPOS. EXEC SQL COMMIT END-EXEC

    MOVE SQLCODE TO SW-DB2-RETURN-CODE

    EVALUATE TRUE WHEN DB2-OK CONTINUE WHEN OTHER EXEC-FUN XX_CANCELACION_PROCESOS_BATCH TIPO_ERROR('UR-MSG-TIPO-ERROR') DESCRIPCION('UR-MSG-COMM-REP') PROGRAMA('CA-LQBBN01') PARRAFO('UR-MSG-INICIO') SQLCA('SQLCA') END-FUN END-EVALUATE

    MOVE ZEROES TO RUR-NUMCOMM ELSE

    *---------------------------------------------------------------------------------------

    *--- "P" : IMPLICA QUE LOS FICHEROS RESULTANTES DEL *--- PROCESO HAN SIDO BORRADOS Y SE PUEDE EJECUTAR *--- DE NUEVO EL PLAN. *---------------------------------------------------------------------------------------

    Estado Inicial (P). Un proceso est en estado inicial P cuando su ltima ejecucin se complet correctamente, sin ningn error. Implica que el proceso se encuentra en condiciones de ser relanzado, los ficheros resultantes del ltimo proceso han sido borrados y se puede ejecutar de nuevo el plan. Si el programa de reposicionamiento comprueba que el proceso se encuentra en estado inicial NO REPOSICIONAR SU ENTRADA, puesto que debe comenzar el proceso desde el principio. Si la consulta a la tabla DAREPOS indica que el proceso se encuentra en estado inicial (P), se modificar para inicializar el nmero de validaciones a cero. Adems se pondr el switch de reposicionamiento a N, para que el proceso comience desde el principio. (SW-RELANZAMIENTO _ NO-RELANZAMIENTO).

    IF RUR-ESTADO = CA-ESTADO-P MOVE SPACES TO UR-VALOR-REGISTRO-TEXT MOVE 254 TO UR-VALOR-REGISTRO-LEN MOVE ZEROES TO UR-CEROS

    *--- ACTUALIZAR A ESTADO "C" Y GUARDAR PUNTEROS.

    EXEC SQL UPDATE DAREPOS SET RUR_ESTADO = :CA-ESTADO-C, RUR_NUMCOMM = :UR-CEROS, RUR_PUNTEROS = :UR-VALOR-REGISTRO WHERE CURRENT OF REP END-EXEC

    MOVE SQLCODE TO SW-DB2-RETURN-CODE

    EVALUATE TRUE WHEN DB2-OK CONTINUE