IMS DB - Guía rápida
Una breve reseña
La base de datos es una colección de elementos de datos correlacionados. Estos elementos de datos se organizan y almacenan de manera que proporcionen un acceso rápido y fácil. La base de datos IMS es una base de datos jerárquica donde los datos se almacenan en diferentes niveles y cada entidad depende de entidades de nivel superior. Los elementos físicos de un sistema de aplicación que utiliza IMS se muestran en la siguiente figura.
Gestión de base de datos
Un sistema de administración de bases de datos es un conjunto de programas de aplicación que se utilizan para almacenar, acceder y administrar datos en la base de datos. El sistema de administración de bases de datos IMS mantiene la integridad y permite la recuperación rápida de datos organizándolos de tal manera que sea fácil de recuperar. IMS mantiene una gran cantidad de datos corporativos del mundo con la ayuda de su sistema de gestión de bases de datos.
Gerente de transacciones
La función del administrador de transacciones es proporcionar una plataforma de comunicación entre la base de datos y los programas de aplicación. IMS actúa como administrador de transacciones. Un administrador de transacciones trata con el usuario final para almacenar y recuperar datos de la base de datos. IMS puede usar IMS DB o DB2 como su base de datos back-end para almacenar los datos.
DL / I: interfaz de lenguaje de datos
DL / I se compone de programas de aplicación que otorgan acceso a los datos almacenados en la base de datos. IMS DB usa DL / I que sirve como el lenguaje de interfaz que los programadores usan para acceder a la base de datos en un programa de aplicación. Discutiremos esto con más detalle en los próximos capítulos.
Características de IMS
Puntos a tener en cuenta:
- IMS admite aplicaciones de diferentes lenguajes como Java y XML.
- Se puede acceder a las aplicaciones y datos de IMS a través de cualquier plataforma.
- El procesamiento de IMS DB es muy rápido en comparación con DB2.
Limitaciones de IMS
Puntos a tener en cuenta:
- La implementación de IMS DB es muy compleja.
- La estructura de árbol predefinida de IMS reduce la flexibilidad.
- IMS DB es difícil de administrar.
Estructura jerarquica
Una base de datos IMS es una colección de datos que contiene archivos físicos. En una base de datos jerárquica, el nivel superior contiene la información general sobre la entidad. A medida que avanzamos desde el nivel superior al inferior en la jerarquía, obtenemos más y más información sobre la entidad.
Cada nivel de la jerarquía contiene segmentos. En archivos estándar, es difícil implementar jerarquías, pero DL / I admite jerarquías. La siguiente figura muestra la estructura de IMS DB.
Segmento
Puntos a tener en cuenta:
Un segmento se crea agrupando datos similares.
Es la unidad de información más pequeña que DL / I transfiere hacia y desde un programa de aplicación durante cualquier operación de entrada-salida.
Un segmento puede tener uno o más campos de datos agrupados.
En el siguiente ejemplo, el segmento Student tiene cuatro campos de datos.
Estudiante | |||
---|---|---|---|
Número de rollo | Nombre | Curso | Número de teléfono móvil |
Campo
Puntos a tener en cuenta
Un campo es una sola pieza de datos en un segmento. Por ejemplo, Número de rollo, Nombre, Curso y Número de móvil son campos individuales en el segmento de Estudiantes.
Un segmento consta de campos relacionados para recopilar la información de una entidad.
Los campos se pueden utilizar como clave para ordenar los segmentos.
Los campos se pueden utilizar como calificador para buscar información sobre un segmento en particular.
Tipo de segmento
Puntos a tener en cuenta:
El tipo de segmento es una categoría de datos en un segmento.
Una base de datos DL / I puede tener 255 tipos de segmentos diferentes y 15 niveles de jerarquía.
En la siguiente figura, hay tres segmentos, a saber, Biblioteca, Información de libros e Información del estudiante.
Ocurrencia de segmento
Puntos a tener en cuenta:
Una aparición de segmento es un segmento individual de un tipo particular que contiene datos de usuario. En el ejemplo anterior, la información de libros es un tipo de segmento y puede tener cualquier número de apariciones, ya que puede almacenar información sobre cualquier número de libros.
Dentro de la base de datos IMS, solo hay una ocurrencia de cada tipo de segmento, pero puede haber un número ilimitado de ocurrencias de cada tipo de segmento.
Las bases de datos jerárquicas trabajan en las relaciones entre dos o más segmentos. El siguiente ejemplo muestra cómo los segmentos se relacionan entre sí en la estructura de la base de datos IMS.
Segmento de raíz
Puntos a tener en cuenta:
El segmento que se encuentra en la parte superior de la jerarquía se denomina segmento raíz.
El segmento raíz es el único segmento a través del cual se accede a todos los segmentos dependientes.
El segmento raíz es el único segmento de la base de datos que nunca es un segmento secundario.
Solo puede haber un segmento raíz en la estructura de la base de datos de IMS.
Por ejemplo, 'A' es el segmento raíz en el ejemplo anterior.
Segmento padre
Puntos a tener en cuenta:
Un segmento principal tiene uno o más segmentos dependientes directamente debajo de él.
Por ejemplo, 'A', 'B'y 'E' son los segmentos principales en el ejemplo anterior.
Segmento dependiente
Puntos a tener en cuenta:
Todos los segmentos que no sean el segmento raíz se conocen como segmentos dependientes.
Los segmentos dependientes dependen de uno o más segmentos para presentar un significado completo.
Por ejemplo, 'B', 'C1', 'C2', 'D', 'E', 'F1' y 'F2' son segmentos dependientes en nuestro ejemplo.
Segmento infantil
Puntos a tener en cuenta:
Cualquier segmento que tenga un segmento directamente encima de él en la jerarquía se conoce como segmento secundario.
Cada segmento dependiente de la estructura es un segmento secundario.
Por ejemplo, 'B', 'C1', 'C2', 'D', 'E', 'F1' y 'F2' son segmentos secundarios.
Segmentos gemelos
Puntos a tener en cuenta:
Dos o más ocurrencias de segmento de un tipo de segmento particular bajo un único segmento principal se denominan segmentos gemelos.
Por ejemplo, 'C1' y 'C2' son segmentos gemelos, también 'F1' y 'F2' son.
Segmento hermano
Puntos a tener en cuenta:
Los segmentos hermanos son los segmentos de diferentes tipos y el mismo padre.
Por ejemplo, 'B' y 'E' son segmentos hermanos. Similar,'C1', 'C2', y 'D' son segmentos hermanos.
Registro de base de datos
Puntos a tener en cuenta:
Cada ocurrencia del segmento raíz, más todas las ocurrencias del segmento subordinado hacen un registro de base de datos.
Cada registro de base de datos tiene solo un segmento raíz, pero puede tener cualquier número de ocurrencias de segmento.
En el procesamiento de archivos estándar, un registro es una unidad de datos que utiliza un programa de aplicación para ciertas operaciones. En DL / I, esa unidad de datos se conoce como segmento. Un solo registro de base de datos tiene muchas ocurrencias de segmento.
Ruta de la base de datos
Puntos a tener en cuenta:
Una ruta es la serie de segmentos que comienza desde el segmento raíz de un registro de base de datos hasta cualquier ocurrencia de segmento específico.
No es necesario que un camino en la estructura jerárquica esté completo hasta el nivel más bajo. Depende de cuánta información necesitemos sobre una entidad.
Un camino debe ser continuo y no podemos saltarnos niveles intermedios en la estructura.
En la siguiente figura, los registros secundarios en color gris oscuro muestran una ruta que comienza desde 'A' y pasa por 'C2'.
IMS DB almacena datos en diferentes niveles. Los datos se recuperan e insertan emitiendo llamadas DL / I desde un programa de aplicación. Discutiremos sobre las llamadas DL / I en detalle en los próximos capítulos. Los datos se pueden procesar de las siguientes dos formas:
- Tratamiento secuencial
- Procesamiento aleatorio
Tratamiento secuencial
Cuando los segmentos se recuperan secuencialmente de la base de datos, DL / I sigue un patrón predefinido. Entendamos el procesamiento secuencial de IMS DB.
A continuación se enumeran los puntos a tener en cuenta sobre el procesamiento secuencial:
El patrón predefinido para acceder a datos en DL / I es primero en la jerarquía, luego de izquierda a derecha.
Primero se recupera el segmento raíz, luego DL / I se mueve al primer hijo izquierdo y baja hasta el nivel más bajo. En el nivel más bajo, recupera todas las apariciones de segmentos gemelos. Luego pasa al segmento correcto.
Para comprender mejor, observe las flechas en la figura anterior que muestran el flujo para acceder a los segmentos. La biblioteca es el segmento raíz y el flujo comienza desde allí y va hasta los automóviles para acceder a un solo registro. El mismo proceso se repite para todas las ocurrencias para obtener todos los registros de datos.
Al acceder a los datos, el programa utiliza el position en la base de datos que ayuda a recuperar e insertar segmentos.
Procesamiento aleatorio
El procesamiento aleatorio también se conoce como procesamiento directo de datos en IMS DB. Tomemos un ejemplo para comprender el procesamiento aleatorio en IMS DB:
A continuación se enumeran los puntos a tener en cuenta sobre el procesamiento aleatorio:
La ocurrencia de segmento que debe recuperarse aleatoriamente requiere campos clave de todos los segmentos de los que depende. Estos campos clave los proporciona el programa de aplicación.
Una clave concatenada identifica completamente la ruta desde el segmento raíz hasta el segmento que desea recuperar.
Suponga que desea recuperar una ocurrencia del segmento Comercio, luego debe proporcionar los valores de campo clave concatenados de los segmentos de los que depende, como Biblioteca, Libros y Comercio.
El procesamiento aleatorio es más rápido que el secuencial. En el escenario del mundo real, las aplicaciones combinan métodos de procesamiento secuenciales y aleatorios para lograr los mejores resultados.
Campo clave
Puntos a tener en cuenta:
Un campo clave también se conoce como campo de secuencia.
Un campo clave está presente dentro de un segmento y se usa para recuperar la ocurrencia del segmento.
Un campo clave gestiona la aparición del segmento en orden ascendente.
En cada segmento, solo se puede utilizar un campo como campo clave o campo de secuencia.
Campo de búsqueda
Como se mencionó, solo un campo puede usarse como campo clave. Si desea buscar el contenido de otros campos de segmento que no son campos clave, el campo que se utiliza para recuperar los datos se conoce como campo de búsqueda.
Los bloques de control de IMS definen la estructura de la base de datos de IMS y el acceso de un programa a ellos. El siguiente diagrama muestra la estructura de los bloques de control IMS.
DL / I utiliza los siguientes tres tipos de bloques de control:
- Descriptor de base de datos (DBD)
- Bloque de especificación de programa (PSB)
- Bloque de control de acceso (ACB)
Descriptor de base de datos (DBD)
Puntos a tener en cuenta:
DBD describe la estructura física completa de la base de datos una vez que se han definido todos los segmentos.
Al instalar una base de datos DL / I, se debe crear un DBD ya que es necesario para acceder a la base de datos IMS.
Las aplicaciones pueden utilizar diferentes vistas del DBD. Se denominan estructuras de datos de aplicación y se especifican en el bloque de especificaciones del programa.
El administrador de la base de datos crea un DBD codificando DBDGEN declaraciones de control.
DBDGEN
DBDGEN es un generador de descriptores de bases de datos. La creación de bloques de control es responsabilidad del administrador de la base de datos. Todos los módulos de carga se almacenan en la biblioteca IMS. Las instrucciones de macro en lenguaje ensamblador se utilizan para crear bloques de control. A continuación se muestra un código de muestra que muestra cómo crear un DBD utilizando declaraciones de control DBDGEN:
PRINT NOGEN
DBD NAME=LIBRARY,ACCESS=HIDAM
DATASET DD1=LIB,DEVICE=3380
SEGM NAME=LIBSEG,PARENT=0,BYTES=10
FIELD NAME=(LIBRARY,SEQ,U),BYTES=10,START=1,TYPE=C
SEGM NAME=BOOKSEG,PARENT=LIBSEG,BYTES=5
FIELD NAME=(BOOKS,SEQ,U),BYTES=10,START=1,TYPE=C
SEGM NAME=MAGSEG,PARENT=LIBSEG,BYTES=9
FIELD NAME=(MAGZINES,SEQ),BYTES=8,START=1,TYPE=C
DBDGEN
FINISH
END
Entendamos los términos utilizados en el DBDGEN anterior:
Cuando ejecuta las declaraciones de control anteriores en JCL, crea una estructura física donde BIBLIOTECA es el segmento raíz y LIBROS y REVISTAS son sus segmentos secundarios.
La primera declaración de macro DBD identifica la base de datos. Aquí, debemos mencionar el NOMBRE y el ACCESO que utiliza DL / I para acceder a esta base de datos.
La segunda instrucción de macro DATASET identifica el archivo que contiene la base de datos.
Los tipos de segmento se definen mediante la instrucción macro SEGM. Necesitamos especificar el PADRE de ese segmento. Si es un segmento raíz, entonces mencione PADRE = 0.
La siguiente tabla muestra los parámetros utilizados en la instrucción de macro FIELD:
S. No | Descripción de parámetros |
---|---|
1 | Name Nombre del campo, normalmente de 1 a 8 caracteres |
2 | Bytes Longitud del campo |
3 | Start Posición del campo dentro del segmento |
4 | Type Tipo de datos del campo |
5 | Type C Tipo de datos de caracteres |
6 | Type P Tipo de datos decimal empaquetado |
7 | Type Z Tipo de datos decimal por zonas |
8 | Type X Tipo de datos hexadecimales |
9 | Type H Tipo de datos binarios de media palabra |
10 | Type F Tipo de datos binarios de palabra completa |
Bloque de especificación de programa (PSB)
Los fundamentos de PSB son los que se indican a continuación:
Una base de datos tiene una única estructura física definida por un DBD, pero los programas de aplicación que la procesan pueden tener diferentes vistas de la base de datos. Estas vistas se denominan estructura de datos de la aplicación y se definen en la PSB.
Ningún programa puede usar más de un PSB en una sola ejecución.
Los programas de aplicación tienen su propio PSB y es común que los programas de aplicación que tienen requisitos de procesamiento de base de datos similares compartan un PSB.
PSB consta de uno o más bloques de control denominados Bloques de comunicación de programa (PCB). El PSB contiene un PCB para cada base de datos DL / I a la que accederá el programa de aplicación. Discutiremos más sobre PCB en los próximos módulos.
Se debe ejecutar PSBGEN para crear una PSB para el programa.
PSBGEN
PSBGEN se conoce como Generador de bloques de especificación de programa. El siguiente ejemplo crea un PSB usando PSBGEN -
PRINT NOGEN
PCB TYPE=DB,DBDNAME=LIBRARY,KEYLEN=10,PROCOPT=LS
SENSEG NAME=LIBSEG
SENSEG NAME=BOOKSEG,PARENT=LIBSEG
SENSEG NAME=MAGSEG,PARENT=LIBSEG
PSBGEN PSBNAME=LIBPSB,LANG=COBOL
END
Entendamos los términos utilizados en el DBDGEN anterior:
La primera declaración macro es el bloque de comunicación del programa (PCB) que describe el tipo, el nombre, la longitud de la clave y la opción de procesamiento de la base de datos.
El parámetro DBDNAME en la macro PCB especifica el nombre del DBD. KEYLEN especifica la longitud de la clave concatenada más larga. El programa puede procesar en la base de datos. El parámetro PROCOPT especifica las opciones de procesamiento del programa. Por ejemplo, LS significa solo operaciones de CARGA.
SENSEG se conoce como sensibilidad de nivel de segmento. Define el acceso del programa a partes de la base de datos y se identifica a nivel de segmento. El programa tiene acceso a todos los campos dentro de los segmentos a los que es sensible. Un programa también puede tener sensibilidad a nivel de campo. En esto, definimos un nombre de segmento y el nombre principal del segmento.
La última declaración de macro es PCBGEN. PSBGEN es la última declaración que dice que no hay más declaraciones que procesar. PSBNAME define el nombre dado al módulo PSB de salida. El parámetro LANG especifica el idioma en el que está escrito el programa de aplicación, por ejemplo, COBOL.
Bloque de control de acceso (ACB)
A continuación se enumeran los puntos a tener en cuenta sobre los bloques de control de acceso:
Los bloques de control de acceso para un programa de aplicación combinan el descriptor de base de datos y el bloque de especificación del programa en un formato ejecutable.
ACBGEN se conoce como Generador de bloques de control de acceso. Se utiliza para generar ACB.
Para los programas en línea, necesitamos preconstruir ACB. Por tanto, la utilidad ACBGEN se ejecuta antes de ejecutar el programa de aplicación.
Para los programas por lotes, también se pueden generar ACB en el momento de la ejecución.
Un programa de aplicación que incluye llamadas DL / I no se puede ejecutar directamente. En su lugar, se requiere un JCL para activar el módulo por lotes DL / I de IMS. El módulo de inicialización por lotes en IMS es DFSRRC00. El programa de aplicación y el módulo DL / I se ejecutan juntos. El siguiente diagrama muestra la estructura de un programa de aplicación que incluye llamadas DL / I para acceder a una base de datos.
El programa de aplicación interactúa con los módulos IMS DL / I a través de los siguientes elementos del programa:
Una declaración ENTRY especifica que el programa utiliza los PCB.
Una máscara de PCB se relaciona con la información conservada en el PCB preconstruido que recibe información de retorno del IMS.
Se utiliza un área de entrada-salida para pasar segmentos de datos hacia y desde la base de datos IMS.
Las llamadas a DL / I especifican las funciones de procesamiento como buscar, insertar, eliminar, reemplazar, etc.
Verificar códigos de estado se utiliza para verificar el código de retorno SQL de la opción de proceso especificada para informar si la operación fue exitosa o no.
Se utiliza una declaración Terminate para finalizar el procesamiento del programa de aplicación que incluye el DL / I.
Diseño de segmentos
A partir de ahora, nos enteramos de que el IMS consta de segmentos que se utilizan en lenguajes de programación de alto nivel para acceder a los datos. Considere la siguiente estructura de base de datos IMS de una biblioteca que hemos visto anteriormente y aquí vemos el diseño de sus segmentos en COBOL:
01 LIBRARY-SEGMENT.
05 BOOK-ID PIC X(5).
05 ISSUE-DATE PIC X(10).
05 RETURN-DATE PIC X(10).
05 STUDENT-ID PIC A(25).
01 BOOK-SEGMENT.
05 BOOK-ID PIC X(5).
05 BOOK-NAME PIC A(30).
05 AUTHOR PIC A(25).
01 STUDENT-SEGMENT.
05 STUDENT-ID PIC X(5).
05 STUDENT-NAME PIC A(25).
05 DIVISION PIC X(10).
Descripción general del programa de aplicación
La estructura de un programa de aplicación IMS es diferente a la de un programa de aplicación no IMS. Un programa IMS no se puede ejecutar directamente; más bien siempre se llama como una subrutina. Un programa de aplicación IMS consta de bloques de especificación del programa para proporcionar una vista de la base de datos IMS.
El programa de aplicación y los PSB vinculados a ese programa se cargan cuando ejecutamos un programa de aplicación que incluye módulos IMS DL / I. Luego, el módulo IMS ejecuta las solicitudes CALL desencadenadas por los programas de aplicación.
Servicios IMS
El programa de aplicación utiliza los siguientes servicios IMS:
- Acceder a los registros de la base de datos
- Emitir comandos IMS
- Emitir llamadas de servicio IMS
- Llamadas a puestos de control
- Sincronizar llamadas
- Enviar o recibir mensajes desde terminales de usuario en línea
Incluimos llamadas DL / I dentro del programa de aplicación COBOL para comunicarse con la base de datos IMS. Usamos las siguientes declaraciones DL / I en el programa COBOL para acceder a la base de datos:
- Declaración de entrada
- Declaración de retorno
- Declaración de llamada
Declaración de entrada
Se utiliza para pasar el control del DL / I al programa COBOL. Aquí está la sintaxis de la declaración de entrada:
ENTRY 'DLITCBL' USING pcb-name1
[pcb-name2]
La declaración anterior está codificada en el Procedure Divisionde un programa COBOL. Entremos en los detalles de la declaración de entrada en el programa COBOL -
El módulo de inicialización por lotes activa el programa de aplicación y se ejecuta bajo su control.
El DL / I carga los bloques y módulos de control necesarios y el programa de aplicación, y el control se le da al programa de aplicación.
DLITCBL son las siglas de DL/I to COBOL. La declaración de entrada se utiliza para definir el punto de entrada en el programa.
Cuando llamamos a un subprograma en COBOL, también se proporciona su dirección. Asimismo, cuando el DL / I cede el control al programa de aplicación, también proporciona la dirección de cada PCB definida en la PSB del programa.
Todas las PCB utilizadas en el programa de aplicación deben definirse dentro del Linkage Section del programa COBOL porque PCB reside fuera del programa de aplicación.
La definición de PCB dentro de la sección de vinculación se denomina como PCB Mask.
La relación entre las máscaras de PCB y los PCB reales almacenados se crea enumerando los PCB en la declaración de entrada. La secuencia de listado en la declaración de entrada debe ser la misma que aparece en el PSBGEN.
Declaración de retorno
Se utiliza para devolver el control al programa de control IMS. A continuación se muestra la sintaxis de la declaración Goback:
GOBACK
A continuación se enumeran los puntos fundamentales a tener en cuenta sobre la declaración Goback:
GOBACK está codificado al final del programa de aplicación. Devuelve el control a DL / I desde el programa.
No debemos usar STOP RUN ya que devuelve el control al sistema operativo. Si usamos STOP RUN, el DL / I nunca tiene la oportunidad de realizar sus funciones de terminación. Por eso, en los programas de aplicación DL / I, se utiliza la instrucción Goback.
Antes de emitir una declaración Goback, todos los conjuntos de datos que no sean DL / I utilizados en el programa de aplicación COBOL deben cerrarse; de lo contrario, el programa finalizará de forma anormal.
Declaración de llamada
La declaración de llamada se utiliza para solicitar servicios DL / I, como ejecutar ciertas operaciones en la base de datos IMS. Aquí está la sintaxis de la declaración de llamada:
CALL 'CBLTDLI' USING DLI Function Code
PCB Mask
Segment I/O Area
[Segment Search Arguments]
La sintaxis anterior muestra parámetros que puede usar con la declaración de llamada. Discutiremos cada uno de ellos en la siguiente tabla:
S.No. | Descripción de parámetros |
---|---|
1 | DLI Function Code Identifica la función DL / I a realizar. Este argumento es el nombre de los cuatro campos de caracteres que describen la operación de E / S. |
2 | PCB Mask La definición de PCB dentro de la sección de vinculación se denomina máscara de PCB. Se utilizan en la declaración de entrada. No se requieren declaraciones SELECT, ASSIGN, OPEN o CLOSE. |
3 | Segment I/O Area Nombre de un área de trabajo de entrada / salida. Ésta es un área del programa de aplicación en la que el DL / I coloca un segmento solicitado. |
4 | Segment Search Arguments Estos son parámetros opcionales según el tipo de llamada emitida. Se utilizan para buscar segmentos de datos dentro de la base de datos IMS. |
A continuación se presentan los puntos a tener en cuenta sobre la declaración de llamada:
CBLTDLI son las siglas de COBOL to DL/I. Es el nombre de un módulo de interfaz que se edita en enlace con el módulo de objeto de su programa.
Después de cada llamada DL / I, el DLI almacena un código de estado en la PCB. El programa puede usar este código para determinar si la llamada tuvo éxito o no.
Ejemplo
Para comprender mejor COBOL, puede seguir nuestro tutorial de COBOL aquí . El siguiente ejemplo muestra la estructura de un programa COBOL que usa una base de datos IMS y llamadas DL / I. Discutiremos en detalle cada uno de los parámetros utilizados en el ejemplo en los próximos capítulos.
IDENTIFICATION DIVISION.
PROGRAM-ID. TEST1.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 DLI-FUNCTIONS.
05 DLI-GU PIC X(4) VALUE 'GU '.
05 DLI-GHU PIC X(4) VALUE 'GHU '.
05 DLI-GN PIC X(4) VALUE 'GN '.
05 DLI-GHN PIC X(4) VALUE 'GHN '.
05 DLI-GNP PIC X(4) VALUE 'GNP '.
05 DLI-GHNP PIC X(4) VALUE 'GHNP'.
05 DLI-ISRT PIC X(4) VALUE 'ISRT'.
05 DLI-DLET PIC X(4) VALUE 'DLET'.
05 DLI-REPL PIC X(4) VALUE 'REPL'.
05 DLI-CHKP PIC X(4) VALUE 'CHKP'.
05 DLI-XRST PIC X(4) VALUE 'XRST'.
05 DLI-PCB PIC X(4) VALUE 'PCB '.
01 SEGMENT-I-O-AREA PIC X(150).
LINKAGE SECTION.
01 STUDENT-PCB-MASK.
05 STD-DBD-NAME PIC X(8).
05 STD-SEGMENT-LEVEL PIC XX.
05 STD-STATUS-CODE PIC XX.
05 STD-PROC-OPTIONS PIC X(4).
05 FILLER PIC S9(5) COMP.
05 STD-SEGMENT-NAME PIC X(8).
05 STD-KEY-LENGTH PIC S9(5) COMP.
05 STD-NUMB-SENS-SEGS PIC S9(5) COMP.
05 STD-KEY PIC X(11).
PROCEDURE DIVISION.
ENTRY 'DLITCBL' USING STUDENT-PCB-MASK.
A000-READ-PARA.
110-GET-INVENTORY-SEGMENT.
CALL ‘CBLTDLI’ USING DLI-GN
STUDENT-PCB-MASK
SEGMENT-I-O-AREA.
GOBACK.
La función DL / I es el primer parámetro que se utiliza en una llamada DL / I. Esta función indica qué operación se realizará en la base de datos IMS por la llamada IMS DL / I. La sintaxis de la función DL / I es la siguiente:
01 DLI-FUNCTIONS.
05 DLI-GU PIC X(4) VALUE 'GU '.
05 DLI-GHU PIC X(4) VALUE 'GHU '.
05 DLI-GN PIC X(4) VALUE 'GN '.
05 DLI-GHN PIC X(4) VALUE 'GHN '.
05 DLI-GNP PIC X(4) VALUE 'GNP '.
05 DLI-GHNP PIC X(4) VALUE 'GHNP'.
05 DLI-ISRT PIC X(4) VALUE 'ISRT'.
05 DLI-DLET PIC X(4) VALUE 'DLET'.
05 DLI-REPL PIC X(4) VALUE 'REPL'.
05 DLI-CHKP PIC X(4) VALUE 'CHKP'.
05 DLI-XRST PIC X(4) VALUE 'XRST'.
05 DLI-PCB PIC X(4) VALUE 'PCB '.
Esta sintaxis representa los siguientes puntos clave:
Para este parámetro, podemos proporcionar cualquier nombre de cuatro caracteres como campo de almacenamiento para almacenar el código de función.
El parámetro de función DL / I está codificado en la sección de almacenamiento de trabajo del programa COBOL.
Para especificar la función DL / I, el programador necesita codificar uno de los nombres de datos de nivel 05 como DLI-GU en una llamada DL / I, ya que COBOL no permite codificar literales en una declaración CALL.
Las funciones DL / I se dividen en tres categorías: Obtener, Actualizar y Otras funciones. Analicemos cada uno de ellos en detalle.
Obtener funciones
Las funciones de obtención son similares a la operación de lectura admitida por cualquier lenguaje de programación. La función Obtener se utiliza para obtener segmentos de una base de datos IMS DL / I. Las siguientes funciones Get se utilizan en IMS DB:
- Sea único
- Obtener siguiente
- Obtener siguiente dentro de los padres
- Mantente único
- Espera Siguiente
- Get Hold Next dentro de Parent
Consideremos la siguiente estructura de la base de datos IMS para comprender las llamadas de función DL / I:
Sea único
El código 'GU' se utiliza para la función Get Unique. Funciona de manera similar a la instrucción de lectura aleatoria en COBOL. Se usa para buscar una ocurrencia de segmento particular basada en los valores de campo. Los valores de campo se pueden proporcionar utilizando argumentos de búsqueda de segmento. La sintaxis de una llamada GU es la siguiente:
CALL 'CBLTDLI' USING DLI-GU
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Si ejecuta la declaración de llamada anterior proporcionando valores apropiados para todos los parámetros en el programa COBOL, puede recuperar el segmento en el área de E / S del segmento de la base de datos. En el ejemplo anterior, si proporciona los valores de campo de Biblioteca, Revistas y Salud, obtendrá la aparición deseada del segmento Salud.
Obtener siguiente
El código 'GN' se utiliza para la función Get Next. Funciona de manera similar a la siguiente declaración de lectura en COBOL. Se utiliza para buscar ocurrencias de segmentos en una secuencia. El patrón predefinido para acceder a las ocurrencias de los segmentos de datos está abajo en la jerarquía, luego de izquierda a derecha. La sintaxis de una llamada GN es la siguiente:
CALL 'CBLTDLI' USING DLI-GN
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Si ejecuta la declaración de llamada anterior proporcionando valores apropiados para todos los parámetros en el programa COBOL, puede recuperar la ocurrencia del segmento en el área de E / S del segmento de la base de datos en un orden secuencial. En el ejemplo anterior, comienza accediendo al segmento Biblioteca, luego al segmento Libros, y así sucesivamente. Realizamos la llamada GN una y otra vez, hasta llegar a la ocurrencia del segmento que queremos.
Obtener siguiente dentro de los padres
El código 'GNP' se usa para Get Next dentro de Parent. Esta función se utiliza para recuperar ocurrencias de segmento en secuencia subordinada a un segmento principal establecido. La sintaxis de una llamada GNP es la siguiente:
CALL 'CBLTDLI' USING DLI-GNP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Mantente único
El código 'GHU' se utiliza para Get Hold Unique. La función Hold especifica que vamos a actualizar el segmento después de la recuperación. La función Get Hold Unique corresponde a la llamada Get Unique. A continuación se muestra la sintaxis de una llamada GHU:
CALL 'CBLTDLI' USING DLI-GHU
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Espera Siguiente
El código 'GHN' se utiliza para Get Hold Next. La función Hold especifica que vamos a actualizar el segmento después de la recuperación. La función Get Hold Next corresponde a la llamada Get Next. A continuación se muestra la sintaxis de una llamada GHN:
CALL 'CBLTDLI' USING DLI-GHN
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Get Hold Next dentro de Parent
El código 'GHNP' se usa para Get Hold Next dentro de Parent. La función Hold especifica que vamos a actualizar el segmento después de la recuperación. La función Get Hold Next within Parent corresponde a la llamada Get Next within Parent. A continuación se muestra la sintaxis de una llamada GHNP:
CALL 'CBLTDLI' USING DLI-GHNP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Funciones de actualización
Las funciones de actualización son similares a las operaciones de reescritura o inserción en cualquier otro lenguaje de programación. Las funciones de actualización se utilizan para actualizar segmentos en una base de datos IMS DL / I. Antes de usar la función de actualización, debe haber una llamada exitosa con la cláusula Hold para la ocurrencia del segmento. Las siguientes funciones de actualización se utilizan en IMS DB:
- Insert
- Delete
- Replace
Insertar
El código 'ISRT' se utiliza para la función Insertar. La función ISRT se utiliza para agregar un nuevo segmento a la base de datos. Se utiliza para cambiar una base de datos existente o cargar una nueva. A continuación se muestra la sintaxis de una llamada ISRT:
CALL 'CBLTDLI' USING DLI-ISRT
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Eliminar
El código 'DLET' se utiliza para la función Eliminar. Se utiliza para eliminar un segmento de una base de datos IMS DL / I. A continuación se muestra la sintaxis de una llamada DLET:
CALL 'CBLTDLI' USING DLI-DLET
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Reemplazar
El código 'REPL' se usa para Get Hold Next dentro de Parent. La función Reemplazar se utiliza para reemplazar un segmento en la base de datos IMS DL / I. A continuación se muestra la sintaxis de una llamada REPL:
CALL 'CBLTDLI' USING DLI-REPL
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Otras funciones
Las siguientes funciones se utilizan en llamadas IMS DL / I:
- Checkpoint
- Restart
- PCB
Control
El código 'CHKP' se utiliza para la función Checkpoint. Se utiliza en las funciones de recuperación de IMS. A continuación se muestra la sintaxis de una llamada CHKP:
CALL 'CBLTDLI' USING DLI-CHKP
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Reiniciar
El código 'XRST' se utiliza para la función de reinicio. Se utiliza en las funciones de reinicio de IMS. A continuación se muestra la sintaxis de una llamada XRST:
CALL 'CBLTDLI' USING DLI-XRST
PCB Mask
Segment I/O Area
[Segment Search Arguments]
tarjeta de circuito impreso
La función PCB se utiliza en programas CICS en la base de datos IMS DL / I. A continuación se muestra la sintaxis de una llamada de PCB:
CALL 'CBLTDLI' USING DLI-PCB
PCB Mask
Segment I/O Area
[Segment Search Arguments]
Puede encontrar más detalles sobre estas funciones en el capítulo de recuperación.
PCB son las siglas de Program Communication Block. PCB Mask es el segundo parámetro utilizado en la llamada DL / I. Se declara en la sección de vinculación. A continuación se muestra la sintaxis de una máscara de PCB:
01 PCB-NAME.
05 DBD-NAME PIC X(8).
05 SEG-LEVEL PIC XX.
05 STATUS-CODE PIC XX.
05 PROC-OPTIONS PIC X(4).
05 RESERVED-DLI PIC S9(5).
05 SEG-NAME PIC X(8).
05 LENGTH-FB-KEY PIC S9(5).
05 NUMB-SENS-SEGS PIC S9(5).
05 KEY-FB-AREA PIC X(n).
Estos son los puntos clave a tener en cuenta:
Para cada base de datos, el DL / I mantiene un área de almacenamiento que se conoce como el bloque de comunicación del programa. Almacena la información sobre la base de datos a la que se accede dentro de los programas de aplicación.
La declaración ENTRY crea una conexión entre las máscaras de PCB en la sección de enlace y las PCB dentro del PSB del programa. Las máscaras de PCB utilizadas en una llamada DL / I indican qué base de datos usar para la operación.
Puede asumir que esto es similar a especificar un nombre de archivo en una instrucción COBOL READ o un nombre de registro en una instrucción COBOL write. No se requieren declaraciones SELECT, ASSIGN, OPEN o CLOSE.
Después de cada llamada DL / I, DL / I almacena un código de estado en la PCB y el programa puede usar ese código para determinar si la llamada tuvo éxito o no.
Nombre de PCB
Puntos a tener en cuenta:
PCB Name es el nombre del área que se refiere a la estructura completa de los campos de PCB.
El nombre de PCB se usa en declaraciones de programa.
El nombre de PCB no es un campo en el PCB.
Nombre DBD
Puntos a tener en cuenta:
El nombre DBD contiene los datos del carácter. Tiene ocho bytes de longitud.
El primer campo de la PCB es el nombre de la base de datos que se está procesando y proporciona el nombre DBD de la biblioteca de descripciones de la base de datos asociada con una base de datos en particular.
Nivel de segmento
Puntos a tener en cuenta:
El nivel de segmento se conoce como indicador de nivel de jerarquía de segmento. Contiene datos de caracteres y tiene dos bytes de longitud.
Un campo de nivel de segmento almacena el nivel del segmento que se procesó. Cuando un segmento se recupera con éxito, el número de nivel del segmento recuperado se almacena aquí.
Un campo de nivel de segmento nunca tiene un valor superior a 15 porque ese es el número máximo de niveles permitidos en una base de datos DL / I.
Código de estado
Puntos a tener en cuenta:
El campo de código de estado contiene dos bytes de datos de caracteres.
El código de estado contiene el código de estado DL / I.
Los espacios se mueven al campo del código de estado cuando DL / I completa el procesamiento de llamadas con éxito.
Los valores sin espacio indican que la llamada no se realizó correctamente.
El código de estado GB indica el final del archivo y el código de estado GE indica que no se encuentra el segmento solicitado.
Opciones de proceso
Puntos a tener en cuenta:
Las opciones de proceso se conocen como opciones de procesamiento que contienen campos de datos de cuatro caracteres.
Un campo de Opción de procesamiento indica qué tipo de procesamiento está autorizado a realizar el programa en la base de datos.
DL / I reservado
Puntos a tener en cuenta:
DL / I reservado se conoce como el área reservada del IMS. Almacena datos binarios de cuatro bytes.
IMS utiliza esta área para su propia vinculación interna relacionada con un programa de aplicación.
Nombre del segmento
Puntos a tener en cuenta:
SEG Name se conoce como área de retroalimentación de nombre de segmento. Contiene 8 bytes de datos de caracteres.
El nombre del segmento se almacena en este campo después de cada llamada DL / I.
Longitud clave FB
Puntos a tener en cuenta:
Longitud de la tecla FB se conoce como la longitud del área de respuesta de la tecla. Almacena cuatro bytes de datos binarios.
Este campo se utiliza para informar la longitud de la clave concatenada del segmento de nivel más bajo procesado durante la llamada anterior.
Se utiliza con el área de retroalimentación clave.
Número de segmentos de sensibilidad
Puntos a tener en cuenta:
El número de segmentos de sensibilidad almacena cuatro bytes de datos binarios.
Define a qué nivel es sensible un programa de aplicación. Representa un recuento del número de segmentos en la estructura de datos lógica.
Área de comentarios clave
Puntos a tener en cuenta:
El área de retroalimentación clave varía en longitud de una PCB a otra.
Contiene la clave concatenada más larga posible que se puede utilizar con la vista del programa de la base de datos.
Después de una operación de base de datos, DL / I devuelve la clave concatenada del segmento de nivel más bajo procesado en este campo y devuelve la longitud de la clave en el área de retroalimentación de longitud de clave.
SSA son las siglas de Segment Search Arguments (argumentos de búsqueda de segmento). SSA se utiliza para identificar la ocurrencia del segmento al que se accede. Es un parámetro opcional. Podemos incluir cualquier número de SSA según el requisito. Hay dos tipos de SSA:
- SSA no calificado
- SSA calificado
SSA no calificado
Una SSA no calificada proporciona el nombre del segmento que se utiliza dentro de la llamada. A continuación se muestra la sintaxis de un SSA no calificado:
01 UNQUALIFIED-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X VALUE SPACE.
Los puntos clave de la SSA no calificada son los siguientes:
Un SSA básico no calificado tiene una longitud de 9 bytes.
The first 8 bytes hold the segment name which is being used for processing.
The last byte always contains space.
DL/I uses the last byte to determine the type of SSA.
To access a particular segment, move the name of the segment in the SEGMENT-NAME field.
The following images show the structures of unqualified and qualified SSAs −
Qualified SSA
A Qualified SSA provides the segment type with the specific database occurrence of a segment. Given below is the syntax of a Qualified SSA −
01 QUALIFIED-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X(01) VALUE '('.
05 FIELD-NAME PIC X(8).
05 REL-OPR PIC X(2).
05 SEARCH-VALUE PIC X(n).
05 FILLER PIC X(n+1) VALUE ')'.
The key points of qualified SSA are as follows −
The first 8 bytes of a qualified SSA holds the segment name being used for processing.
The ninth byte is a left parenthesis '('.
The next 8 bytes starting from the tenth position specifies the field name which we want to search.
After the field name, in the 18th and 19th positions, we specify two-character relational operator code.
Then we specify the field value and in the last byte, there is a right parenthesis ')'.
The following table shows the relational operators used in a Qualified SSA.
Relational Operator | Symbol | Description |
---|---|---|
EQ | = | Equal |
NE | ~= ˜ | Not equal |
GT | > | Greater than |
GE | >= | Greater than or equal |
LT | << | Less than |
LE | <= | Less than or equal |
Command Codes
Command codes are used to enhance the functionality of DL/I calls. Command codes reduce the number of DL/I calls, making the programs simple. Also, it improves the performance as the number of calls is reduced. The following image shows how command codes are used in unqualified and qualified SSAs −
The key points of command codes are as follows −
To use command codes, specify an asterisk in the 9th position of the SSA as shown in the above image.
Command code is coded at the tenth position.
From 10th position onwards, DL/I considers all characters to be command codes until it encounters a space for an unqualified SSA and a left parenthesis for a qualified SSA.
The following table shows the list of command codes used in SSA −
Command Code | Description |
---|---|
C | Concatenated Key |
D | Path Call |
F | First Occurrence |
L | Last Occurrence |
N | Path Call Ignore |
P | Set Parentage |
Q | Enqueue Segment |
U | Maintain Position at this level |
V | Maintain Position at this and all above levels |
- | Null Command Code |
Multiple Qualifications
The fundamental points of multiple qualifications are as follows −
Multiple qualifications are required when we need to use two or more qualifications or fields for comparison.
We use Boolean operators like AND and OR to connect two or more qualifications.
Multiple qualifications can be used when we want to process a segment based on a range of possible values for a single field.
Given below is the syntax of Multiple Qualifications −
01 QUALIFIED-SSA.
05 SEGMENT-NAME PIC X(8).
05 FILLER PIC X(01) VALUE '('.
05 FIELD-NAME1 PIC X(8).
05 REL-OPR PIC X(2).
05 SEARCH-VALUE1 PIC X(m).
05 MUL-QUAL PIC X VALUE '&'.
05 FIELD-NAME2 PIC X(8).
05 REL-OPR PIC X(2).
05 SEARCH-VALUE2 PIC X(n).
05 FILLER PIC X(n+1) VALUE ')'.
MUL-QUAL is a short term for MULtiple QUALIification in which we can provide boolean operators like AND or OR.
The various data retrieval methods used in IMS DL/I calls are as follows −
- GU Call
- GN Call
- Using Command Codes
- Multiple Processing
Let us consider the following IMS database structure to understand the data retrieval function calls −
GU Call
The fundamentals of GU call are as follows −
GU call is known as Get Unique call. It is used for random processing.
If an application does not update the database regularly or if the number of database updates is less, then we use random processing.
GU call is used to place the pointer at a particular position for further sequential retrieval.
GU calls are independent of the pointer position established by the previous calls.
GU call processing is based on the unique key fields supplied in the call statement.
If we supply a key field that is not unique, then DL/I returns the first segment occurrence of the key field.
CALL 'CBLTDLI' USING DLI-GU
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
ENGINEERING-SSA
IT-SSA
The above example shows we issue a GU call by providing a complete set of qualified SSAs. It includes all the key fields starting from the root level to the segment occurrence that we want to retrieve.
GU Call Considerations
If we do not provide the complete set of qualified SSAs in the call, then DL/I works in the following way −
When we use an unqualified SSA in a GU call, DL/I accesses the first segment occurrence in the database that meets the criteria you specify.
When we issue a GU call without any SSAs, DL/I returns the first occurrence of the root segment in the database.
If some SSAs at intermediate levels are not mentioned in the call, then DL/I uses either the established position or the default value of an unqualified SSA for the segment.
Códigos de estado
La siguiente tabla muestra los códigos de estado relevantes después de una llamada GU:
S. No | Código de estado y descripción |
---|---|
1 | Spaces Llamada exitosa |
2 | GE DL / No pude encontrar un segmento que cumpliera con los criterios especificados en la llamada |
Llamada GN
Los fundamentos de la llamada GN son los siguientes:
La llamada GN se conoce como llamada Get Next. Se utiliza para el procesamiento secuencial básico.
La posición inicial del puntero en la base de datos es antes del segmento raíz del primer registro de la base de datos.
La posición del puntero de la base de datos está antes de la siguiente aparición de segmento en la secuencia, después de una llamada GN exitosa.
La llamada GN comienza a través de la base de datos desde la posición establecida por la llamada anterior.
Si una llamada GN no está calificada, devuelve la siguiente ocurrencia del segmento en la base de datos independientemente de su tipo, en secuencia jerárquica.
Si una llamada GN incluye SSA, DL / I recupera solo los segmentos que cumplen los requisitos de todos los SSA especificados.
CALL 'CBLTDLI' USING DLI-GN
PCB-NAME
IO-AREA
BOOKS-SSA
El ejemplo anterior muestra que emitimos una llamada GN que proporciona la posición inicial para leer los registros secuencialmente. Obtiene la primera aparición del segmento LIBROS.
Códigos de estado
La siguiente tabla muestra los códigos de estado relevantes después de una llamada GN:
S. No | Código de estado y descripción |
---|---|
1 | Spaces Llamada exitosa |
2 | GE DL / No pude encontrar un segmento que cumpliera con los criterios especificados en la llamada. |
3 | GA Una llamada GN no calificada sube un nivel en la jerarquía de la base de datos para recuperar el segmento. |
4 | GB Se alcanza el final de la base de datos y no se encuentra el segmento. |
GK Una llamada GN no calificada intenta buscar un segmento de un tipo particular que no sea el recién recuperado, pero permanece en el mismo nivel jerárquico. |
Códigos de comando
Los códigos de comando se utilizan con llamadas para buscar una ocurrencia de segmento. Los diversos códigos de comando utilizados con las llamadas se describen a continuación.
Código de comando F
Puntos a tener en cuenta:
Cuando se especifica un código de comando F en una llamada, la llamada procesa la primera aparición del segmento.
Los códigos de comando F se pueden usar cuando queremos procesar secuencialmente y se puede usar con llamadas GN y llamadas GNP.
Si especificamos un código de comando F con una llamada GU, no tiene ningún significado, ya que las llamadas GU recuperan la aparición del primer segmento por defecto.
Código de comando L
Puntos a tener en cuenta:
Cuando se especifica un código de comando L en una llamada, la llamada procesa la última aparición del segmento.
Los códigos de comando L se pueden usar cuando queremos procesar secuencialmente y se puede usar con llamadas GN y llamadas GNP.
Código de comando D
Puntos a tener en cuenta:
El código de comando D se usa para obtener más de un segmento de ocurrencias usando una sola llamada.
Normalmente, DL / I opera en el segmento de nivel más bajo especificado en una SSA, pero en muchos casos, también queremos datos de otros niveles. En esos casos, podemos usar el código de comando D.
El código de comando D facilita la recuperación de toda la ruta de los segmentos.
Código de comando C
Puntos a tener en cuenta:
El código de comando C se usa para concatenar claves.
El uso de operadores relacionales es un poco complejo, ya que necesitamos especificar un nombre de campo, un operador relacional y un valor de búsqueda. En su lugar, podemos usar un código de comando C para proporcionar una clave concatenada.
El siguiente ejemplo muestra el uso del código de comando C:
01 LOCATION-SSA.
05 FILLER PIC X(11) VALUE ‘INLOCSEG*C(‘.
05 LIBRARY-SSA PIC X(5).
05 BOOKS-SSA PIC X(4).
05 ENGINEERING-SSA PIC X(6).
05 IT-SSA PIC X(3)
05 FILLER PIC X VALUE ‘)’.
CALL 'CBLTDLI' USING DLI-GU
PCB-NAME
IO-AREA
LOCATION-SSA
Código de comando P
Puntos a tener en cuenta:
Cuando emitimos una llamada GU o GN, el DL / I establece su parentesco en el segmento de nivel más bajo que se recupera.
Si incluimos un código de comando P, entonces el DL / I establece su parentesco en un segmento de nivel superior en la ruta jerárquica.
Código de comando U
Puntos a tener en cuenta:
Cuando se especifica un código de comando U en un SSA no calificado en una llamada GN, el DL / I restringe la búsqueda del segmento.
El código de comando U se ignora si se usa con un SSA calificado.
Código de comando V
Puntos a tener en cuenta:
El código de comando V funciona de manera similar al código de comando U, pero restringe la búsqueda de un segmento en un nivel particular y todos los niveles por encima de la jerarquía.
El código de comando V se ignora cuando se usa con un SSA calificado.
Q Código de comando
Puntos a tener en cuenta:
El código de comando Q se utiliza para poner en cola o reservar un segmento para uso exclusivo de su programa de aplicación.
El código de comando Q se usa en un entorno interactivo donde otro programa podría realizar un cambio en un segmento.
Procesamiento múltiple
Un programa puede tener varias posiciones en la base de datos de IMS, lo que se conoce como procesamiento múltiple. El procesamiento múltiple se puede realizar de dos maneras:
- Múltiples PCB
- Posicionamiento múltiple
Múltiples PCB
Se pueden definir varios PCB para una sola base de datos. Si hay varios PCB, entonces un programa de aplicación puede tener diferentes vistas de él. Este método para implementar el procesamiento múltiple es ineficaz debido a los gastos generales impuestos por los PCB adicionales.
Posicionamiento múltiple
Un programa puede mantener múltiples posiciones en una base de datos usando una sola PCB. Esto se logra manteniendo una posición distinta para cada ruta jerárquica. El posicionamiento múltiple se utiliza para acceder a segmentos de dos o más tipos secuencialmente al mismo tiempo.
Los diferentes métodos de manipulación de datos utilizados en las llamadas IMS DL / I son los siguientes:
- Llamada ISRT
- Obtener llamadas en espera
- REPL Llamada
- Llamada DLET
Consideremos la siguiente estructura de la base de datos IMS para comprender las llamadas a la función de manipulación de datos:
Llamada ISRT
Puntos a tener en cuenta:
La llamada ISRT se conoce como llamada de inserción, que se utiliza para agregar incidencias de segmento a una base de datos.
Las llamadas ISRT se utilizan para cargar una nueva base de datos.
Emitimos una llamada ISRT cuando un campo de descripción de segmento se carga con datos.
Se debe especificar un SSA no calificado o calificado en la llamada para que el DL / I sepa dónde ubicar una ocurrencia de segmento.
Podemos usar una combinación de SSA calificados y no calificados en la llamada. Se puede especificar una SSA calificada para todos los niveles anteriores. Consideremos el siguiente ejemplo:
CALL 'CBLTDLI' USING DLI-ISRT
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
UNQUALIFIED-ENGINEERING-SSA
El ejemplo anterior muestra que estamos emitiendo una llamada ISRT al proporcionar una combinación de SSA calificados y no calificados.
Cuando un segmento nuevo que estamos insertando tiene un campo de clave único, se agrega en la posición adecuada. Si el campo clave no es único, entonces se agrega mediante las reglas definidas por un administrador de base de datos.
Cuando emitimos una llamada ISRT sin especificar un campo clave, la regla de inserción indica dónde colocar los segmentos en relación con los segmentos gemelos existentes. A continuación se muestran las reglas de inserción:
First - Si la regla es la primera, el nuevo segmento se agrega antes que los gemelos existentes.
Last - Si la regla es la última, el nuevo segmento se agrega después de todos los gemelos existentes.
Here - Si la regla está aquí, se agrega en la posición actual relativa a los gemelos existentes, que pueden ser el primero, el último o cualquier lugar.
Códigos de estado
La siguiente tabla muestra los códigos de estado relevantes después de una llamada ISRT:
S. No | Código de estado y descripción |
---|---|
1 | Spaces Llamada exitosa |
2 | GE Se utilizan múltiples SSA y el DL / I no puede satisfacer la llamada con la ruta especificada. |
3 | II Intente agregar una ocurrencia de segmento que ya esté presente en la base de datos. |
4 | LB / LC LD / LE Obtenemos estos códigos de estado durante el procesamiento de carga. En la mayoría de los casos, indican que no está insertando los segmentos en una secuencia jerárquica exacta. |
Obtener llamada en espera
Puntos a tener en cuenta:
Hay tres tipos de llamada Get Hold que especificamos en una llamada DL / I:
Get Hold Unique (GHU)
Get Hold Next (GHN)
Get Hold Next within Parent (GHNP)
La función Hold especifica que vamos a actualizar el segmento después de la recuperación. Por lo tanto, antes de una llamada REPL o DLET, se debe emitir una llamada en espera exitosa que informe al DL / I la intención de actualizar la base de datos.
REPL Llamada
Puntos a tener en cuenta:
Después de una llamada en espera exitosa, emitimos una llamada REPL para actualizar la ocurrencia de un segmento.
No podemos cambiar la longitud de un segmento usando una llamada REPL.
No podemos cambiar el valor de un campo clave mediante una llamada REPL.
No podemos utilizar una SSA calificada con una llamada REPL. Si especificamos un SSA calificado, la llamada falla.
CALL 'CBLTDLI' USING DLI-GHU
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
ENGINEERING-SSA
IT-SSA.
*Move the values which you want to update in IT segment occurrence*
CALL ‘CBLTDLI’ USING DLI-REPL
PCB-NAME
IO-AREA.
El ejemplo anterior actualiza la ocurrencia del segmento de TI mediante una llamada REPL. Primero, emitimos una llamada a GHU para obtener la ocurrencia del segmento que queremos actualizar. Luego, emitimos una llamada REPL para actualizar los valores de ese segmento.
Llamada DLET
Puntos a tener en cuenta:
La llamada DLET funciona de la misma manera que una llamada REPL.
Después de una llamada en espera exitosa, emitimos una llamada DLET para eliminar una ocurrencia de segmento.
No podemos utilizar una SSA calificada con una llamada DLET. Si especificamos un SSA calificado, la llamada falla.
CALL 'CBLTDLI' USING DLI-GHU
PCB-NAME
IO-AREA
LIBRARY-SSA
BOOKS-SSA
ENGINEERING-SSA
IT-SSA.
CALL ‘CBLTDLI’ USING DLI-DLET
PCB-NAME
IO-AREA.
El ejemplo anterior elimina la ocurrencia del segmento de TI usando una llamada DLET. Primero, emitimos una llamada GHU para obtener la ocurrencia del segmento que queremos eliminar. Luego, emitimos una llamada DLET para actualizar los valores de ese segmento.
Códigos de estado
La siguiente tabla muestra los códigos de estado relevantes después de una llamada REPL o DLET:
S. No | Código de estado y descripción |
---|---|
1 | Spaces Llamada exitosa |
2 | AJ SSA calificado usado en llamadas REPL o DLET. |
3 | DJ El programa emite una llamada de reemplazo sin una llamada de espera inmediatamente anterior. |
4 | DA El programa realiza un cambio en el campo clave del segmento antes de emitir la llamada REPL o DLET |
La indexación secundaria se utiliza cuando queremos acceder a una base de datos sin utilizar la clave concatenada completa o cuando no queremos utilizar los campos primarios de la secuencia.
Segmento de puntero de índice
DL / I almacena el puntero a segmentos de la base de datos indexada en una base de datos separada. El segmento de puntero de índice es el único tipo de índice secundario. Consta de dos partes:
- Elemento de prefijo
- Elemento de datos
Elemento de prefijo
La parte del prefijo del segmento de puntero de índice contiene un puntero al segmento de destino del índice. El segmento de destino del índice es el segmento al que se puede acceder mediante el índice secundario.
Elemento de datos
El elemento de datos contiene el valor clave del segmento en la base de datos indexada sobre la que se construye el índice. Esto también se conoce como segmento fuente de índice.
Estos son los puntos clave a tener en cuenta sobre la indexación secundaria:
No es necesario que el segmento de origen del índice y el segmento de origen de destino sean iguales.
Cuando configuramos un índice secundario, DL / I lo mantiene automáticamente.
El DBA define muchos índices secundarios según las múltiples rutas de acceso. Estos índices secundarios se almacenan en una base de datos de índices separada.
No deberíamos crear más índices secundarios, ya que imponen una sobrecarga de procesamiento adicional en el DL / I.
Llaves secundarias
Puntos a tener en cuenta:
El campo en el segmento de origen del índice sobre el que se construye el índice secundario se denomina clave secundaria.
Cualquier campo se puede utilizar como clave secundaria. No es necesario que sea el campo de secuencia de segmentos.
Las claves secundarias pueden ser cualquier combinación de campos individuales dentro del segmento de origen del índice.
Los valores de clave secundaria no tienen que ser únicos.
Estructuras de datos secundarias
Puntos a tener en cuenta:
Cuando construimos un índice secundario, la estructura jerárquica aparente de la base de datos también cambia.
El segmento objetivo del índice se convierte en el segmento raíz aparente. Como se muestra en la siguiente imagen, el segmento de Ingeniería se convierte en el segmento raíz, incluso si no es un segmento raíz.
La reordenación de la estructura de la base de datos causada por el índice secundario se conoce como estructura de datos secundaria.
Las estructuras de datos secundarias no realizan cambios en la estructura de la base de datos física principal presente en el disco. Es solo una forma de alterar la estructura de la base de datos frente al programa de aplicación.
Operador AND independiente
Puntos a tener en cuenta:
Cuando se utiliza un operador AND (* o &) con índices secundarios, se conoce como operador AND dependiente.
Un AND (#) independiente nos permite especificar calificaciones que serían imposibles con un AND dependiente.
Este operador solo se puede utilizar para índices secundarios en los que el segmento de origen del índice depende del segmento de destino del índice.
Podemos codificar un SSA con un AND independiente para especificar que una ocurrencia del segmento de destino se procese en función de los campos en dos o más segmentos de origen dependientes.
01 ITEM-SELECTION-SSA.
05 FILLER PIC X(8).
05 FILLER PIC X(1) VALUE '('.
05 FILLER PIC X(10).
05 SSA-KEY-1 PIC X(8).
05 FILLER PIC X VALUE '#'.
05 FILLER PIC X(10).
05 SSA-KEY-2 PIC X(8).
05 FILLER PIC X VALUE ')'.
Secuenciación dispersa
Puntos a tener en cuenta:
La secuenciación dispersa también se conoce como indexación dispersa. Podemos eliminar algunos de los segmentos de origen del índice del índice utilizando una secuencia escasa con una base de datos de índice secundaria.
La secuenciación dispersa se utiliza para mejorar el rendimiento. Cuando no se utilizan algunas apariciones del segmento fuente del índice, podemos eliminarlo.
DL / I utiliza un valor de supresión o una rutina de supresión o ambos para determinar si un segmento debe indexarse.
Si el valor de un campo de secuencia en el segmento de origen del índice coincide con un valor de supresión, no se establece ninguna relación de índice.
La rutina de supresión es un programa escrito por el usuario que evalúa el segmento y determina si debe indexarse o no.
Cuando se utiliza una indexación dispersa, sus funciones son manejadas por el DL / I. No es necesario que establezcamos disposiciones especiales para ello en el programa de aplicación.
Requisitos DBDGEN
Como se discutió en módulos anteriores, DBDGEN se usa para crear un DBD. Cuando creamos índices secundarios, hay dos bases de datos involucradas. Un DBA necesita crear dos DBD utilizando dos DBDGEN para crear una relación entre una base de datos indexada y una base de datos indexada secundaria.
Requisitos de PSBGEN
Después de crear el índice secundario para una base de datos, el DBA necesita crear los PSB. PSBGEN para el programa especifica la secuencia de procesamiento adecuada para la base de datos en el parámetro PROCSEQ de la macro PSB. Para el parámetro PROCSEQ, el DBA codifica el nombre DBD para la base de datos de índice secundaria.
La base de datos IMS tiene una regla según la cual cada tipo de segmento puede tener solo un padre. Esto limita la complejidad de la base de datos física. Muchas aplicaciones DL / I requieren una estructura compleja que permita que un segmento tenga dos tipos de segmento principal. Para superar esta limitación, DL / I permite al DBA implementar relaciones lógicas en las que un segmento puede tener padres tanto físicos como lógicos. Podemos crear relaciones adicionales dentro de una base de datos física. La nueva estructura de datos después de implementar la relación lógica se conoce como Base de datos lógica.
Relación lógica
Una relación lógica tiene las siguientes propiedades:
Una relación lógica es una ruta entre dos segmentos que están relacionados de manera lógica y no física.
Por lo general, se establece una relación lógica entre bases de datos independientes. Pero es posible tener una relación entre los segmentos de una base de datos en particular.
La siguiente imagen muestra dos bases de datos diferentes. Uno es una base de datos de estudiantes y el otro es una base de datos de biblioteca. Creamos una relación lógica entre el segmento Libros emitidos de la base de datos de estudiantes y el segmento Libros de la base de datos de la biblioteca.
Así es como se ve la base de datos lógica cuando crea una relación lógica:
Segmento hijo lógico
El segmento hijo lógico es la base de una relación lógica. Es un segmento de datos físicos, pero para DL / I, parece que tiene dos padres. El segmento Libros en el ejemplo anterior tiene dos segmentos principales. El segmento de libros emitidos es el padre lógico y el segmento de biblioteca es el padre físico. Una ocurrencia de segmento hijo lógico tiene solo una ocurrencia de segmento padre lógico y una ocurrencia de segmento padre lógico puede tener muchas ocurrencias de segmento hijo lógico.
Gemelos lógicos
Los gemelos lógicos son las ocurrencias de un tipo de segmento hijo lógico que están todas subordinadas a una sola ocurrencia del tipo de segmento padre lógico. DL / I hace que el segmento secundario lógico parezca similar a un segmento secundario físico real. Esto también se conoce como segmento secundario lógico virtual.
Tipos de relaciones lógicas
Un DBA crea relaciones lógicas entre segmentos. Para implementar una relación lógica, el DBA debe especificarlo en los DBDGEN para las bases de datos físicas involucradas. Hay tres tipos de relaciones lógicas:
- Unidirectional
- Virtual bidireccional
- Físico bidireccional
Unidireccional
La conexión lógica va del hijo lógico al padre lógico y no puede ir al revés.
Virtual bidireccional
Permite el acceso en ambas direcciones. El niño lógico en su estructura física y el niño lógico virtual correspondiente pueden verse como segmentos emparejados.
Físico bidireccional
El niño lógico es un subordinado almacenado físicamente tanto de sus padres físicos como lógicos. Para los programas de aplicación, aparece de la misma manera que un niño lógico virtual bidireccional.
Consideraciones de programación
Las consideraciones de programación para usar una base de datos lógica son las siguientes:
Las llamadas DL / I para acceder a la base de datos siguen siendo las mismas que las de la base de datos lógica.
El bloque de especificación del programa indica la estructura que usamos en nuestras llamadas. En algunos casos, no podemos identificar que estamos usando una base de datos lógica.
Las relaciones lógicas agregan una nueva dimensión a la programación de bases de datos.
Debe tener cuidado al trabajar con bases de datos lógicas, ya que dos bases de datos están integradas juntas. Si modifica una base de datos, las mismas modificaciones deben reflejarse en la otra base de datos.
Las especificaciones del programa deben indicar qué procesamiento está permitido en una base de datos. Si se infringe una regla de procesamiento, obtiene un código de estado que no está en blanco.
Segmento concatenado
Un segmento hijo lógico siempre comienza con la clave concatenada completa del padre de destino. Esto se conoce como clave concatenada principal de destino (DPCK). Siempre debe codificar el DPCK al comienzo del área de E / S de su segmento para un hijo lógico. En una base de datos lógica, el segmento concatenado hace la conexión entre los segmentos que están definidos en diferentes bases de datos físicas. Un segmento concatenado consta de las siguientes dos partes:
- Segmento hijo lógico
- Segmento principal de destino
Un segmento hijo lógico consta de las siguientes dos partes:
- Clave concatenada principal de destino (DPCK)
- Datos de usuario de niño lógico
Cuando trabajamos con segmentos concatenados durante la actualización, es posible agregar o cambiar los datos tanto en el hijo lógico como en el padre de destino con una sola llamada. Esto también depende de las reglas que el DBA especificó para la base de datos. Para un inserto, proporcione el DPCK en la posición correcta. Para reemplazar o eliminar, no cambie el DPCK o los datos del campo de secuencia en ninguna parte del segmento concatenado.
El administrador de la base de datos debe planificar la recuperación de la base de datos en caso de fallas del sistema. Las fallas pueden ser de muchos tipos, como fallas de aplicaciones, errores de hardware, fallas de energía, etc.
Enfoque simple
Algunos enfoques simples para la recuperación de bases de datos son los siguientes:
Realice copias de seguridad periódicas de los conjuntos de datos importantes para conservar todas las transacciones registradas en los conjuntos de datos.
Si un conjunto de datos se daña debido a una falla del sistema, ese problema se corrige restaurando la copia de respaldo. Luego, las transacciones acumuladas se vuelven a publicar en la copia de seguridad para actualizarlas.
Desventajas del enfoque simple
Las desventajas del enfoque simple para la recuperación de bases de datos son las siguientes:
Volver a registrar las transacciones acumuladas consume mucho tiempo.
Todas las demás aplicaciones deben esperar la ejecución hasta que finalice la recuperación.
La recuperación de la base de datos es más larga que la recuperación de archivos, si están involucradas relaciones lógicas y de índice secundario.
Rutinas de terminación anormales
Un programa DL / I se bloquea de una manera diferente de la forma en que un programa estándar se bloquea porque el sistema operativo ejecuta directamente un programa estándar, mientras que un programa DL / I no. Al emplear una rutina de terminación anormal, el sistema interfiere para que se pueda realizar la recuperación después del FINAL ANORMAL (ABEND). La rutina de terminación anormal realiza las siguientes acciones:
- Cierra todos los conjuntos de datos
- Cancela todos los trabajos pendientes en la cola
- Crea un volcado de almacenamiento para averiguar la causa raíz de ABEND
La limitación de esta rutina es que no asegura si los datos en uso son precisos o no.
Registro DL / I
Cuando un programa de aplicación ABEND, es necesario revertir los cambios realizados por el programa de aplicación, corregir el error y volver a ejecutar el programa de aplicación. Para hacer esto, se requiere tener el registro DL / I. Estos son los puntos clave sobre el registro DL / I:
Un DL / I registra todos los cambios realizados por un programa de aplicación en un archivo que se conoce como archivo de registro.
Cuando el programa de aplicación cambia un segmento, el DL / I crea su imagen anterior y posterior.
Estas imágenes de segmento se pueden utilizar para restaurar los segmentos, en caso de que el programa de aplicación falle.
DL / I utiliza una técnica llamada registro de escritura anticipada para registrar los cambios en la base de datos. Con el registro de escritura anticipada, un cambio de base de datos se escribe en el conjunto de datos de registro antes de que se escriba en el conjunto de datos real.
Como el registro siempre está por delante de la base de datos, las utilidades de recuperación pueden determinar el estado de cualquier cambio en la base de datos.
Cuando el programa ejecuta una llamada para cambiar un segmento de la base de datos, el DL / I se encarga de su parte de registro.
Recuperación: hacia adelante y hacia atrás
Los dos enfoques de recuperación de bases de datos son:
Forward Recovery - DL / I usa el archivo de registro para almacenar los datos de cambio. Las transacciones acumuladas se vuelven a publicar utilizando este archivo de registro.
Backward Recovery- La recuperación hacia atrás también se conoce como recuperación de retroceso. Los registros de registro del programa se leen hacia atrás y sus efectos se invierten en la base de datos. Cuando se completa la cancelación, las bases de datos están en el mismo estado en el que estaban antes de la falla, asumiendo que ningún otro programa de aplicación alteró la base de datos mientras tanto.
Control
Un punto de control es una etapa en la que los cambios en la base de datos realizados por el programa de aplicación se consideran completos y precisos. A continuación se enumeran los puntos a tener en cuenta sobre un punto de control:
Los cambios en la base de datos realizados antes del punto de control más reciente no se revierten con la recuperación hacia atrás.
Los cambios en la base de datos registrados después del punto de control más reciente no se aplican a una copia de imagen de la base de datos durante la recuperación hacia adelante.
Usando el método de punto de control, la base de datos se restaura a su condición en el punto de control más reciente cuando se completa el proceso de recuperación.
El valor predeterminado para los programas por lotes es que el punto de control es el comienzo del programa.
Se puede establecer un punto de control mediante una llamada de punto de control (CHKP).
Una llamada de punto de control hace que se escriba un registro de punto de control en el registro DL / I.
A continuación se muestra la sintaxis de una llamada CHKP:
CALL 'CBLTDLI' USING DLI-CHKP
PCB-NAME
CHECKPOINT-ID
Hay dos métodos de puntos de control:
Basic Checkpointing - Permite al programador emitir llamadas a puntos de control que utilizan las utilidades de recuperación DL / I durante el proceso de recuperación.
Symbolic Checkpointing- Es una forma avanzada de puntos de control que se utiliza en combinación con la función de reinicio extendido. Los puntos de control simbólicos y el reinicio extendido juntos permiten que el programador de la aplicación codifique los programas para que puedan reanudar el procesamiento en el punto justo después del punto de control.