Introducción a DB2 (Parte 1: Generalidades)

  DB2, o Db2, como se denomina actualmente, es un sistema de gestión de base de datos relacional de IBM que se suele ejecutar en el sistema principal. Está desarrollado para estaciones de trabajo con Linux, Unix y Windows (LUW), como gama media para iSeries, y para ordenadores centrales con z/OS y VM/VSE.
  Como otras de este tipo, la base de datos que gestiona es una base de datos en la que todos los datos se contienen lógicamente en tablas. Estas bases de datos se organizan de acuerdo al modelo relacional. En una base de datos relacional, la integridad de referencia asegura la integridad de los datos mediante la imposición de reglas con restricciones de referencia, restricciones de comprobación y desencadenantes. Puede basarse en las restricciones y los desencadenantes para asegurar la integridad de los datos, en lugar de basarse en aplicaciones individuales que realizan este trabajo.

ESTRUCTURA DE LA BASE DE DATOS

  En z/OS, una base de datos de Db2 utiliza los objetos de base de datos, como tablas, espacios de tabla, índices, espacios de índice, claves, vistas y bases de datos para organizar y acceder a los datos.
 Dichas estructuras, desde las más inclusivas a las menos inclusivas, son:
  •   Base de datos: Conjunto de estructuras de Db2 que incluyen una colección de tablas, sus índices asociados y los espacios de tabla en los que residen.
  •   Grupo de almacenamiento: Conjunto de volúmenes en discos que contienen los conjuntos de datos en los que se almacenan las tablas y los índices.
  •   Espacio de tabla: Unidad lógica de almacenamiento en una base de datos. Un espacio de tabla es un conjunto de páginas. Los tipos de espacio de tabla de partición por crecimiento y partición por rango recomendados siempre contienen datos para una sola tabla. Sin embargo, los tipos de espacio de tabla segmentado (no UTS) y simple, que están en desuso, pueden contener una o más tablas.
  •    Tablas: Todos los datos de una base de datos de Db2 se presentan en tablas, que son colecciones de filas que tienen todas las mismas columnas. Una tabla que contiene datos de usuario permanentes es una tabla base. Una tabla que almacena datos temporalmente es una tabla temporal.
  •   Vista: Forma alternativa para representar datos que existen en una o más tablas. Una vista puede incluir todas o algunas de las columnas de una o más tablas base.
  •    Índice: Conjunto ordenado de punteros a los datos de una tabla de Db2. El índice se almacena separadamente de la tabla. Un índice es un índice simple o un índice ampliado. Un índice ampliado es uno de los siguientes objetos: índice basado en expresiones, índice espacial o índice XML.

USO DE SQL

  Con Db2 para z/OS y las demás herramientas Db2, se pueden definir y manipular los datos utilizando el lenguaje de consulta estructurado (SQL), que es el lenguaje estándar para acceder a datos en bases de datos relacionales.
  De este modo, es posible emitir sentencias SQL interactivamente desde un teclado en un terminal o a través de un emulador de terminal.
  Asimismo, se puede realizar a través de programas de aplicación, que pueden contener sentencias de SQL incluidas estáticamente en la misma. Como alternativa, dichos programas pueden crear sus propias sentencias de SQL dinámicamente.
  La diferencia entre SQL estático y SQL dinámico está determinada por el método de preparación de una sentencia de SQL para ejecutarla y la persistencia de su forma operativa.
 

ESQUEMAS

  Los objetos de una base de datos relacional se organizan en conjuntos denominados esquemas; cada uno de estos constituye una recopilación de objetos con nombre que proporciona una clasificación lógica de los objetos de la base de datos. La primera parte de un nombre de esquema es el calificador.
  Un esquema proporciona una clasificación lógica de objetos de la base de datos. Los objetos que un esquema puede contener incluyen tablas, índices, espacios de tablas, tipos diferenciados, funciones, procedimientos almacenados y desencadenantes. Cuando se crea un objeto, se asigna a un esquema.
  El nombre de esquema del objeto determina el esquema al que pertenece el objeto. Un objeto de usuario, como un tipo diferenciado, función, procedimiento, secuencia o desencadenante no debe crearse en un esquema del sistema, que es cualquiera de un conjunto de esquemas que están reservados para ser utilizados por el subsistema Db2.
  Cuando se crea una tabla, un índice, un espacio de tablas, un tipo diferenciado, una función, un procedimiento almacenado o un desencadenante, se le proporciona un nombre calificado en dos partes. La primera parte es el nombre de esquema (o calificador), que se especifica implícita o explícitamente. El esquema por omisión es el número de identificación de autorización del propietario del plan o paquete. La segunda parte es el nombre del objeto.
 

