# IMS (IBM)

IBM Information Management System (IMS) es un gestor de bases de datos jerárquicas y un gestor transaccional con alta capacidad de proceso.
IBM diseñó el IMS con Rockwell y Caterpillar en 1966 debido al Programa Apolo. El desafío de IBM era inventariar la extensísima lista de materiales del cohete lunar Saturno V y de la nave Apolo.
El primer mensaje "IMS READY" apareció en un terminal IBM 2740 en Downey, California un 14 de agosto de 1968. IMS todavía se usa extensamente 40 años después y, con el tiempo, ha visto interesantes desarrollos como el sistema IBM Sistema/360, hoy convertido en z/OS y Sistema z9. Por ejemplo, IMS soporta aplicaciones desarrolladas en Java, JDBC, XML y Servicios Web.

## IMS DB

Las funcionalidades de IMS relacionadas con bases de datos reciben el nombre de IMS DB (IMS DataBases). Hay tres tipos de bases de datos jerárquicas:
* Bases de datos Full function
** Descendientes directas de las bases de datos Data Language/I desarrolladas para el Apolo, pueden tener índices primarios y secundarios accedidos usando llamadas DL/I desde la aplicación, algo similar a llamadas SQL a Oracle o DB2 (de hecho, SQL debe su herencia a DL/I).
** Este tipo de bases de datos tiene una gran variedad de métodos de acceso, aunque los dominantes son: Hierarchical Direct (HDAM) ("Acceso directo jerárquico") y Hierarchical Indexed Direct (HIDAM) ("Acceso directo jerárquico indexado""). Los otros métodos son Simple Hierarchical Indexed Sequential (SHISAM) ("Acceso simple jerárquico indexado secuencial"), Hierarchical Sequential (HSAM) ("Acceso jerárquico secuencial") y Hierarchical Indexed Sequential (HISAM) ("Acceso jerárquico indexado secuencial").
** Los datos se almacenan usando VSAM, un tipo de acceso nativo de z/OS, u Overflow Sequential (OSAM) ("Acceso de desbordamiento secuencial"), un tipo de acceso propio de IMS que optimiza la Entrada/Salida de algunos patrones.
* Bases de datos Fast Path
** Las bases de datos Fast Path pueden ser bien Data Entry Databases (DEDB) o Main Storage Databases (MSDB). Ambos tipos carecen de indexación, pero a cambio están optimizados para ofrecer elevados índices de acceso.
** Las MSDB están destinadas a desaparecer debido a sus fuertes restricciones. No permiten altas ni bajas y las referencias directas se resuelven mediante búsquedas binarias.
** Las DEDB pueden llegar a ser tan complejas como las de DL/I mientras mantienen su rendimiento, por lo que están sustituyendo a MSDB.
** Actualmente se puede aprovechar la riqueza estructural de las DEDB y la mejora de rendimiento de las MSDB gracias a la opción de poner el memoria virtual áreas de una DEDB. Esta funcionalidad permite también, compartir una misma base de datos entre distintos sistemas usando poniendo las áreas en la coupling facility.
* Bases de datos High Availability Large Databases (HALDB)
** IMS V7 introdujo HALDBs, como una extensión de la base de datos Full Function para proveer una mejor disponibilidad de la misma, mejor manejo de grandes volúmenes de datos, y, con IMS V9, reorganización en línea para soportar alta disponibilidad.

## IMS TM

Las funcionalidades de IMS relacionadas con la gestión transaccional reciben el nombre de IMS TM (IMS Transaction Manager), anteriormente conocido como IMS DC (IMS DataControl)

## Registro

Tanto para un gestor transaccional como para un gestor de bases de datos es imprescindible registrar cada paso en un fichero de registro, de manera que todas las acciones se puedan deshacer. IMS usa un extenso sistema de registro capaz de soportar grandes cantidades de información sin repercutir en el tiempo de respuesta.

### Buffers IMS

IMS usa buffers para escribir cualquier información que necesite ser registrada. Cuando un buffer se llena, IMS ordena escribir todo el buffer al fichero de OLDS. El tamaño viene dado por el tamaño del fichero de OLDS.

### OLDS

El OLDS (fichero de registro en línea, del inglés Online Log Data Set) es un fichero de registro usados en IMS para almacenar información que, por razones de recuperabilidad, debe escribirse en disco. Para mejorar el rendimiento, sólo se copian bloques de información completos. Si se debe copiar algún buffer incompleto, este se copia al WADS. Los OLDS se usan en forma de cadena, de modo que cuando un fichero de OLDS se llena, este se archiva y se pasa a usar otro. Para prevenir fallos provocados por errores físicos de escritura en disco, es posible mantener una copia dual de OLDS, de manera que la información se escribe en dos ficheros, uno principal y otro como copia de seguridad.

### WADS

El WADS (fichero de escritura avanzada, del inglés Write-ahead Data Set) es un fichero de registro usado en IMS para almacenar buffers de información incompletos antes de escribirse definitivamente en el OLDS. Los WADS tienen un alto rendimiento debido a su pequeño tamaño y a su estructura interna. Cuando el sistema o el IMS sufre una fallida, la información del WADS sirve para cerrar el OLDS como parte de un arranque de emergencia. Para prevenir fallos provocados por errores físicos de escritura en disco, es posible mantener una copia dual de WADS, de manera que la información se escribe en dos ficheros, uno principal y otro como copia de seguridad.

### SLDS

El SLDS (fichero de registro secundario, del inglés Secondary Log Data Set) es un fichero de registro usado en IMS para almacenar información consolidada y que ya ha sido archivada. Es normal que el SLDS, a diferencia del OLDS, se almacene en cinta en vez de disco, debido a su tamaño y a su escaso uso, únicamente en escenarios de recuperación de bases de datos.

### RLDS

El RLDS (fichero de registro de recuperación, del inglés Recovery Log Data Set) es un fichero de registro opcional usando en IMS para almacenar información consolidada y archivada relacionada con la recuperación de bases de datos. Al contener sólo registros relacionados con la recuperación de bases de datos, el volumen de información es mucho menor que en el caso del SLDS, lo cual hace más rápido el proceso de recuperación de bases de datos.

### Archivado

Cuando un OLDS se llena, IMS ejecuta un proceso de archivado. Este proceso se compone de los siguientes pasos:
* El OLDS activo (o la pareja, en caso de que se esté usando copia dual) se cierra y se marca como "pendiente de archivar".
* Se empieza a grabar en el siguiente OLDS disponible (o en la siguiente pareja de OLDS, en caso de que se esté usando copia dual).
* Se copia la información del OLDS pendiente de archivar en un fichero SLDS. Opcionalmente, se puede crear un RLDS.
* El OLDS que estaba pendiente de archivar se marca como "disponible" para escribir en él.