TABLAS

  Las tablas son estructuras lógicas que Db2 mantiene, existiendo diferentes tipos.
  Éstas están formadas por columnas y filas. Las filas de una tabla relacional no tienen un orden fijo. Sin embargo, el orden de las columnas siempre es el orden en que se han especificado al definir la tabla.
  En la intersección de cada columna con una fila hay un elemento de datos que se denomina valor. Una columna es un conjunto de valores del mismo tipo. Una fila es una secuencia de valores en la que el valor “n” es el valor de la columna “n” de la tabla. Cada tabla debe tener una o más columnas, pero el número de filas puede ser cero.
 Db2 accede a los datos haciendo referencia a su contenido en lugar de a su ubicación u organización en el almacenamiento. Además, da soporte a los siguientes tipos de tablas: 

  •    Tabla solo de acelerador: Almacena filas solo en el acelerador, no en Db2. La definición de tabla y columna de la tabla de solo acelerador está contenida en las tablas de catálogo de Db2. Cualquier consulta que haga referencia a la tabla solo de acelerador, se debe ejecutar en el acelerador. Si una consulta que hace referencia a una tabla solo de acelerador no se puede seleccionar para acelerar las consultas, se emite un error. Para cambiar el contenido de una tabla solo de acelerador, la sentencia de cambio de datos se debe ejecutar en el acelerador.
  •   Tabla de archivado: Almacena las filas que se han suprimido de otra tabla. 
  •   Tabla habilitada para archivado: Contiene una tabla de archivado asociada. Cuando se suprimen filas de una tabla habilitada para archivado, Db2 puede insertar automáticamente esas filas en una tabla de archivado.
  •   Tabla auxiliar: Creada con la sentencia de SQL CREATE AUXILIARY TABLE, se emplea para contener los datos para una columna definida en una tabla base.
  •   Tabla base: Tipo de tabla más común en Db2. Para crear una tabla base se usa la sentencia de SQL CREATE TABLE. La tabla de catálogo de Db2, SYSIBM.SYSTABLES, almacena la descripción de la tabla base. La descripción de la tabla y los datos de la tabla son persistentes. Todos los programas y usuarios que hacen referencia a este tipo de tabla, hacen referencia a la misma descripción de la tabla y a la misma instancia de la tabla.
  •   Tabla de réplica: Estructuralmente idéntica a una tabla base, se crea mediante una sentencia ALTER TABLE para la tabla base que incluya una cláusula ADD CLONE. La tabla de réplica se crea en una instancia diferente del mismo espacio de tablas que la tabla base, es estructuralmente idéntica a la tabla base en todos los aspectos y tiene los mismos índices, desencadenantes BEFORE y objetos LOB. En el catálogo de Db2, la tabla SYSTABLESPACE indica que el espacio de tabla solo tiene una tabla, pero SYSTABLESPACE.CLONE indica que existe una tabla de clonación. Las tablas de clonación solo se pueden crear en un espacio de tablas de partición por rango o de partición por crecimiento gestionado por Db2. La tabla base y la tabla de réplica tienen conjuntos de datos VSAM subyacentes distintos (identificados por sus números de instancia de conjunto de datos) que contienen filas de datos independientes.
  •   Tabla vacía: Tabla con cero filas.
  •   Tabla histórica: Se utiliza para almacenar versiones históricas de filas de la tabla temporal de periodo del sistema asociada.
  •   Tabla de consulta materializada: Definida con la sentencia de SQL CREATE TABLE, contiene datos materializados que proceden de una o más tablas fuente. Las tablas de consulta materializada son útiles para consultas complejas que se ejecutan sobre grandes cantidades de datos. Db2 puede realizar un cálculo previo de la totalidad o de parte de dichas consultas y utilizar los resultados calculados o materializados para responder a las consultas de forma más eficaz. Las tablas de consultas materializadas se utilizan con frecuencia en aplicaciones de depósito de datos e inteligencia empresarial. Varias tablas de catálogo de Db2, incluidas SYSIBM.SYSTABLES y SYSIBM.SYSVIEWS, almacenan la descripción de la tabla de consulta materializada e información sobre su dependencia en una tabla, vista o función. Los atributos que definen una tabla de consulta materializada indican a Db2 si la tabla está mantenida por el sistema o mantenida por el usuario, es renovable (todas las tablas materializadas se pueden actualizar con la sentencia REFRESH TABLE. Sólo las tablas de consultas materializadas mantenidas por el usuario también se pueden actualizar con el programa de utilidad LOAD y las sentencias de SQL UPDATE, INSERT y DELETE), o está habilitada para optimización de consultas (se puede habilitar o inhabilitar la utilización de una tabla de consultas materializadas en la reescritura automática de consultas. Las tablas de consultas materializadas pueden utilizarse para mejorar el rendimiento de las consultas de SQL dinámicas. Si Db2 determina que una parte de una consulta se puede resolver utilizando una tabla de consulta materializada, la consulta puede ser reescrita por Db2 para que utilice la tabla de consulta materializada. Esta decisión se basa en los valores de CURRENT REFRESH AGE y en los registros especiales CURRENT MAINTAINED TABLE TYPES FOR OPTIMIZATION.
  •   Tabla de resultados: Contiene un conjunto de filas que Db2 selecciona o genera, directa o indirectamente, desde una o más tablas base en respuesta a una sentencia de SQL. A diferencia de una tabla base o una tabla temporal, una tabla de resultados no es un objeto que se define utilizando una sentencia CREATE.
  •   Tabla de ejemplo: Una de varias tablas enviadas con el programa bajo licencia Db2 que contiene datos de ejemplo. Muchos ejemplos de esta información están basados en las tablas de ejemplo.
  •   Tabla temporal: Registra el periodo de tiempo en el que una fila es válida. Db2 da soporte a dos tipos de periodos, que son el periodo del sistema (SYSTEM_TIME) y el periodo de aplicación (BUSINESS_TIME). El periodo del sistema consta de un par de columnas con valores mantenidos por el sistema que indican el periodo de tiempo de validez de una fila; una tabla de este periodo es una tabla que se define con creación de versiones de datos de periodo del sistema; es posible modificar una tabla existente para convertirla en una tabla temporal de periodo del sistema especificando la cláusula ADD PERIOD SYSTEM_TIME en la sentencia ALTER TABLE; tras crear una tabla histórica correspondiente a la tabla temporal de período del sistema, se puede definir la creación de versiones de datos de período del sistema en la tabla emitiendo la sentencia ALTER TABLE ADD VERSIONING con la cláusula de tabla USE HISTORY TABLE. El periodo de aplicación consta de un par de columnas con valores mantenidos por la aplicación que indican el periodo de tiempo de validez de una fila; una tabla de este periodo es una tabla base que incluye un período de aplicación (BUSINESS_TIME); se puede modificar una tabla existente para convertirla en una tabla temporal de periodo de aplicación especificando la cláusula ADD PERIOD BUSINESS_TIME en la sentencia ALTER TABLE. También existe la tabla bitemporal, que es una tabla que es tanto una tabla temporal de periodo del sistema como una tabla temporal de periodo de aplicación. Puede utilizar una tabla bitemporal para mantener la información de periodo de aplicación y la información histórica basada en el sistema, por lo que tiene mucha flexibilidad en la forma en que consulta los datos, en función de los periodos de tiempo. por otra parte, existe otro tipo de tabla temporal, la que se define con la sentencia de SQL CREATE GLOBAL TEMPORARY TABLE o DECLARE GLOBAL TEMPORARY TABLE para contener datos temporalmente; este tipo de tablas temporales son especialmente útiles cuando se necesita clasificar o consultar tablas de resultados intermedios que contienen muchas filas, pero únicamente se desea almacenar permanentemente un pequeño subconjunto de estas filas. Si se define con la sentencia de SQL CREATE GLOBAL TEMPORARY TABLE, la tabla de catálogo de Db2, SYSIBM.SYSTABLES, almacena la descripción de la tabla temporal creada, y se llama tabla temporal global creada. La descripción de la tabla es persistente y compartible; no obstante, cada proceso de aplicaciones individual que hace referencia a una tabla temporal creada tiene una instancia diferente de la tabla; por lo que, aunque cada proceso de aplicaciones utiliza la misma descripción de tabla, ningún proceso de aplicaciones tiene acceso a las filas, ni conocimiento de ellas, en la otra instancia de aplicación de la misma. Si se define con la sentencia de SQL DECLARE GLOBAL TEMPORARY TABLE, se denomina tabla temporal global declarada; el catálogo de Db2 no almacena una descripción de la tabla temporal declarada, por lo que la descripción y la instancia de la tabla no son persistentes; varios procesos de aplicaciones pueden hacer referencia a la misma tabla temporal declarada por nombre, pero en realidad no comparten la misma descripción o instancia de la tabla.
  •   Tabla de XML: Tabla especial que únicamente contiene datos XML. Al crear una tabla con una columna XML, Db2 crea implícitamente un espacio de tablas XML y una tabla XML para almacenar los datos XML.
 Con las tablas también se deben tener en cuenta los siguientes conceptos:
  •    Claves de Db2: Se trata de una columna, o una colección ordenada de columnas, que se identifica en la descripción de una tabla, un índice o una restricción de referencia. Las claves son decisivas para la estructura de tablas en una base de datos relacional.
  •   Restricciones: Conjunto de reglas que Db2 impone para valores de columna para evitar valores duplicados o para establecer restricciones en los datos que se añaden a una tabla.
  •    Columnas de tabla Db2: Una definición de columna tiene dos componentes básicos, el nombre de columna y el tipo de datos.
 

 VISTAS

  Una vista es una forma alternativa para representar datos que existen en una o más tablas. Una vista puede incluir todas o algunas de las columnas de una o más tablas base. Una vista es una especificación con nombre de una tabla de resultados.
  Es posible crear una vista que combine datos de varias tablas base, esté basada en otras vistas o en una combinación de vistas y tablas, y omita determinados datos, protegiendo de este modo algunos datos de la tabla de los usuarios.
  De hecho, son razones subyacentes comunes para utilizar una vista. La combinación de información de tablas base y vistas simplifica la recuperación de datos para un usuario y la limitación de los datos que un usuario puede ver es útil para la seguridad. Se puede utilizar vistas para muchos propósitos diferentes, ya que una vista puede:
  •   Controlar el acceso a una tabla.
  •   Facilitar la utilización de datos.
  •   Simplificar la autorización al otorgar acceso a una vista sin otorgar acceso a la tabla.
  •    Mostrar únicamente parte de los datos de la tabla.
  •    Mostrar datos de resumen para una tabla determinada.
  •    Combinar dos o más tablas de formas significativas.
  •    Mostrar sólo las filas seleccionadas que corresponden al proceso que utiliza la vista.
  Para definir una vista, se emplea la sentencia CREATE VIEW y se asigna un nombre (con un máximo de 128 caracteres de longitud) a la vista. La especificación de la vista en otras sentencias de SQL es como ejecutar una sentencia SELECT de SQL. En cualquier momento, la vista está formada por las filas que resultan de la sentencia SELECT que contiene. Puede pensar en una vista formada por columnas y filas al igual que la tabla base en la que está definida la vista.
  También es posible especificar una especificación de período para una vista, sujeta a algunas restricciones.
  En general, una vista hereda los atributos del objeto del cual deriva. Las columnas que se añaden a las tablas después de definir la vista en dichas tablas no aparecen en la vista. Sin embargo, no se puede crear un índice para una vista. Además, no se puede crear ninguna forma de clave o restricción (de referencia o de otro tipo) en una vista. Dichos índices, claves o restricciones deben crearse en las tablas a las que hace referencia la vista.
  Para recuperar información o acceder a información de una vista, se debe utilizar vistas del mismo modo que se utilizan las tablas base.
  Que una vista pueda utilizarse o no en una operación de inserción, actualización o supresión dependerá de su definición.
 

 ÍNDICES

  Los índices proporcionan un acceso eficaz a los datos de tabla, pero pueden necesitar de proceso adicional cuando se modifican los datos de la misma.
  Es posible crear índices para aplicar la exclusividad, y utilizar índices debido a los requisitos de acceso.
  El empleo de índices implica un intercambio. Un mayor número de índices puede mejorar simultáneamente el rendimiento de una transacción determinada y necesitar proceso adicional para insertar, actualizar y suprimir claves de índice.
  Después de crear un índice, Db2 mantiene el índice, pero el usuario puede realizar el mantenimiento necesario, como reorganizarlo o recuperarlo, según sea necesario.
  En Db2 para z/OS, existen varios tipos de índices, que no necesariamente se excluyen entre sí.
 
   Los tipos de índices que se pueden crear en cualquier tabla son:
  •    Índice exclusivo: Un índice que se asegura de que el valor de una columna o conjunto de columnas concreto sea exclusivo.
  •    Índice primario: Un índice exclusivo en la clave primaria de la tabla, que es la columna o conjunto de columnas que identifica de forma exclusiva una fila de una tabla; una clave primaria se define cuando se crea o se altera una tabla. Se especifica PRIMARY KEY en la sentencia CREATE TABLE o en la sentencia ALTER TABLE; las claves primarias son opcionales. Si se define una clave primaria en una tabla, se debe definir un índice primario en dicha clave, de lo contrario, si la tabla no tiene una clave primaria, no puede ser un índice primario. Cada tabla sólo puede tener un índice primario; no obstante, la tabla puede tener índices exclusivos adicionales.
  •   Índice secundario: Un índice que no es un índice primario.
  •   Índice de agrupación en clúster: Un índice que garantiza una agrupación lógica; cuando se insertan datos en la tabla, el índice de agrupación en clúster intenta mantener la secuencia de clúster en la partición. Cada tabla sólo puede tener un índice de agrupación en clúster.
  •    Índice basado en expresiones: Un índice que está basado en una expresión general. Se emplea este tipo de índices cuando se necesite una evaluación eficaz de consultas que impliquen una expresión de columna.
  Tipos de índices que puede crear en las tablas particionadas (se aplican a espacios de tablas de partición por rango, no a espacios de tablas de partición por crecimiento):
  •   Índice particionado: Índice que se particiona físicamente. Este tipo de índice consta de varios conjuntos de datos, el cual corresponde a una partición de tabla.
  •   Índice de particionamiento (PI): Corresponde a las columnas que particionan la tabla, denominadas "clave de particionamiento", que se especifican en la cláusula PARTITION BY de la sentencia CREATE TABLE. Todos los índices de particionamiento también deben estar particionados. Los índices de particionamiento no son necesarios.
  •   Índice secundario: En este contexto, un índice secundario también puede significar un índice que no es un índice de particionamiento. En función del contexto, un índice secundario puede significar estas dos cosas: Índice que no es un índice de particionamiento, o un índice que no es un índice primario.
  •   Índice secundario particionado de datos (DPSI):    Un índice particionado que no es un índice de particionamiento. Estos índices también se denominan índices secundarios particionados (PSI).
  •   Índice secundario no particionado (NPSI): Índice que no es un índice particionado o de particionamiento; también se denominan "índices no particionados" (NPI).
  •   Índice de varias partes: Un índice no particionado que tiene varios conjuntos de datos; dichos conjuntos no corresponden a las particiones de datos. Se usa un índice de varias partes para distribuir un índice de gran tamaño entre varios conjuntos de datos y, de este modo, reducir la contienda de E/S física en el índice.
  El tipo de índice XML utiliza una expresión de patrón XML concreta para indexar las vías de acceso de índice y los valores en los documentos XML que están almacenados en una única columna XML.
  Por otra parte, cuando crea cualquiera de estos tipos de índices, puede definir si tienen las siguientes características:
  •   Rellenado: Se rellena cualquier columna de serie de longitud variable que contenga el índice con el carácter de relleno predeterminado hasta su longitud máxima.
  •   Comprimido: Se comprimen los datos para reducir el tamaño del índice en el disco.
  Espero que la presente entrada haya sido interesante para el lector. Si es así, aguardo que éste la comente y/o la comparta, por favor.

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.