Documentos de Académico
Documentos de Profesional
Documentos de Cultura
sistemas
gestores de
bases de datos
Consulte nuestra página web: www.sintesis.com
En ella encontrará el catálogo completo y comentado
A ddeministración
sistemas
gestores de
bases de datos
Alex Dapena
Asesor editorial:
Juan Carlos Moreno Pérez
© Alex Dapena
© EDITORIAL SÍNTESIS, S. A.
Vallehermoso, 34. 28015 Madrid
Teléfono 91 593 20 98
http://www.sintesis.com
ISBN: 978-84-1357-068-6
ISBN: 978-84-135760-1-5
Depósito Legal: M-2.435-2021
Índice
6 Administración de sistemas gestores de bases de datos
Índice
Administración de sistemas gestores de bases de datos 7
Índice
8 Administración de sistemas gestores de bases de datos
Índice
Administración de sistemas gestores de bases de datos 9
PRÁCTICAS GUIADAS
RECURSOS DIGITALES
Índice
10 Administración de sistemas gestores de bases de datos
ACTIVIDADES PROPUESTAS
Índice
Presentación
Vivimos en una era digital en la que existe la amplia creencia de que todo está en internet. Es
cierto que los sistemas gestores de bases de datos comerciales disponen de documentación, foros
y tutoriales acerca de cómo llevar a cabo cualquier operación empleando las herramientas del
sistema gestor, pero esta información se centra en “cómo hacer”, y no se explica “qué hay que
hacer” o “por qué” hay que hacerlo. El objetivo de este libro es dar respuesta simultáneamente
a esas tres preguntas y aportar los trasfondos y matices que no se encuentran en internet.
El planteamiento de la obra está orientado a la impartición del módulo Administración de
Sistemas Gestores de Bases de Datos del ciclo superior de formación profesional Administra-
ción de Sistemas Informáticos en Red. Además, se han adaptado, actualizado y completado los
contenidos que establece el currículo formativo de dicho módulo para reflejar de forma fiel la
realidad del sector y dar cabida a las nuevas tecnologías empleadas en los sistemas de informa-
ción, dando lugar a un libro muy versátil que puede ser empleado tanto en el ámbito académico
(ciclos de formación profesional o a nivel universitario) como profesional, pues en sus páginas
se reflejan más de diez años de experiencia en el análisis, desarrollo y mantenimiento de siste-
mas de información.
Sus contenidos están secuenciados y organizados de forma lógica siguiendo el hilo conduc-
tor que constituyen las funciones que debe llevar a cabo un administrador de bases de datos a
lo largo del ciclo de vida de un sistema de información:
● La elección del sistema gestor que mejor permita cubrir sus necesidades (sabiendo qué
opciones existen y qué nos aporta cada una de ellas) y su instalación.
● La configuración inicial del sistema, teniendo en cuenta todos los factores que influirán
en su correcto funcionamiento.
● El establecimiento de medidas de seguridad que permitan garantizar la confidenciali-
dad y la integridad de los datos almacenados.
● La monitorización y optimización del sistema.
Presentación
12 Administración de sistemas gestores de bases de datos
A lo largo de los capítulos del libro se van tratando estas funciones, planteando de manera
genérica su fundamento teórico (qué tareas hay que realizar y por qué) desde una perspectiva
general aplicable a cualquier sistema gestor de base de datos, y contextualizando los conceptos
planteados en las prácticas guiadas (disponibles en los recursos digitales que complementan
al libro) que en forma de actividades, guías o tutoriales, darán respuesta al “cómo hacer”, y faci-
litarán la comprensión de los contenidos planteados aplicándolos a un SGBD concreto: Oracle.
La secuenciación lógica de contenidos, junto con las prácticas guiadas y los ejercicios propuestos,
facilitará que el lector poco versado en este sistema gestor pueda comprender paso a paso su
estructura y funcionamiento, y pueda llevar a cabo sin mayor esfuerzo todo tipo de tareas de
administración por medio del SGBD líder del mercado.
Presentación
1
Objetivos
3 Conocer los aspectos básicos relacionados con los sistemas gestores de ba-
ses de datos.
3 Comprender las funciones básicas que debe llevar a cabo el administrador
de base de datos.
3 Diferenciar las distintas opciones existentes en el mercado para almacenar
información por medio de un sistema gestor y saber escoger el más adecua-
do para cada caso.
3 Realizar la instalación de un sistema gestor de bases de datos relacional.
14 Administración de sistemas gestores de bases de datos
Mapa conceptual
Componentes
Funcionalidades
realiza Funciones
Puesta en marcha
Contextos utilización
Instalación
Seguridad
Explotación
Administración
Glosario
Capítulo 1
Instalación del sistema gestor de bases de datos 15
Diccionario de datos. Repositorio donde se almacenan los metadatos del sistema gestor
de base de datos, es decir, toda la información acerca de su contenido (bases de datos
existentes, tablas, columnas, usuarios, permisos, etc.).
Integridad. Mantenimiento de la corrección de los datos de una base de datos. La integri-
dad se garantiza asegurando que los datos se ajusten a las reglas y restricciones defini-
das sobre ellos (de dominio, de nulidad, de integridad referencial, de unicidad, etc.).
Not only SQL (NoSQL). Modelo de base de datos alternativo al modelo relacional basado
en la utilización de estructuras de almacenamiento más flexibles que las tablas del
modelo relacional y el uso de sistemas gestores distribuidos y altamente escalables,
capaces de procesar grandes cantidades de información.
Sistema gestor de bases de datos (SGBD). Conjunto de programas que permiten el al-
macenamiento, modificación y extracción de la información en una base de datos,
además de proporcionar herramientas para explotar, administrar y gestionar las bases
de datos.
Transacción. Conjunto de operaciones que se deben ejecutar de manera atómica (como
una sola): o se ejecutan todas o no se ejecutará ninguna.
1.1. Introducción
El objetivo del módulo de administración de sistemas gestores de bases de datos es adquirir las
capacidades necesarias para llevar a cabo el rol de administrador de una base de datos (DBA). El
DBA es la persona (o personas) responsable de gestionar de forma adecuada el almacenamiento
de la información de una organización y optimizar el acceso a la misma.
Para ello, normalmente, hará uso de un sistema gestor de bases de datos (SGBD): el software
que gestiona todo el sistema de almacenamiento de la información.
El DBA será responsable de todo el ciclo de vida del sistema de información: desde la elec-
ción del sistema de almacenamiento que se usará para almacenar la información hasta la gestión
del acceso, la explotación, optimización, monitorización y mantenimiento de este.
En este primer capítulo veremos en detalle la diferencia entre DBA y SGBD, las funciones
de cada uno de ellos, y conoceremos las dos primeras funciones que debe llevar a cabo el DBA:
seleccionar e instalar el SGBD.
Capítulo 1
16 Administración de sistemas gestores de bases de datos
c) Explotar el SGBD: la explotación del sistema consiste en utilizar las funciones de las
que provee para dar un servicio adecuado a los usuarios. Esto engloba:
d) Administrar:
Capítulo 1
Instalación del sistema gestor de bases de datos 17
Toma nota
Toda la información referente a los objetos que se crean en un sistema gestor de base de
datos se almacenan en un repositorio denominado diccionario de datos.
Capítulo 1
18 Administración de sistemas gestores de bases de datos
Usuarios
Esquema
conceptual
tabla tabla tabla tabla
Esquema
interno
disco disco disco disco disco
Figura 1.1
Arquitectura ANSI-SPARC de bases de datos.
Capítulo 1
Instalación del sistema gestor de bases de datos 19
En este modelo se definen tres niveles o capas de abstracción para una base de da-
tos, que son independientes entre ellos:
Capítulo 1
20 Administración de sistemas gestores de bases de datos
Cuadro 1.1
Módulos habituales del gestor de la base de datos
Control de Comprueba que el usuario tiene los permisos necesarios para llevar a cabo
autorización la operación que solicita.
Procesador Interpreta los comandos recibidos.
de comandos
Control Cuando una operación cambia los datos de la base de datos, este módulo debe
de la comprobar que la operación que se ha de realizar satisface todas las restricciones
integridad de integridad definidas (unicidad de las claves primarias, referencias de las claves
foráneas, nulidad, etc.).
Optimizador Determina la estrategia óptima para la ejecución de las consultas.
de consultas
Gestor de Encargado de garantizar la atomicidad de las transacciones.
transacciones
Planificador Responsable de asegurar que las operaciones que se realizan concurrentemente
(scheduler) sobre la base de datos se llevan a cabo sin conflictos.
Gestor de Garantiza que la base de datos permanece en un estado consistente en caso
recuperación de que se produzca algún fallo.
Gestor Responsable de transferir los datos entre memoria principal y los dispositivos
de buffers de almacenamiento secundario.
Capítulo 1
Instalación del sistema gestor de bases de datos 21
conectores que contienen una API (una interfaz de programación) que pueden invocar los
clientes que se quieren conectar al SGBD. Los conectores más habituales son ODBC y JDBC.
La norma ODBC es un estándar de acceso a bases de datos cuyo objetivo es proporcionar
independencia entre los sistemas de bases de datos y los programas de aplicación por medio de
un API que se encarga de realizar toda la comunicación. La norma JDBC es también una API
pero en este caso solamente es válida para los programas Java. Además de estos drivers genéricos
para las aplicaciones existen numerosos drivers específicos de cada sistema gestor.
Ten en cuenta
Los sistemas monousuario tienen una arquitectura mucho más sencilla, ya que no requieren pro-
cesar peticiones de varios usuarios, por lo que muchos de estos componentes no son necesarios.
Capítulo 1
22 Administración de sistemas gestores de bases de datos
Cuando trabajamos con sistemas gestores de bases de datos distribuidas (SGBDD), el sis-
tema gestor deberá tener un conocimiento tanto a nivel local del contenido de cada base de
datos, como a nivel global (qué información está en cada nodo). Para ello implementan una
arquitectura cliente/servidor en 3 niveles: las peticiones de los clientes llegarán a un servidor
encargado de determinar dónde se encuentra la información solicitada, y será este quien realice
la petición de información al servidor local.
Esta arquitectura requiere, por tanto, de algunos componentes adicionales:
● Componente de comunicación: es el software que permite que todos los nodos se comuni-
quen entre sí. Contiene información acerca de nodos y enlaces.
● Catálogo global del sistema: responsable de interpretar las peticiones de información y
determinar en qué lugar se ubica cada uno de los datos solicitados.
Esta arquitectura es la utilizada también mayormente por los sistemas NoSQL (con varian-
tes particulares en cada implementación), ya que no dejan de ser sistemas distribuidos. Estos
sistemas presentan particularidades adicionales, ya que son sistemas orientados a maximizar el
rendimiento de las consultas de información sobre la base de datos, para lo que distribuyen tanto
los datos como su procesamiento a través de los nodos de la red, por medio del uso de la técnica
map/reduce (una función map distribuirá la información entre los distintos nodos en base a un
campo clave o un patrón común, y una función reduce unirá los datos de cada clave o patrón en
un resultado común) y la utilización de sistemas de ficheros especialmente diseñados para dis-
tribuir la información a través de la red (el más usado es HDFS: hadoop distributed file system).
● El tipo de SGBD que necesitaremos: en función del número de usuarios, por la locali-
zación de la información y por su estructura.
● La arquitectura del SGBD y la conectividad que necesitaremos (si necesitamos que la
base de datos sea accesible desde internet, una intranet o incluso si bastaría con un solo
equipo de acceso).
● Los recursos disponibles y la política de empresa: el coste del SGBD y la disponibilidad de
recursos de la organización (hardware disponible, costes de licencias que puede asumir la
organización, etc.) puede limitar el margen de maniobra a la hora de seleccionar el SGBD.
Del mismo modo, si la empresa tiene una política de impulso de software libre o acuerdos
con empresas concretas de software puede limitar el número de opciones disponibles.
● El tipo de bases de datos que vayamos a crear en ese SGBD (y por tanto su tamaño): a
medida que se incrementan los volúmenes de información almacenados, crece conside-
rablemente la complejidad del sistema que necesitamos para almacenar esa información.
● Requisitos del sistema: por ejemplo el número de conexiones simultáneas que debe
soportar el sistema gestor suele ser uno de los requisitos claves en la elección, ya que un
gran número de conexiones simultáneas implica sistemas gestores con grandes capaci-
dades de trabajo concurrente y pocos sistemas serían capaces de aceptarlo.
Capítulo 1
Instalación del sistema gestor de bases de datos 23
Investiga cuáles son los sistemas gestores de datos más utilizados y localiza entre
ellos dos sistemas monousuario y dos sistemas multiusuario.
¿Para qué se usan principalmente unos y otros?
Capítulo 1
24 Administración de sistemas gestores de bases de datos
estructura organizacional, tienen autonomía local (cada departamento controla sus pro-
pios datos), tienen mayor disponibilidad (no dependen de un solo nodo), son sistemas
más baratos que los centralizados y son fácilmente escalables.
A mediados de los 60 fueron apareciendo los primeros sistemas de bases de datos de propó-
sito general. En 1971 se definió el estándar de CODASYL (el grupo responsable de la creación
y estandarización de COBOL), y en breve aparecieron algunos productos basados en esta línea.
Este estándar se implementó tanto en sistemas en árbol como en sistemas en red, y evolucionó
incorporando incluso un sistema de consulta, pero todos estos sistemas resultaban muy comple-
jos y requerían de mucho esfuerzo y práctica para producir aplicaciones útiles, además de que la
forma de acceder a la información no era uniforme (no es lo mismo acceder al nodo raíz de un
árbol que a un nodo hoja, por ejemplo), lo que complicaba considerablemente la recuperación
de información.
¿Sabías que...?
2. Sistemas relacionales
A principios de los años setenta surge el modelo relacional, planteado por Edgar Codd. La
principal ventaja de este modelo respecto a los anteriores es la simplicidad, tanto en la repre-
sentación de la información (toda la información se almacena en tablas de registros de tamaño
fijo relacionadas entre ellas) como en su tratamiento (el acceso a las tablas es uniforme: a todas
las tablas se accederá del mismo modo). Este modelo permitía solucionar los dos principales
problemas de los modelos anteriores: la compleja mantenibilidad de las relaciones (ya que
las relaciones se implementarán como nuevas tablas) y la posibilidad de definir restricciones
que aseguren la integridad de los datos (ya no tendrá que hacerlo el programador a mano),
lo que facilitó que los sistemas relacionales tuviesen una gran aceptación en el mercado y reem
plazasen a los navegacionales.
A lo largo de la década de los setenta se crearon varias soluciones basadas en el modelo
propuesto por Codd, pero estos sistemas tenían un problema: no estaban preparados para la
consulta de la información almacenada de forma sencilla (los lenguajes tradicionales no estaban
pensados para recuperar la información en un solo registro). Para solventar este problema Codd
propuso una solución basada en un lenguaje orientado a conjuntos, que más tarde cristalizaría
en el SQL.
Capítulo 1
Instalación del sistema gestor de bases de datos 25
Entre los sistemas gestores más importantes de este tipo destacan Oracle, SQL Server, Ac-
cess, PostgreSQL o MySQL.
4. Sistemas NoSQL
Las bases de datos relacionales tradicionales presentan dos grandes problemas a la hora de
dar respuesta a los nuevos requisitos de almacenamiento de información existentes a día de hoy:
● Poca flexibilidad de representación: todos los elementos representados en una tabla de-
ben tener necesariamente el mismo número de filas y columnas, lo cual puede ser muy
ineficiente para representar información no estructurada.
● Poca escalabilidad: a pesar de que un SGBD relacional se puede implementar por medio
de un clúster al que se le pueden ir añadiendo equipos y discos según las necesidades,
este tiene un límite finito en cuanto a sus posibilidades de crecimiento (SQL Server no
soporta más de 524 272 TB, y Oracle 2047 PB), lo que no serviría para grandes aplica-
ciones de internet (redes sociales, buscadores, etc.), que generan enormes cantidades de
información y requieren respuesta inmediata.
Los sistemas NoSQL surgen fundamentalmente para paliar estas dos carencias: estos sistemas
no requieren por lo general esquemas fijos y están diseñadas para escalar horizontalmente tanto
como sea necesario. Esto lo hacen de la siguiente manera:
a) Distribución de los datos: en lugar de emplear servidores de gran capacidad que puedan mo-
ver un SGBD muy complejo, están compuestos de múltiples nodos entre los que se dis-
tribuye tanto la información como el procesamiento de la misma. Si hay que incrementar
el rendimiento o la capacidad de almacenamiento, bastaría con añadir más nodos a la red.
Capítulo 1
26 Administración de sistemas gestores de bases de datos
Servidor
Figura 1.2
Clientes Arquitectura genérica
de sistemas NoSQL.
b) Manejan datos no estructurados. Los datos con los que trabajan no tienen una estructura
fija, y el concepto de relación es más cercano al existente en orientación a objetos que
al utilizado en el modelo relacional, lo que las hace más adecuadas para almacenar bases
de datos con estructura más bien simple (con escasas relaciones y reglas): tweets de Twi-
tter, estadísticas en tiempo real, streaming de vídeo, conexiones a servidores remotos,
logs de aplicaciones,… datos simples, con distintas estructuras, de los que apenas se usan
unos pocos valores clave, pero que llegan a gran velocidad.
c) Evitan las operaciones join almacenando datos desnormalizados. En estos sistemas prima
la velocidad de respuesta y sobra capacidad de almacenamiento, así que si dos datos se
suelen consultar juntos, pues se guardan juntos (aunque ello suponga incorporar infor-
mación redundante).
d) Su base teórica se basa en el teorema de CAP (consistencia, disponibilidad y tolerancia
a fallos), que viene a decir que el sistema fomentará la disponibilidad aunque ello im-
plique asumir que puntualmente la consistencia de los datos no esté garantizada (puede
suceder que envíes una foto por Whatsapp y luego un texto y que el texto se entregue
antes que la foto: lo importante es que lleguen lo antes posible, y si temporalmente el
orden de visualización es incorrecto, no pasa nada).
e) Estos sistemas están basados en el uso de la técnica “Map reduce”, basada principalmen-
te en la división del trabajo entre los nodos de la red, que funcionan como un sistema
homogéneo (se distribuye tanto la información como el procesamiento de la misma).
Los nodos realizan mucho trabajo en memoria, y poco en disco, por lo que son muy
rápidos, aunque son menos consistentes que los sistemas relacionales.
Ten en cuenta
Su nombre (NoSQL) no significa que no usen SQL, sino “Not Only SQL”, que se traduciría
por “no solo SQL”. De hecho, varios de los principales sistemas NoSQL sí permiten utilizar
SQL como lenguaje de consulta de información, aunque la mayoría suelen usar lenguajes de
consulta propios o derivados de SQL.
Capítulo 1
Instalación del sistema gestor de bases de datos 27
Su principal desventaja es que al no poder establecer relaciones y reglas complejas sobre los
datos, no sirven para almacenar bases de datos complejas o donde se desee realizar tareas como
ordenar los datos en base a distintas claves o realizar búsquedas avanzadas en base a múltiples
criterios. Son sistemas pensados para entornos donde ese tipo de tareas de gestión de informa-
ción no son críticas, como las redes sociales o los sistemas big data en general, donde las cosas
solo se suelen ordenar en base a la fecha y hora.
Las bases de datos NoSQL se usan habitualmente para almacenar datos de aplicaciones que
requieren realizar muchas operaciones de lectura y escritura simultaneas, que generan datos
a gran velocidad, que emplean datos no estructurados o que necesitan representar relaciones
complejas que se establecen entre los datos.
Existen 4 tipos de bases de datos NoSQL:
1. Clave/valor: los datos se almacenan en forma de pares (clave, valor), y se indexan siempre
por el campo clave, de forma que realizar una búsqueda por la clave será muy eficiente.
Normalmente estos pares se almacenan en grupos de pares, por lo que la misma clave
puede estar repetida en distintas agrupaciones.
Ejemplo
– Redis: es una base de datos que trabaja con pares clave/valor almacenados en me-
moria en forma de tablas hash, aunque permite también hacerlos persistentes. Está
liberado bajo una licencia de código abierto BSD.
– Amazon DynamoDB: base de datos con licencia propietaria desarrollada por Ama-
zon. Surgió con el objetivo de gestionar la enorme cantidad de transacciones de
esta empresa y pasó a ser una de las bases de su negocio en la nube.
– Microsoft Azure Cosmos DB: servicio de base de datos NoSQL en la nube de Micro-
soft, especialmente indicado para aplicaciones que realizan multitud de operaciones
de lectura y escritura simultáneas: registro de información de dispositivos de IOT
(internet de las cosas), compra online o análisis de datos en tiempo real.
Capítulo 1
28 Administración de sistemas gestores de bases de datos
– Memcached: empleado por sitios web como YouTube, Twitter, Reddit o Facebook
para almacenar datos en caché u objetos en memoria RAM para reducir los accesos
a orígenes de datos externos.
Ejemplo
Figura 1.3
Ejemplo base de datos
NoSQL columnar.
La clave de la tabla sería el nombre, y cada colaborador puede tener o no usuarios en las
distintas redes sociales.
Si almacenásemos esta tabla en una base de datos columnar, cada una de las columnas se
guardaría como un conjunto de pares (clave, valor), de la siguiente manera:
El valor de cada fila solo se guarda si hay datos, y si consultamos toda la información de un
usuario concreto, la consulta se realizará en paralelo en todas las columnas a través de la clave,
lo cual es muy rápido y por eso son muy adecuadas para manejar información no estructurada.
Las bases de datos columnares más empleadas son:
– Apache Cassandra. Con licencia Apache (de código abierto) es la más popular y de
contrastada potencia ya que es de código abierto. Se desarrolló inicialmente por Fa-
cebook. Los datos se almacenan en tuplas sin relaciones de integridad (una variante
de datos clave-valor, donde hay varios valores por cada clave). Presume, además, de
Capítulo 1
Instalación del sistema gestor de bases de datos 29
Ejemplo
La tabla de colaboradores empleada en el ejemplo anterior, se definiría en una base de datos
documental por medio de una colección de documentos “colaborador”, que tendría la siguien-
te estructura:
{
‘nombre’:’Pedro’,
‘twitter’:’p.sanchez’,
‘facebook’:’p.sanchez’
},
{
‘nombre’:’Natalia’,
‘twitter’:’nati04’,
‘google:’natalia.blanco’
},
{
‘nombre’:’Rodrigo’,
‘twitter’:’rodrg.rg’
}
– MongoDB. La más popular de las bases de datos NoSQL. Está publicada bajo una
licencia GNU, aunque dispone también de versiones comerciales. Emplea docu-
mentos en formato BSON (son documentos JSON pero almacenados en binario).
Capítulo 1
30 Administración de sistemas gestores de bases de datos
Comentario
publica like
conoce pertenece
Figura 1.4
Rodrigo pertenece Grupo Ejemplo base de datos
NoSQL de grafos.
La base de datos de grafos más empleada es Neo4j, que es un sistema de base de datos
de software libre empleado especialmente para representar redes (de computadoras, de
usuarios, etc.), recomendaciones de películas, etc. La base de datos NoSQL de Microsoft
(Azure Cosmos DB) también permite representar la información por medio de grafos.
Capítulo 1
Instalación del sistema gestor de bases de datos 31
Figura 1.5
Arquitectura
monocapa. Usuario Cliente Base de datos
Capítulo 1
32 Administración de sistemas gestores de bases de datos
Capítulo 1
Instalación del sistema gestor de bases de datos 33
● Oracle: fue uno de los primeros sistemas gestores de bases de datos relacionales, y lleva
siendo durante muchos años el líder en el mercado (posición consolidada tras la com-
pra de Sun en 2009, propietaria de Java pero también del SGBD MySQL, que era hasta
entonces el gran rival de Oracle). Muchas de las funciones que se han ido añadiendo a
los distintos estándares de SQL fueron desarrolladas inicialmente por Oracle (procedi-
mientos almacenados, objetos, etc.). Es el sistema relacional más potente (permite varios
PB de almacenamiento), más robusto y también el más caro. A pesar de ser relacional,
dispone también de soporte a otros tipos de paradigmas, como el orientado a objetos
(permite crear y almacenar objetos) o NoSQL (permite almacenar documentos pero
también estructuras de grafos y espaciales).
● Microsoft SQL Server: es el sistema de base de datos relacional de Microsoft, disponible
únicamente para sistemas Windows, aunque su gran apuesta es derivar estos servicios a
la nube, para lo cual han desarrollado Microsoft Azure SQL Database, que es la versión
en la nube del SQL Server. En consonancia con otros productos de Microsoft, ofrece
un interfaz gráfico muy potente que permite llevar a cabo gran parte de las tareas de
administración del sistema por medio de asistentes o interfaces muy intuitivos.
● Db2: es un SGBD relacional propiedad de IBM que integra de manera nativa el manejo
de documentos XML, que se pueden cargar en la base de datos, navegar a través de ellos
e incluso integrarlo con búsquedas relacionales. Las últimas versiones incorporan compa-
tibilidad con Oracle e incluso permiten utilizar procedimientos PL/SQL (el lenguaje de
programación de Oracle). Dispone de una versión gratuita (Db2-Express-C) con algunas
limitaciones de funcionalidades avanzadas de las que sí dispone la versión comercial.
● Microsoft Access: la base de datos ofimática de Microsoft es la más utilizada entre este
tipo de bases de datos debido a que es uno de los componentes básicos del paquete
Microsoft Office y permite a usuarios con pocos conocimientos de bases de datos la
posibilidad de crear bases de datos y explotar su información por medio del uso de
asistentes que facilitan la creación de formularios, consultas e informes.
¿Sabías que...?
Oracle es el SGBD más completo y caro del mercado, pero ofrece la posibilidad de utilizar de forma
gratuita una versión de su sistema gestor limitado para trabajar solamente en un host local pero con
todas las funcionalidades.
Por el contrario, la versión community de MySQL, que tradicionalmente se identifica como el
SGBD gratuito por excelencia, tiene muchas limitaciones en cuanto a la funcionalidad que ofrece
de manera gratuita, por lo que a la hora de elegir un sistema gestor para llevar a cabo las tareas pro-
puestas en este libro, Oracle ofrece una solución gratuita más completa que la de MySQL.
Capítulo 1
34 Administración de sistemas gestores de bases de datos
Cuadro 1.2
Licencias más habituales
Licencia GPL El desarrollador conserva los derechos de autor del software desarrollado
(GNU General pero permite su libre distribución, modificación y uso, si bien cualquier
Public License) modificación del mismo debe publicarse obligatoriamente bajo la misma
licencia y ser también de libre distribución.
Licencia BSD Es la más permisiva con respecto a lo que el usuario puede hacer
(Berkeley Software con el software, ya que permite que cualquier modificación realizada
Distribution) pueda ser distribuida bajo cualquier otro tipo de licencia, incluso
licencias propietarias.
Licencia Apache También permite la redistribución del software bajo cualquier tipo
de licencia, pero requiere la conservación del aviso de derecho de autor
y el descargo de responsabilidad.
Entre los sistemas gestores de bases de datos de código abierto, podemos citar:
Capítulo 1
Instalación del sistema gestor de bases de datos 35
la máquina host. Este diseño simple se logra bloqueando todo el fichero de base de
datos al principio de cada transacción.
– A pesar de su sencillez, permite bases de datos de hasta 2 TB, la inclusión de cam-
pos tipo BLOB, compresión, cifrado y asegura las propiedades ACID, y es el SGBD
relacional que más está creciendo en los últimos años, debido a que su modo de
funcionamiento lo hace muy adecuado para su utilización por parte de aplicacio-
nes que se ejecuten en dispositivos móviles: este tipo de aplicaciones normalmente
utilizan una base de datos local a la que solamente accede la aplicación y por tanto
no requieren ni múltiples usuarios ni complejas arquitecturas cliente servidor: toda
la información se almacena en un fichero al que se accede de forma muy rápida y
eficiente por medio de consultas SQL.
La gran mayoría de los SGBD NoSQL más empleados se distribuyen bajo licencias de
código abierto: Apache (muchas de estas soluciones fueron desarrolladas por la Fun-
dación Apache o están basadas en productos de esta, como Cassandra, Elasticsearch
o Hive), BSD (Redis, un sistema NoSQL de tipo clave/valor) o GPL (como el caso de
MongoDB).
Otra de las cuestiones relevantes a tener en cuenta a la hora de escoger el SGBD más adecuado
es el tipo de base de datos que vamos a necesitar en función de la utilización que vamos a hacer
de ella (es decir, del tipo de transacciones que ejecutaremos).
Existen dos tipos de bases de datos en función del tipo de transacciones que ejecutan:
A) Transaccionales
Se emplean para almacenar la información de las aplicaciones necesarias para la operación
diaria de la empresa (por lo que también se llaman sistemas operacionales): las bases de datos de
ventas, de nóminas, de administración, de gestión de almacén, etc.
Este tipo de sistemas:
Capítulo 1
36 Administración de sistemas gestores de bases de datos
Capítulo 1
Instalación del sistema gestor de bases de datos 37
El sistema gestor suele ser un software muy potente y que consume muchos recursos, por
lo que muchas veces para su instalación es necesario cumplir con unos requisitos mínimos
para que pueda ejecutarse de manera fluida. Los principales requisitos que pueden limitar la
capacidad de elección del sistema gestor son:
1. Sistema operativo: será necesario fijarse, por un lado, en si el sistema gestor es multiplata-
forma (los de Microsoft, por ejemplo, solamente disponen de versiones para Windows),
y, por otro lado, en la versión del sistema operativo a partir de la cual es posible llevar a
cabo la instalación (normalmente lo que se exige en estos casos es que sean versiones
con soporte activo).
2. Disco duro: los SGBD suelen ocupar bastante espacio en disco (para almacenar tanto
el software como las bases de datos), por lo que suelen exigir una cantidad mínima de
espacio libre para poder proceder a la instalación.
3. Memoria: es el otro requisito fundamental del que va a depender el rendimiento del
sistema. En muchos casos la cantidad mínima de memoria que establecen es una canti-
dad sin la cual no sería posible ejecutar el sistema, en lugar de la memoria mínima para
poder ejecutarlo correctamente.
Recuerda
3 El hecho de que el SGBD pueda ejecutarse con una cantidad limitada de memoria no
implica que vaya a ejecutarse correctamente. Si por ejemplo tuviésemos una limitación
de 4GB de RAM, aunque podríamos instalar un servidor Oracle o SQL Server, probable-
mente fuese preferible instalar un gestor más liviano, ya que su rendimiento será mejor.
Capítulo 1
38 Administración de sistemas gestores de bases de datos
a) Aplicación para móvil: almacena muy pocos datos, que pueden ser accedidos únicamente
por medio de la aplicación (un usuario y sin conexiones concurrentes). En estos casos
lo más adecuado es o bien utilizar directamente un fichero, o bien usar una base de
datos relacional como SQLite, pensada específicamente para escenarios como este.
b) Pequeña pyme: almacena pocos datos, únicamente necesita unos formularios e informes
para manipular y consultar la información, no requiere conectividad a internet y tiene
uno o muy pocos usuarios. En este caso lo más adecuado sería utilizar un SGBD ofi-
mático como Access o Libre Office (dependerá de los recursos disponibles) con cuatro
tablas y cuatro formularios, ya que sería la mejor solución en cuanto a necesidades de
la empresa y coste para implementarla.
c) Mediana pyme: volumen medio de datos, requiere de una aplicación para acceder a
los datos (que será usada por unas decenas de usuarios que pueden acceder de forma
simultánea), y normalmente sin conectividad a internet. En este caso tendríamos que
usar un SGBD relacional, que dependerá en gran medida de los recursos y la política de
empresa: si los costes de licencia no fuesen un problema, podría optar por emplear un
servidor Oracle, pero como no suele ser así, podría optar por una solución más barata
(SQL Server o un MySQL Enterprise), o directamente una de código abierto (My
SQL, MariaDB, PostgreSQL, etc.).
d) Tienda web: volúmenes de información medios-altos y muchos accesos simultáneos por
parte de múltiples usuarios. Para este tipo de sistemas (aplicaciones web en general),
se suelen usar bases de datos open source como MySQL o MariaDB, ya que su punto
fuerte es precisamente que gestionan muy bien situaciones de alta concurrencia, y las
bases de datos suelen ser bastante sencillas (pocas tablas) y no requieren una gran com-
plejidad de almacenamiento.
e) Sistema operacional de gran organización: volúmenes de información medio-altos, datos com-
partidos entre múltiples aplicaciones y usuarios, acceso concurrente de múltiples usuarios,
con conectividad a internet y normalmente con disponibilidad de recursos económicos.
En estos casos lo más habitual es utilizar un SGBD relacional que provea de un soporte
oficial al que recurrir en caso de cualquier problema (Oracle, SQL Server, etc.).
f) Datawarehouse de gran organización: volúmenes de información muy altos, pocos usuarios
con pocos accesos simultáneos, gran complejidad de almacenamiento (el almacena-
miento debe estar muy optimizado para que las consultas se ejecuten en un tiempo
razonable). Estos sistemas requieren grandes cantidades de memoria, y suelen llevar al
límite las capacidades de sistema gestor, por lo que se debería usar uno muy potente (y
costoso), como Teradata, Oracle, o incluso SQL Server, o ya pasar a un sistema NoSQL.
Ten en cuenta
En términos generales, podemos afirmar que los sistemas relacionales son los más adecuados
para sistemas tradicionales (con volúmenes de información pequeños o medios), pero a me-
dida que avanza el tamaño o la complejidad de la información a almacenar (sistemas de big
data), los sistemas NoSQL se hacen más aconsejables.
g) Sistemas big-data: los sistemas NoSQL son los más apropiados para sistemas que requieren
procesar gran cantidad de información (a un sistema relacional ya le cuesta mucho mover
cientos de TB), o que requieren almacenar información que no tiene un esquema fijo
(si, por ejemplo, guardamos documentos, los atributos que nos puede interesar guardar
Capítulo 1
Instalación del sistema gestor de bases de datos 39
Con respecto al tipo de sistema NoSQL que deberíamos utilizar, la decisión dependerá espe-
cialmente del tipo de información que vayamos a utilizar, la complejidad de los datos y su tamaño:
Clave/valor
Columnar
Tamaño
Documental
Grafos
Relacional
Figura 1.8
Contexto de utilización
de sistemas NoSQL. Complejidad de los datos
Accede al recurso digital Elección del SGBD donde se detallan diversos tipos de empresas,
con distintas características y necesidades, y determina qué tipo de sistema gestor de base de
datos sería más adecuado para cada casuística.
1.6. Instalación
Realmente en una organización grande con un equipo de DBA y un equipo independiente de
administradores de sistemas, el equipo responsable de realizar la instalación del SGBD sería el
equipo de sistemas, asesorado, eso sí, por el equipo de administración de bases de datos.
El administrador de base de datos sería el responsable de escoger el sistema gestor a instalar,
seleccionar los componentes que deben ser instalados y establecer los parámetros necesarios
para realizar la configuración inicial que se lleva a cabo durante la instalación.
Prácticamente todos los sistemas gestores actuales disponen de asistentes para facilitar su
instalación y para realizar una configuración básica del sistema durante el proceso de instalación.
Capítulo 1
40 Administración de sistemas gestores de bases de datos
datos actuales tienen una arquitectura de cliente-servidor y proveen de sus propias herramientas
y asistentes para realizar la instalación tanto del servidor como del cliente, y establecer la cone-
xión entre ellos.
Cuadro 1.3
Componentes básicos de la instalación de un SGBD tradicional
Motor del SGBD El software del servidor.
Interfaces externas Aplicaciones de comunicación (drivers o conectores)
necesarias para establecer la conexión entre los distintos
clientes y el servidor.
Herramientas de Aplicaciones cliente por medio de consola interactiva o
administración interfaces gráficos para la administración y explotación
del SGBD.
Durante el proceso de instalación del SGBD normalmente es posible establecer los valores de-
seados para diversos parámetros de configuración. Estos parámetros dependerán del SGBD en
cuestión que se esté instalando, pero hay varios tipos de parámetros comunes:
La creación de las bases de datos y todos sus objetos asociados (esquemas, tablas, vistas, sinó-
nimos, restricciones, enlaces de bases de datos…) pueden llevarse a cabo por medio del DDL,
pero habitualmente los sistemas gestores ya proveen de sus propias herramientas con interfaz
gráfica para facilitar esta labor.
Capítulo 1
Instalación del sistema gestor de bases de datos 41
Oracle solo se puede instalar en sistemas Windows, Linux/Unix y Solaris, pero la instala-
ción es muy similar en todos los sistemas operativos ya que se realiza por medio de un asistente
(el Oracle Universal Installer, OUI) y utiliza siempre una estructura de carpetas común inde-
pendientemente de la plataforma.
Todo el proceso de instalación está perfectamente documentado en el sitio web de Oracle
(eso sí: en inglés).
Capítulo 1
42 Administración de sistemas gestores de bases de datos
Ten en cuenta
1.7.1. Requisitos
En general, los requisitos para la instalación son los mismos independientemente del sistema
operativo, ya que hacen referencia a los recursos disponibles no a los recursos totales. Si tene-
mos poca memoria o poco espacio en disco, por ejemplo, será mejor utilizar un sistema Linux,
ya que el sistema operativo ocupa menos espacio y consume menos memoria, con lo cual los
recursos disponibles podrían ser suficientes para instalar el sistema gestor.
Los requisitos mínimos indicados por el fabricante son los siguientes:
256 colores.
Capítulo 1
Instalación del sistema gestor de bases de datos 43
Donde:
SQL Plus es una herramienta de cliente, por lo que, para conectarse a una instancia de
Oracle, necesitará que exista un fichero tnsnames.ora correctamente configurado en ORA-
CLE_HOME/network/admin, y que en ese fichero exista una entrada para el servicio al que
nos queremos conectar.
Ejemplo
sqlplus usuario/abc123.@orcl; -- accedemos por medio del SQL Plus a la instancia (orcl) con
el usuario “usuario” y el password “abd123.”.
SQL>conn usuario/abc123.@pdborcl AS SYSOPER; -- desde el propio SQL Plus cerramos
la conexión anterior y establecemos una nueva a una PDB concreta (pdborcl) con el usuario
“usuario” con rol de SYSOPER.
Capítulo 1
44 Administración de sistemas gestores de bases de datos
sqlplus / as sysdba
En este caso, se utilizará el propio usuario de Windows, siempre que ese usuario sea propie-
tario o miembro del grupo de usuarios creado durante la instalación del sistema gestor (si es el
administrador, se le asigna el usuario SYS).
El comando para desconectar es “disconnect”, y para salir de SQL Plus, “exit”.
● Enterprise Manager Cloud Control: herramienta muy potente que permite registrar y ges-
tionar todos los sistemas gestores Oracle de una organización desde la misma interfaz web.
● Enterprise Manager Express: versión muy simplificada y reducida que se instala por defecto
con el sistema gestor cuando no está disponible la versión anterior. Solamente permite
trabajar con un sistema gestor y únicamente permite realizar la monitorización del sistema.
Capítulo 1
Instalación del sistema gestor de bases de datos 45
Cada servicio (es decir, tanto la instancia como cada PDB) posee su propio EM, que se
ejecutará en su puerto correspondiente.
a) Básico: establece una conexión utilizando una cadena de conexión (compuesta por el
servidor, puerto e instancia a la que nos vamos a conectar).
b) TNS: utiliza una de las entradas existentes en el fichero “tnsnames.ora”, por lo que no
es necesario indicar información de conexión.
c) LDAP: en caso de disponer de autenticación por medio de LDAP configurada en
el servidor, permitiría realizar conexiones contra el SGBD utilizando los usuarios de
LDAP.
d) Avanzado: permite establecer una conexión JDBC indicando una cadena de conexión
personalizada.
e) Local: permite establecer conexiones contra el servidor local.
Una vez establecida la conexión, es posible realizar todo tipo de operaciones con la base
de datos a la que nos hemos conectado: crear tablas, usuarios, vistas, sinónimos, etc., y todo por
medio de una interfaz gráfica.
Ten en cuenta
Capítulo 1
46 Administración de sistemas gestores de bases de datos
En las versiones de Oracle anteriores a la versión 19c, era necesario descargar un instalador
que se encargaba de crear todas las carpetas necesarias en ORACLE_HOME y copiar cada
archivo a su ubicación. Esto tenía dos problemas: incrementaba considerablemente el tiempo
de instalación (tenía que copiar gran cantidad de ficheros), y desperdiciaba espacio innecesa-
riamente: el fichero de instalación ocupaba en torno a 3 GB, y la instalación unos 6 GB, por lo
que, aun disponiendo del espacio libre necesario para la instalación, muchas veces no era posible
llevarla a cabo ya que el propio instalador ya estaba ocupando gran parte de ese espacio libre ne-
cesario. A partir de la versión 19c, la carpeta que se descarga para realizar la instalación ya con-
tiene todos los ficheros necesarios organizados según la arquitectura OFA, por lo que solamente
habrá que moverla a la ruta ORACLE_HOME y cambiarle el nombre por “db_home1” y, de
ese modo, ya se convertirá en la carpeta de instalación del servidor, solucionando los problemas
de espacio y simplificando el proceso de copia de archivos.
Una vez lanzado el instalador, este va pasando por varios pasos en los que se solicita que se
indique algún dato o que se escoja entre varias opciones (cada una de las cuales estará siempre
precedida de un icono de ayuda sobre el que se puede pulsar para obtener más información
acerca de en qué consiste dicha opción).
El proceso de instalación apenas ha cambiado en las últimas versiones, y los pasos más rele-
vantes son los siguientes:
1. Seleccionar el tipo de base de datos a instalar: una base de datos transaccional para las
operaciones habituales del día a día con muchas transacciones pequeñas, o una base de
datos de almacén de datos (data warehouse: DW) optimizada para trabajar con pocas
transacciones pero muy pesadas.
2. Especificar los identificadores de la base de datos del contenedor (por defecto orcl) y
de la PDB que se va a crear (orclpdb). Estos nombres serán los que se usarán en toda la
red para identificar al contenedor y a la PDB.
Capítulo 1
Instalación del sistema gestor de bases de datos 47
Accede al recurso digital Instalación SGBD Oracle y realiza los pasos necesa-
rios para llevar a cabo la instalación de una instancia del servidor Oracle 19c con
la nueva arquitectura Multitenant de Oracle.
Capítulo 1
48 Administración de sistemas gestores de bases de datos
Variable Valor
ORACLE_BASE /u01/app/oracle
ORACLE_HOME $ORACLE_BASE/product/19.0.0/dbhome_1
PATH $ORACLE_HOME/bin:$PATH
LD_LIBRARY_PATH $ORACLE_HOME/lib:$LD_LIBRARY_PATH
– El inicio y parada del sistema gestor (así como de otros procesos como el planificador
o el listener) se realiza por medio de servicios. En Windows estos servicios se crean y
se inician automáticamente, mientras que en Linux debe crearlos de forma específica el
administrador.
– Para facilitar desplegar el sistema gestor de base de datos en sistemas Linux, Oracle dis-
pone de su propia distribución de Linux (Oracle Linux), basada en la distribución de
Red Hat que recomienda utilizar, ya que facilita la instalación y, lo que es más impor-
tante, facilitará posteriormente la administración y explotación del sistema.
– Para poder ejecutar el asistente de instalación en Windows es necesario instalar previa-
mente “Visual C++ Redistributable para Visual Studio 2015”. La instalación en Linux
también requiere la instalación de algunas librerías, pero no obliga a hacerlo antes de
ejecutar el asistente de instalación, sino que el propio instalador en la pantalla de com-
probación de requisitos chequea si falta alguna librería necesaria e indica de cuál se
trata.
Resumen
Capítulo 1
Instalación del sistema gestor de bases de datos 49
Ejercicios propuestos
1. La empresa en la que trabajas ha decidido sustituir el actual sistema de ficheros que
estaban utilizando por un SGBD y una aplicación moderna que sea accesible vía web
y permita explotar la información.
El sistema actual trabaja con los siguientes ficheros:
● Una aplicación de escritorio que emplearán los empleados para registrar las ven-
tas realizadas por los clientes.
● Una aplicación web a través de la que los propios clientes podrán realizar sus
pedidos.
● Una aplicación para móvil que los usuarios podrán descargarse para realizar sus
pedidos.
● Un módulo de análisis que lee la información registrada en tu base de datos por
parte de los tres sistemas anteriores y la guarda en su propia base de datos de forma
que facilite la elaboración de informes por parte de los gerentes de la organización.
Capítulo 1
50 Administración de sistemas gestores de bases de datos
a) El módulo de análisis.
b) La aplicación de escritorio, aplicación web y aplicación móvil.
2. Un pequeño supermercado está desarrollando una aplicación web para gestionar su
almacén (para controlar el stock), y te contrata como administrador de bases de datos.
Tu primera labor será seleccionar el instalar el software que usará dicha aplicación
para almacenar la información.
En el almacén realizan varias tareas: compras a los proveedores, recepción de
las mercancías y ubicación de cada una en su lugar, revisión de caducidades, etc.
El supermercado tiene en total 10 empleados, y el presupuesto para informática es
bastante reducido.
● Orientada a objetos.
● Navegacional.
● Relacional.
● NoSQL.
● Relacional.
● NoSQL.
● Orientada a objetos.
● Navegacional.
Capítulo 1
Instalación del sistema gestor de bases de datos 51
Actividades de autoevaluación
1. Un SGBD es:
a) Un conjunto de datos almacenados.
b) Un conjunto de programas para almacenar, gestionar y recuperar datos.
c) Un almacén donde se pueden guardar datos.
d) Un sistema de control de acceso a los datos.
3. ¿En qué modelo de base de datos se representa la información con nodos relacionados
en forma de red?
a) Relacional.
b) Jerárquico.
c) Orientado a objetos.
d) NoSQL.
Capítulo 1
52 Administración de sistemas gestores de bases de datos
9. Una empresa quiere una aplicación de análisis corporativo. ¿Qué tipo de base de
datos necesitará?
a) Transaccional.
b) Orientada a objetos.
c) NoSQL.
d) De almacén de datos (DW).
SOLUCIONES:
a b c
1. a b c d
d 5.
a b c
2. a b c d 9.
d 6. a b c d
3.
a b c d 7.
a b c d 10.
a b c d
a b c
4. a b c d
d 8.
Capítulo 1
2
Configuración
del sistema gestor
de bases de datos
Objetivos
3 Conocer los primeros pasos que se deben llevar a cabo tras la instalación del
sistema: qué elementos es necesario configurar y cómo realizar la puesta en
marcha del sistema.
3 Comprender la importancia y el funcionamiento de dos elementos básicos
del sistema gestor de base de datos como son el diccionario de datos y el
cuaderno de bitácora.
3 Considerar la importancia de documentar adecuadamente toda la informa-
ción referente a la instalación y configuración del sistema gestor.
54 Administración de sistemas gestores de bases de datos
Mapa conceptual
Diccionario de datos
Cuaderno de bitácora
realiza Funciones
Puesta en marcha
Configuración Entorno
Conexiones
Servidor
Almacenamiento
Seguridad
Administración
Glosario
Capítulo 2
Configuración del sistema gestor de bases de datos 55
2.1. Introducción
Tras seleccionar el SGBD y realizar la instalación, tanto del sistema gestor como de las aplica-
ciones clientes que sean necesarias para poder gestionarlo, es necesario configurarlo.
Los pasos a llevar a cabo para configurar adecuadamente el servidor serán muy dependien-
tes tanto del sistema gestor de que se trate como sobre todo de su arquitectura, pero por lo
general hay varios aspectos que es necesario configurar en todos ellos. En este capítulo veremos
estos aspectos generales que es necesario configurar y comprobaremos su aplicación práctica en
un SGBD concreto: Oracle.
Capítulo 2
56 Administración de sistemas gestores de bases de datos
La mayoría de sistemas gestores existentes en entornos de producción son sistemas con ar-
quitectura cliente/servidor, por lo que las tareas iniciales de configuración se centrarán en
identificar al servidor en la red, permitir las conexiones desde los clientes y habilitar las cuentas
necesarias para permitir dichas conexiones.
a) En el servidor:
b) En el cliente:
Capítulo 2
Configuración del sistema gestor de bases de datos 57
● Las credenciales (usuario y password) que empleará para identificarse una vez esta-
blecida la conexión.
Ten en cuenta
Existen parámetros cuya modificación puede tener efecto inmediato, pero hay otros que re-
quieren el reinicio del sistema gestor para pasar a ser efectivos, ya que al reiniciar el gestor este
cargaría de nuevo el fichero de parámetros con los nuevos valores que se hayan especificado.
Capítulo 2
58 Administración de sistemas gestores de bases de datos
un fichero nuevo (puede estar en otro disco) con el tamaño que queramos ampliar y
añadirlo al tablespace, sin afectar en absoluto a la disponibilidad del sistema.
● Permiten gestionar conjuntamente todos los ficheros físicos de un esquema, lo que es
muy útil para hacer copias de seguridad, copiar datos, controlar el espacio ocupado por
cada esquema, etc.
Ejemplo
La funcionalidad que aporta el incorporar un elemento lógico que permita abstraer los deta-
lles de almacenamiento para una tabla podría equipararse a la funcionalidad de un call center
de atención al cliente, donde cada operador del call center sería el equivalente a un archivo de
datos y el propio call center sería la estructura lógica equivalente al tablespace:
– Si los clientes llamasen directamente a operadores concretos, esto implicaría que ten-
drían que conocer con qué operador quieren hablar y en caso de que este estuviese
ocupado o de vacaciones no podrían acceder al servicio. Del mismo modo, si los
datos de una tabla se guardasen directamente en un fichero, en caso de que este estu-
viese lleno o no estuviese disponible, no sería posible acceder a los datos de la tabla.
– El uso del call center permite introducir una estructura “abstracta” para la gestión de
llamadas de los clientes: si hubiese muchas llamadas y se saturase el servicio, sola-
mente habría que contratar a más operadores para poder seguir dando el servicio co-
rrectamente. De la misma forma, si los archivos de datos de un tablespace estuviesen
en un disco lleno, solamente habría que añadir un nuevo archivo de datos ubicado en
otro disco al tablespace y podrían insertarse nuevos datos sin problema en la tabla.
– De cara a la organización interna de la empresa, también sería más sencillo gestionar
a nivel de call center que hacerlo individualmente operador a operador: si queremos
derivar los clientes a los que atiende un call center a otro situado en otro país, sola-
mente sería necesario redirigir las llamadas dirigidas al call center, en lugar de tener
que desviar teléfono a teléfono. Del mismo modo, si queremos hacer una copia de
seguridad de varias tablas incluidas en un tablespace, es más sencillo copiar el ta-
blespace que tener que buscar todos los archivos de datos en lo que están las tablas y
copiarlas uno a uno.
a) De sistema: todos los SGBD tienen al menos un tablespace SYS o SYSTEM para alma-
cenar toda la información del sistema (el diccionario de datos).
b) Temporal: cuando realizamos consultas pesadas sobre el SGBD, cuando se queda sin
espacio en memoria para almacenar los resultados parciales de la consulta necesita guar-
dar esta información en disco, para lo que usará el tablespace temporal. Es importante
dimensionar adecuadamente este tablespace, ya que si los resultados de una consulta no
caben en el tablespace temporal, la consulta no se podrá resolver. Cuando finaliza la
consulta, el espacio que ocupaba se libera, por lo que en las tareas de revisión de espacio
no se debe tener en cuenta este tablespace.
c) De registro o de UNDO (de “deshacer”): algunos SGBD disponen de un tablespace de
UNDO para facilitar las operaciones de rollback. Cuando iniciamos una transacción,
Capítulo 2
Configuración del sistema gestor de bases de datos 59
¿Sabías que...?
Antiguamente la instalación del sistema gestor se llevaba a cabo como una aplicación
particular, de modo que era necesario configurar explícitamente el inicio del servidor
cuando se arrancase el equipo.
Capítulo 2
60 Administración de sistemas gestores de bases de datos
Ejemplo
Internamente, el sistema gestor creará un nuevo registro en cada una de las tablas del dic-
cionario de datos donde se almacena la información referente a todos los objetos que estamos
creando:
Figura 2.1
Ejemplo tabla “TABLAS” del diccionario de datos.
Capítulo 2
Configuración del sistema gestor de bases de datos 61
● En la tabla COLUMNAS se insertará un registro por cada una de las columnas de la tabla.
Figura 2.2
Ejemplo tabla
“COLUMNAS”
del diccionario
de datos.
Figura 2.3
Ejemplo tabla “RESTRICCIONES”
del diccionario de datos.
● Si el sistema gestor crea automáticamente índices en las claves primarias, por ejemplo,
creara el índice y guardará un registro en la tabla INDICES correspondiente a ese índice.
Figura 2.4
Ejemplo tabla “INDICES” del diccionario de datos.
Capítulo 2
62 Administración de sistemas gestores de bases de datos
Este fichero de log es especialmente importante porque se utiliza en algunas tareas muy
importantes, como:
● Gestión de transacciones: todas las operaciones realizadas por una transacción se registran
en este fichero, de modo que si ejecutamos un rollback y el sistema gestor tiene que
deshacer los cambios realizados hasta ese momento, consultará en el cuaderno de bitá-
cora las operaciones que tiene que deshacer.
● Recuperación del sistema ante caídas: si se cae el sistema y tenemos que recuperar la última
copia de seguridad, tendremos que volver a realizar todas las operaciones ejecutadas
desde el momento en que se hizo la copia de seguridad para volver al estado anterior a
la caída del sistema.
● Replicación del SGBD: para replicar una base de datos, normalmente lo que hace el siste-
ma gestor es trasladar al sistema gestor de la réplica todas las operaciones que se registren
en el cuaderno de bitácora, de forma que cada operación que se ejecute en el servidor
principal, se ejecutará también en la réplica. Si una réplica está temporalmente fuera de
servicio, cuando estuviese de nuevo online se le enviarían todas las instrucciones del log
que tiene pendiente de ejecutar y de ese modo se actualizaría automáticamente.
Ejemplo
Figura 2.5
Ejemplo cuaderno
de bitácora.
2.6. Documentación
Un administrador de sistemas debe almacenar información detallada y actualizada de todos los
servidores de la organización y de los servicios que proporcionan.
En el caso de un servidor de bases de datos, además de guardar los datos correspondientes
al hardware (capacidad de disco, memoria principal y extendida, placa base, etc.) y al software
de este (sistema operativo y programas en ejecución), se debe guardar también información de:
1. Versión y todas las actualizaciones realizadas de todos los programas del servidor (in-
cluido el SGBD). Es muy importante mantener esta información actualizada porque
será imprescindible tenerla a mano en caso de que sea necesario contactar con el sopor-
te del sistema gestor.
2. Información de las bases de datos que estén instaladas en el servidor: modelo Entidad-
Relación, esquema relacional y descripción de los objetos de la base de datos (tablas,
columnas de cada tabla, restricciones, funciones, disparadores).
3. Usuarios de la base de datos y permisos de cada uno de ellos.
Capítulo 2
Configuración del sistema gestor de bases de datos 63
Toma nota
Hay programas específicos que ayudan a realizar la documentación de las bases
de datos (como Mogwai, ERWIN o el propio MySQL Workbench), ya que permiten
generar automáticamente los modelos lógico y relacional de las bases de datos, así
como documentar la información de todos los objetos de la base de datos.
Capítulo 2
64 Administración de sistemas gestores de bases de datos
– Definir las variables de entorno: es necesario definir tres nuevas variables (ORACLE_
HOME, LD_LIBRARY_PATH y ORACLE_SID) y modificar el PATH del sistema:
– Tendremos que dar permisos de lectura y ejecución a todos los usuarios (o al grupo
de usuarios de instalación) en los directorios $ORACLE_HOME/lib, $ORACLE_
HOME/bin, $ORACLE_HOME/oracore y $ORACLE_HOME/sqlplus.
Ten en cuenta
El formato de las entradas de los ficheros de configuración de red de Oracle es MUY delicado:
es muy habitual tener problemas de conexión debidos a la presencia de espacios o tabuladores
donde no corresponde, que son muy difíciles de detectar. Para añadir nuevas entradas en estos
ficheros, se recomienda para evitar problemas partir siempre una entrada existente y copiarla
y pegarla modificando únicamente los valores necesarios para la nueva conexión (o usar el
asistente de configuración de red, que ya nos garantiza que no habrá errores de este tipo en las
entradas que defina automáticamente).
Capítulo 2
Configuración del sistema gestor de bases de datos 65
e jecuta como un servicio del sistema operativo (por lo que es posible arrancarlo, pararlo o reini-
ciarlo como un servicio más), aunque realmente gestiona varios procesos, uno por cada base de
datos o instancia a la que nos podamos conectar. Oracle denomina a estos procesos con el nombre
de “servicios”, lo que es bastante confuso ya que un servicio del sistema operativo (el listener) ges-
tiona varios servicios de Oracle (los procesos que atienden las peticiones realizadas sobre cada base
de datos). Los parámetros del listener (el nombre o dirección del servidor y el puerto en el que
escucha, principalmente) se configuran por medio del fichero de configuración “listener.ora”:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ORCL)
(PROGRAM = extproc)
(ENVS = “EXTPROC_DLLS=ONLY:C:\app\oracle\product\12.1.0\dbhome_1\
bin\oraclr12.dll”)
(SID_NAME = ORCL)
(ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORASERV)(PORT = 1521))
)
El servicio realmente está ejecutando una aplicación del servidor Oracle, el programa “lsn-
rctl” (disponible en el directorio “bin” del Oracle Home). Con este programa podemos lanzar,
parar o comprobar el estado del listener para saber qué servicios están activos:
El nombre del listener solamente será necesario indicarlo si tenemos instalados varios liste-
ners en la misma máquina.
Una última opción que tenemos para controlar el funcionamiento del listener es a través
del EM.
Capítulo 2
66 Administración de sistemas gestores de bases de datos
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ORASERV)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsping orcl;
Accede al recurso digital Configuración de las conexiones y configura los distintos ficheros de
gestión de red de Oracle para poder establecer una conexión entre el cliente y el servidor.
Capítulo 2
Configuración del sistema gestor de bases de datos 67
● Linux/Unix: ORACLE_HOME/dbs/spfileSID.ora.
● Windows: ORACLE_HOME/database/spfileSID.ora.
a) Los parámetros dinámicos pueden modificarse por medio de una sentencia SQL con
la base de datos en funcionamiento, y se pueden modificar a nivel de sesión (ALTER
SESSION, modificaría el valor del parámetro inmediatamente pero solo para la sesión
en la que se ejecuta esa sentencia de modificación del parámetro) o a nivel de sistema
(ALTER SYSTEM, modifica el valor del parámetro de manera inmediata para todas las
sesiones).
b) Los parámetros estáticos se pueden modificar por medio de una sentencia SQL o direc-
tamente modificando su valor en el fichero de configuración SPFILE, pero el cambio
no será efectivo inmediatamente, sino que se realizará cuando se reinicie la instancia.
Para modificar el valor de los parámetros por medio de comandos SQL, usaremos:
Donde:
Los valores de los parámetros de configuración (tanto el actual como el que figura en el
SPFILE) se pueden consultar usando el interfaz gráfico del EM o el Developer, pero también
por medio de:
Capítulo 2
68 Administración de sistemas gestores de bases de datos
¿Sabías que...?
Cuando se inicia una transacción que realiza modificaciones sobre los datos, en el ta-
blespace de UNDO se van almacenando las “vistas” de los datos tras cada cambio, lo
que permite no solo recuperar el estado anterior a la transacción en caso de que sea ne-
cesario realizar un rollback (si falla la transacción hay que deshacer todos sus cambios),
sino que permite que los demás usuarios puedan seguir viendo el estado consistente de
los datos anterior a la transacción hasta que esta se confirme (se ejecuté un COMMIT),
momento en que pasarían a ver todos los datos actualizados por la transacción.
Donde:
Capítulo 2
Configuración del sistema gestor de bases de datos 69
– Un tablespace puede tener varios datafiles, que se indicarán separados por comas. Es
obligatorio indicar el tamaño inicial de cada uno de ellos.
– AUTOEXTEND indica si los datafiles incrementarán su tamaño automáticamente
cuando se queden sin espacio. Si se pone a ON, habrá que indicar cuánto espacio se
reservará en cada incremento (ON NEXT), y se podrá indicar un tamaño máximo
(MAXSIZE) a partir del cual no se reservará más espacio.
Ejemplo
a) SYS: el esquema SYS almacena todas las tablas del diccionario de datos. Estas tablas no
pueden modificarse, ni se pueden crear nuevas tablas en este esquema. No es posible
tampoco acceder directamente a los datos de las tablas del esquema SYS, sino que se
accederá empleando las numerosas vistas existentes en el esquema, y normalmente
usando el zSYSTEM en lugar de SYS. Tanto SYS como SYSTEM tienen por defecto
asignado el rol DBA.
b) SYSTEM: el usuario SYSTEM se utiliza para operaciones de administración sobre la
base de datos. Contiene un esquema externo del esquema SYS (de forma que puede
acceder a todas sus tablas empleando las vistas creadas al efecto), y puede crear tablas y
vistas adicionales que muestran información administrativa, tablas internas y vistas utili-
zadas por varias opciones y herramientas de la base de datos Oracle. No se debe utilizar
el esquema SYSTEM para almacenar tablas de usuarios no administradores. El usuario
system puede llevar a cabo todas las tareas del usuario SYS excepto operaciones de
backup y recuperación, y actualizaciones del SGBD.
c) PDBADMIN: en una instancia de Oracle 19c existen dos tipos de usuarios: locales (locales
a cada PDB), y comunes (comunes a la instancia, y por tanto a todos los PDB del mismo
contenedor). La información del diccionario de datos relativa a los usuarios locales se al-
macena en el esquema SYS de cada PDB, mientras que la información común se guardará
en el esquema PDBADMIN, que será administrador de todo el contenedor (CDB).
Toma nota
Para establecer una conexión con el usuario SYS, siempre hay que hacerlo asignándole
el rol de dba, independientemente de la herramienta utilizada. Con el SQL Plus:
SQL> conn sys@orcl as sysdba
Capítulo 2
70 Administración de sistemas gestores de bases de datos
Aparte de estas cuentas de usuario, sería posible crear cuentas de administración adicionales
asignando el rol DBA (database administrator) a los usuarios que corresponda.
Recuerda
● alert LOG. Registra sucesos de la gestión general de la base de datos: errores internos,
operaciones de modificación de la base de datos, modificaciones en los parámetros de
configuración, etc.
● LOG de procesos en background. Registra los sucesos provocados por los procesos en
ejecución de Oracle.
● LOG de usuarios. Monitoriza la actividad de los usuarios.
Estos ficheros se gestionan normalmente a través del EM, pero es posible hacerlo con las
vistas del diccionario de datos, como V$DIAG_INFO para el alert log.
Además, los principales servicios del servidor tienen sus propios logs:
Capítulo 2
Configuración del sistema gestor de bases de datos 71
1. Shutdown
En este estado la base de datos está cerrada, y todos sus procesos parados. No es muy fre-
cuente parar una base de datos, aunque nos puede interesar hacerlo para realizar operaciones
para las cuales necesitemos que no haya ningún proceso ejecutándose en la base de datos
(instalar un parche o actualización, realizar determinadas operaciones de mantenimiento…).
Capítulo 2
72 Administración de sistemas gestores de bases de datos
Cuando se para la base de datos, no se acepta ninguna solicitud de conexión contra la misma, y
es necesario especificar cómo se tratarán las conexiones en curso:
Donde:
2. Nomount
Cuando se inicia la instancia en estado nomount, se leen algunos parámetros del archivo
de inicialización (SPFILE) y se configura la instancia: se reserva todo el espacio necesario
en memoria (SGA, PGA, etc.) pero solo se ejecutarán los procesos básicos, por lo que no es
posible conectar con la base de datos. Hay algunas operaciones de recuperación que requie-
ren que la base de datos esté en estado nomount (por ejemplo, si la base de datos ha fallado
y es necesario recuperar los archivos de redo log habría que hacerlo iniciando la instancia en
modo nomount). También queda normalmente en este estado cuando hay algún error en los
parámetros de inicialización y no es capaz de iniciar la instancia. Para arrancar una base de
datos parada en estado nomount:
3. Mount
Al estado anterior se añade la lectura de los archivos de control para optimizar el funciona-
miento de la instancia. En este estado, Oracle localiza donde están ubicados los datafiles, pero no
los abre todavía, por lo que los usuarios seguirán sin poder conectarse a la base de datos pero
permitirá realizar tareas administrativas relacionadas con los datafiles. Para arrancar una base de
datos parada en estado mount usaríamos el comando:
Capítulo 2
Configuración del sistema gestor de bases de datos 73
4. Open
En este estado, la base de datos está abierta, con todos sus procesos en ejecución y disponible
para los usuarios. Para iniciar una base de datos parada:
Si habitualmente trabajamos con una o varias PDB concretas y queremos que estas se ini-
cien automáticamente al arrancar la instancia, podemos guardar el estado de la PDB, de forma
que al arrancarlo lo deje en el estado que hemos guardado.
Capítulo 2
74 Administración de sistemas gestores de bases de datos
La información del diccionario de datos se puede consultar por medio de vistas dinámicas
(cada vista generalmente muestra información de algún tipo de objeto: tablas, columnas, vistas,
sinónimos, enlaces, procedimientos, etc.).
Para cada objeto de la base de datos existen tres vistas en el diccionario de datos, cada una
de ellas con un prefijo diferente:
a) USER_: muestra los objetos que pertenecen al usuario que hace la consulta.
b) ALL_: muestra todos los objetos a los que el usuario tiene acceso (sean o no de su propie-
dad): si el usuario A da permiso de consulta sobre sus tablas al usuario B, cuando el usuario
B consulte la vista ALL_TABLES le aparecerán sus propias tablas y las del usuario A.
c) DBA_: muestra todos los objetos de la base de datos. Existen objetos del sistema de los
cuales solamente existe la vista DBA_, ya que los usuarios no pueden poseer dichos
objetos y por tanto no podrían consultar únicamente los objetos de ese tipo que le
pertenezcan (por ejemplo DBA_TABLESPACES).
Capítulo 2
Configuración del sistema gestor de bases de datos 75
Todos los usuarios tienen acceso a las vistas USER_ y ALL_, pero únicamente los que
tengan permisos de DBA (o se les haya asignado expresamente el permiso de acceso) pueden
acceder a las vistas DBA_.
Recuerda
Existen además vistas que permiten consultar información de la instancia, que suelen co-
menzar por el prefijo V$.
Figura 2.6
Ejemplo de vistas del
diccionario de datos
de Oracle.
Resumen
n Una vez finalizada la instalación de la base de datos, es necesario realizar una configura-
ción básica para poder establecer conexión con el servidor, lo que implicará configurar:
n Lo más sencillo para arrancar y parar el SGBD es emplear servicios que se encarguen
de arrancar automáticamente el sistema gestor cuando se inicie el servidor, aunque
en ocasiones es necesario iniciar el SGBD a mano para poder realizar determinadas
tareas de administración.
Capítulo 2
76 Administración de sistemas gestores de bases de datos
n La mayoría de las principales funcionalidades del sistema gestor hacen uso de dos he-
rramientas fundamentales: el diccionario de datos (donde se almacenan todos los me-
tadatos, la información acerca de todos los objetos de la base de datos) y el cuaderno
de bitácora (donde se registran todas las modificaciones realizadas sobre los datos).
n Es muy importante para el administrador de base de datos mantener correctamente
definida y actualizada la documentación del sistema gestor, para disponer en todo
momento de la información necesaria para poder contactar con el soporte de la he-
rramienta, tener catalogados perfectamente todos los servidores y bases de datos exis-
tentes en la organización, conocer qué usuarios tienen acceso y qué permisos o roles
tiene cada uno de ellos, y especialmente tener definidos los procedimientos necesa-
rios para garantizar una correcta administración del sistema.
Ejercicios propuestos
1. Hemos cambiado la IP del servidor en el que tenemos instalado el SGBD Oracle.
¿Qué archivo deberíamos revisar para garantizar que el SGBD siga escuchando co-
rrectamente en espera de conexiones de los clientes?
2. Has definido una nueva entrada en tu TNSNAMES. ¿Qué comando podrías utilizar
para comprobar si la conexión funciona correctamente?
3. ¿Qué comando tendrías que ejecutar para comprobar el estado del listener de Oracle
y saber qué servicios están activos y escuchando por conexiones?
4. Crea un tablespace “rrhh” con dos datafiles (rrhh01 y rrhh02), ambos de 10M, que no
serán autoextensibles. Los datafiles se guardarán en el directorio donde se almacenan
el resto de datafiles de la PDB “pdborcl”. El resto de parámetros se mantendrán los
que asigne Oracle por defecto.
5. Tenemos la instancia en estado NOMOUNT y queremos mover los datafiles “rrhh01” y
“rrhh02” a una subcarpeta llamada “recursos_humanos”. ¿Qué sentencia tendremos que
ejecutar para poner la instancia en el estado adecuado para poder mover los datafiles?
6. Indica la sentencia que tendrías que ejecutar para desactivar la papelera de reciclaje
de Oracle a nivel de sesión.
7. Indica las sentencias que podrías ejecutar en Oracle para asegurar que cuando se
reinicie la instancia el parámetro “optimizer_mode” tome el valor “FIRST_ROWS”.
Ejercicios propuestos
8. Emplea el SQL Developer para comprobar cuántos datafiles tiene por defecto el ta-
blespace del sistema.
9. El valor que tiene asignado el parámetro “nls_language”, ¿es el valor que tenía por
defecto?, ¿por qué?
10. ¿En qué ruta se almacena el primer fichero de control de la instancia?
Resumen
Capítulo 2
Configuración del sistema gestor de bases de datos 77
Actividades de autoevaluación
1. Contiene información permanente de los cambios realizados en la base de datos:
a) Tablespace del sistema.
b) Tablespace de UNDO.
c) Archivo de control.
d) Cuaderno de bitácora.
2. ¿En qué nivel de diseño de la base de datos se determina el contenido de los archivos
de configuración?
a) Interno.
b) Conceptual.
c) Lógico.
d) Externo.
Capítulo 2
78 Administración de sistemas gestores de bases de datos
7. ¿En cuál de los siguientes tablespace es más crítico mantener controlado su porcentaje
de ocupación?
a) De sistema.
b) Temporal.
c) De UNDO.
d) Todas son correctas.
8. ¿Cuál de las siguientes operaciones requerirá un inicio del SGBD a un estado interme-
dio, en el que no acepte peticiones de los usuarios?
a) La eliminación de un usuario.
b) La eliminación de un archivo de datos.
c) La eliminación de un esquema.
d) La eliminación de un tablespace.
9. Queremos ejecutar un script que compruebe qué tablas no tienen definido un índice
en su clave primaria y lo cree automáticamente. ¿Qué herramienta tendría que em-
plear dicho script?
a) El cuaderno de bitácora.
b) El tablespace del sistema.
c) El diccionario de datos.
d) El registro de transacciones.
SOLUCIONES:
a b c
1. d 5.
a b c d
a b c
2. a b c d 9.
d 6. a b c d
a b c
3. a b c d 10.
d 7. a b c d
a b c
4. a b c d
d 8.
Capítulo 2
3
Gestión de usuarios
y permisos
Objetivos
3 Conocer los mecanismos existentes en el sistema gestor para garantizar la
confidencialidad de los datos por medio de un sistema de autenticación de
usuarios y la asignación de permisos y restricciones.
3 Comprender el concepto de esquema externo y su funcionamiento.
3 Analizar las posibilidades existentes en cuanto a los usuarios, roles, permi-
sos, perfiles, vistas y sinónimos que es necesario crear en distintos contextos.
3 Adquirir el hábito de emplear el diccionario de datos para realizar tareas
masivas relacionadas con la gestión de usuarios y permisos.
80 Administración de sistemas gestores de bases de datos
Mapa conceptual
Permisos
Roles
Perfiles
Sinónimos
realiza Funciones
Puesta en marcha
Esquemas externos
Explotación
Administración
Glosario
Lenguaje de control de datos (DCL: Data Control Language). Es uno de los sublenguajes
de SQL, responsable de la gestión de permisos: permite asignar o quitar permisos a
usuarios o roles, y asignar o quitar roles a usuarios.
Esquema conceptual. El esquema conceptual de una base de datos establece los datos
que forman parte de la base de datos y las relaciones que se establecen entre ellos.
Una base de datos tendrá un único esquema conceptual.
Capítulo 3
Gestión de usuarios y permisos 81
3.1. Introducción
Una vez instalado y configurado el sistema gestor para poder comenzar a trabajar con él, será
necesario habilitar el acceso a los usuarios para que puedan acceder al sistema. Normalmente
los sistemas gestores de bases de datos instalados en entornos de producción son sistemas mul
tiusuario, por lo que es necesario gestionar adecuadamente qué usuarios serán los que podrán
acceder al sistema y qué información podrá ver o qué operaciones podrá realizar cada usuario,
para garantizar la confidencialidad de los datos almacenados en las bases de datos.
La sintaxis necesaria para crear usuarios o asignar permisos en cualquier sistema gestor de base
de datos es muy sencilla de encontrar por medio de una búsqueda en internet. Lo que no es tan
sencillo es saber qué usuarios, roles o perfiles es necesario crear para ajustarse a los requisitos de
acceso a la información definidos por los clientes, y esa será la otra labor que deberá llevar a cabo el
DBA: analizar qué usuarios será necesario crear y definir el esquema externo de cada uno de ellos.
Capítulo 3
82 Administración de sistemas gestores de bases de datos
Los sistemas gestores permiten implementar esta función por medio de varios meca
nismos:
● Autenticación de usuarios: para acceder a la información de las bases de datos los usuarios
tendrán que identificarse, lo que garantiza que solamente tengan acceso a la base de datos
los usuarios con permiso. Cada usuario tendrá acceso a su esquema externo de la base
de datos. El registro de los usuarios que acceden a la base de datos permitirá también
implementar funciones de monitorización y auditoría.
● Permisos y roles: la asignación de permisos a los usuarios garantizará que los usuarios
únicamente puedan acceder a aquellos objetos o funciones para las que tengan permiso.
Los permisos pueden hacer referencia al uso que el usuario hará del sistema gestor de
base de datos (permisos del sistema) o a las operaciones que podrá ejecutar sobre los
objetos de las bases de datos (permisos de objetos). Los roles permiten definir grupos
de usuarios con permisos comunes.
● Cuotas y perfiles: permiten delimitar la disposición de recursos a determinados usuarios.
Toma nota
De nada sirve en cualquier caso controlar los privilegios de los usuarios dentro del servidor
de bases de datos si fuera del servidor, en el entorno del sistema operativo, estos usuarios tienen
libre acceso al sistema de ficheros. Para evitarlo, el responsable de sistemas deberá mantener bajo
control los permisos de acceso de los siguientes archivos:
– Los archivos de datos, donde se guardan las bases de datos y sus tablas. Los usuarios no
autorizados no pueden acceder a estos archivos directamente.
– Ficheros de logs y de estado. Los usuarios no autorizados no deberían tener acceso a
esta información ya que podrían detectar vulnerabilidades en el sistema.
– Ficheros de configuración, para que usuarios no autorizados no puedan reemplazarlos
o modificarlos.
– Programas y scripts que manejan y acceden a bases de datos, para que los usuarios no
puedan reemplazarlos o modificarlos.
Ten en cuenta
Todos los usuarios, roles, permisos, cuotas, vistas, etc., que creemos serán objetos
del sistema gestor, por lo que se almacenarán en el diccionario de datos. Esto es muy
importante de cara a la automatización de tareas de gestión de usuarios y permisos,
ya que podremos consultar en el diccionario de datos si hay alguna anomalía ante la
que debamos responder, comprobar los usuarios que tengamos para realizar alguna
operación sobre ellos, etc.
Capítulo 3
Gestión de usuarios y permisos 83
3.2.1. Usuarios
La sintaxis empleada para crear usuarios es también dependiente del sistema gestor, ya que
cada sistema dispone de distintas variantes a la hora de gestionar los usuarios, aunque en todos
ellos suele ser bastante similar, basada en el estándar de SQL:
Para modificar un usuario se utiliza ALTER USER. Las modificaciones que se puedan
realizar sobre un usuario dependerán del sistema gestor:
– Cambiar la contraseña.
– Bloquear o desbloquear un usuario (impidiéndole el acceso al sistema gestor).
– Establecer limitaciones o asignar perfiles.
– Etc.
Capítulo 3
84 Administración de sistemas gestores de bases de datos
La opción CASCADE permite eliminar no solo el usuario sino también todos sus objetos
de su esquema (solo es válida por tanto en los sistemas gestores que asocian un esquema a cada
usuario). La sentencia DROP USER es una sentencia del DDL, por lo que si se borra un usua
rio y todo su contenido no es posible recuperarlo posteriormente por medio de un rollback.
3.2.2. Permisos
Los permisos determinan las operaciones que pueden llevar a cabo los usuarios en el sistema
gestor. En un SGBD se pueden asignar dos tipos de permisos:
a) Permisos del sistema: permisos relacionados con las operaciones que el usuario podrá
realizar en el SGBD (conectarse, crear tablas o cualquier otro objeto, consultar infor
mación o llevar a cabo tareas de administración, acceder al EM, etc.). La sintaxis para
conceder un permiso de sistema a un usuario, a un rol o a todo el mundo (PUBLIC,
no muy aconsejable) es:
b) Permisos sobre objetos: determinan las operaciones que un usuario podrá realizar sobre un
objeto de base de datos. Los permisos que se pueden conceder sobre los objetos son:
SELECT, INSERT, UPDATE, DELETE (para consultar, insertar, modificar o borrar
datos de tablas o vistas), ALTER (modificar la estructura), EXECUTE (ejecutar pro
cedimientos o funciones), INDEX (crear índices), REFERENCES (para definir una
clave foránea a una tabla que no es de su esquema) y ALL (todos los permisos). Al igual
que los permisos del sistema, pueden concederse con la posibilidad de que el receptor
los reasigne a otros usuarios. La sintaxis es:
Para quitar privilegios, tanto de sistema como sobre objetos, se utiliza REVOKE:
3.2.3. Roles
Los roles son conjuntos de privilegios que facilitan la asignación de permisos a los usuarios. Si
varios usuarios de base de datos tienen un comportamiento similar en cuanto a las operaciones
que pueden llevar a cabo sobre el sistema gestor, o sobre los objetos que pueden ver, en lugar
Capítulo 3
Gestión de usuarios y permisos 85
de asignar los permisos a los usuarios directamente, se crearía un rol, se asignarían los permisos
al rol, y luego se asignaría el rol a los usuarios. De esta manera, si más tarde es necesario crear
un usuario al que se asignarán los mismos permisos, solo haría falta asignarle el rol a ese usuario
y ya podría hacer exactamente lo mismo que los otros usuarios que tienen ese rol. Si hubiese
que añadir un nuevo permiso a esos usuarios, con asignárselo al rol ya se les asignaría automá
ticamente a todos ellos.
Para facilitar la administración, los sistemas gestores suelen disponer de algunos roles prede
finidos que se pueden asignar directamente a los usuarios:
a) Crear un rol:
Capítulo 3
86 Administración de sistemas gestores de bases de datos
f) Borrar un rol:
● Una serie de limitaciones de uso de los recursos del sistema a disposición de los usua
rios para impedir un uso abusivo (voluntario o no) de los mismos: sesiones por usuario,
tiempo de espera, tiempo máximo de conexión, límites de uso de CPU, límites de ac
cesos a disco, etc.
● Un conjunto de características que deben cumplir las contraseñas para garantizar su
Casi todos los sistemas gestores disponen del concepto de perfil, aunque la forma de imple
mentarlos es diferente. Suele haber dos alternativas:
1. Crear el perfil de forma similar a cómo se crean los roles y luego asignar el perfil a los
usuarios.
2. No crear el perfil como tal, sino que las limitaciones se asignan directamente a los usua
rios. Esta segunda opción permite asignar a cada usuario unas limitaciones diferentes (con
la opción anterior tendríamos que crear un perfil para cada usuario para poder aplicarle
distintas restricciones), pero es más complejo gestionar un número de usuarios elevado.
Capítulo 3
Gestión de usuarios y permisos 87
todos los permisos sobre él; pero, si los objetos se crean en otro esquem,a habrá que darle per
misos específicos al usuario para que pueda acceder a ellos.
Comprueba cómo se pueden crear usuarios externos identificados por medio del sistema operativo
siguiendo los pasos descritos en el recurso digital Usuarios externos.
3.3.1. Usuarios
En la arquitectura Multitenant de Oracle, cuando se instala la instancia de base de datos se crea
un contenedor principal (al que denomina CDB, container database) que contiene una base de
datos del sistema (CDB$ROOT) y una o varias bases de datos intercambiables (PDB, pluggable
database) donde los usuarios pueden crear sus esquemas y tablas.
CDB
Figura 3.1
Composición del contenedor principal (CDB).
Recuerda
Esta arquitectura está pensada para grandes organizaciones que necesitan disponer de dis
tintas bases de datos independientes entre sí, y su objetivo es evitar tener que crear varias
instancias de bases de datos independientes, lo que implicaría tener que repartir entre ellas
los recursos disponibles en el servidor. De esta manera, todas las PDB comparten toda la me
moria disponible y los programas de la instancia, pero cada una de ellas se puede gestionar de
manera independiente. Cada PDB tiene su propio diccionario de datos (que se guardará en el
esquema del usuario SYS existente en el PDB), y habrá un diccionario de datos global que se
guardará en el esquema del usuario SYS del CDB$ROOT.
Capítulo 3
88 Administración de sistemas gestores de bases de datos
La sintaxis básica para crear usuarios locales en un PDB es la misma que en el estándar SQL,
si bien ofrece la posibilidad de especificar numerosos parámetros adicionales de configuración
de usuarios propios de Oracle:
Donde:
Capítulo 3
Gestión de usuarios y permisos 89
– QUOTA: para que el usuario pueda escribir en un tablespace debemos asignarle una
cuota explícitamente (el hecho de que se lo asignemos por defecto no le da permiso
para escribir en él). La cuota puede ser limitada (100K, 50M…) o ilimitada UNLIMI
TED). Si no asignamos permisos al usuario en los tablespaces para que pueda escribir
al crearlo, debemos hacerlo posteriormente con un alter user:
– PROFILE: al crear el usuario podemos asignarle directamente un perfil con las restric
ciones que este tenga.
Ejemplo
Conectados a la instancia (ORCL), comprobamos el prefijo utilizado para denominar a los
usuarios comunes:
sqlplus system@ORCL
SQL> show parameter common
NAME TYPE VALUE
------------------------------ --------- -----------------------------
common_user_prefix string C##
Para crear el usuario común, será necesario añadirle ese prefijo al nombre del usuario:
SQL> CREATE USER C##comun identified by “12345” CONTAINER=ALL;
Probamos a conectarnos a una PDB con el usuario común:
SQL> conn C##comun/12345@PDBORCL
¿Sabías que...?
Los únicos usuarios comunes que no tienen C## delante son SYS y SYSTEM.
Capítulo 3
90 Administración de sistemas gestores de bases de datos
3.3.2. Permisos
Existen dos tipos de permisos en Oracle: permisos de sistema y permisos sobre objetos.
● CREATE SESSION: para iniciar sesión (un usuario sin este permiso no podrá conec
tarse al SGBD).
● UNLIMITED TABLESPACE: uso de espacio ilimitado de espacio en cualquier ta
blespace.
● CREATE, ALTER y DROP de cada tipo de objeto (cluster, context, database, link,
dimension, directory, index, materialized view, operator, outline, procedure, profile,
role, rollback segment, sequence, session, synonym, table, tablespace, trigger, type,
user, view).
● CREATE ANY, ALTER ANY y DROP ANY para cada tipo de objeto. La diferencia
con el anterior es que permiten crear, modificar o eliminar no solo los objetos de su
propio esquema sino que también podrían hacerlo en los esquemas de otros usuarios.
● SELECT ANY TABLE, UPDATE ANY TABLE, INSERT ANY TABLE: permiten
consultar, actualizar o insertar datos en cualquier tabla o vista de cualquier esquema.
Capítulo 3
Gestión de usuarios y permisos 91
Al igual que los permisos del sistema, pueden concederse con la posibilidad de que el re
ceptor lo asigne a otros usuarios. La sintaxis es:
Para quitar permisos, tanto de sistema como sobre objetos, se utiliza REVOKE:
Al igual que los usuarios se pueden crear de manera local en una PDB o de forma común
en toda la instancia, los permisos también pueden ser locales o comunes.
A los usuarios locales solamente se les pueden asignar permisos locales. A un usuario común
se le pueden asignar permisos comunes y permisos locales.
Ejemplo
Capítulo 3
92 Administración de sistemas gestores de bases de datos
3.3.3. Roles
Los roles también pueden ser locales o comunes. El funcionamiento de los roles es similar al de
los usuarios, al igual que su definición. Con un rol se pueden realizar las siguientes operaciones:
b) Asignarle permisos: la asignación de permisos sigue el mismo esquema que con los usua
rios: a un rol local se le puede asignar únicamente permisos locales, y a un rol común
se le puede asignar permisos comunes y locales. Un rol común puede tener diferentes
permisos en las diferentes PDB.
c) Quitarle permisos:
d) Asignar el rol a un usuario o a otro rol: Oracle permite asignar roles a roles y permite tam
bién que a un usuario se le pueda asignar más de un rol.
Capítulo 3
Gestión de usuarios y permisos 93
f) Borrarlo:
Al asignar roles a un usuario, los permisos que se otorguen dependerán de la PDB en que
se encuentre el usuario. Es decir:
a) A un usuario local se le puede asignar un rol común, pero únicamente “heredará” los
permisos que tenga el rol común en la PDB donde se ha definido ese usuario local.
b) A un usuario común se le puede asignar un rol local, pero únicamente “heredará” los
permisos del rol local en la PDB donde se encuentre ese rol local.
3.3.4. Perfiles
Cuando se crea un usuario, se le asigna un perfil por defecto llamado precisamente “DE
FAULT”, que no establece ningún límite al uso de los recursos.
Para aplicar restricciones sobre los recursos, es necesario habilitar previamente los perfiles
de usuario, que, por defecto, vienen deshabilitados al instalar Oracle:
Al igual que los usuarios y los roles, los perfiles pueden ser locales o comunes a toda la
instancia. Los perfiles comunes también se deben definir en el CDB$ROOT especificando
“CONTAINER=ALL” y su nombre debe estar precedido por el prefijo C##.
Los parámetros que se pueden bloquear pueden hacer referencia a recursos del sistema o a
restricciones a aplicar en la definición de contraseñas.
Capítulo 3
94 Administración de sistemas gestores de bases de datos
Para asignar un perfil a un usuario, será necesario hacer un ALTER del usuario:
Capítulo 3
Gestión de usuarios y permisos 95
Ejemplo
– Creamos el perfil
– Lo asignamos a un usuario
– Borramos el perfil
Ejemplo
conn system@pdb1
SQL> SELECT * FROM USER_USERS;
Capítulo 3
96 Administración de sistemas gestores de bases de datos
– Muestra el mismo resultado que la consulta anterior, porque como el usuario system
tiene acceso a todos los esquemas de todos los usuarios, en esta vista mostrará a todos
los usuarios existentes en PDB1:
SQL> SELECT * FROM ALL_USERS;
Las principales vistas del diccionario de datos de Oracle relacionadas con la gestión de
usuarios y permisos son las siguientes (se indican con el prefijo DBA pero cada una tendrá su
correspondiente USER_ y ALL_):
● CDB_USERS: muestra todos los usuarios del CDB, tanto los locales como los comunes.
● CDB_SYS_PRIVS y CDB_TAB_PRIVS: muestran los permisos del sistema (CDB_
SYS_PRIVS) y de objetos (CDB_TAB_PRIVS), tanto comunes como locales, defini
dos en el CDB.
● CDB_ROLES, CDB_ROLE_PRIVS: roles y permisos de roles comunes.
● CDB_PROFILES: información de los perfiles comunes.
Ejemplo
Capítulo 3
Gestión de usuarios y permisos 97
Accede al recurso digital Gestión de usuarios y permisos, donde se proponen varios ejerci-
cios para practicar la creación de usuarios, permisos, roles y perfiles en Oracle.
1. Asignar los permisos directamente sobre las tablas de la base de datos, de forma que los
usuarios podrían acceder directamente a las tablas a las que tengan permiso. Esta opción
es poco segura y muy poco flexible, ya que damos a conocer la estructura de nuestras
tablas y cualquier cambio en dicha estructura afectaría a los usuarios (si los aplicaciones
lanzan consultas del tipo “SELECT * FROM tabla”, si añadimos o quitamos un campo
de la tabla lo más probable es que las aplicaciones fallen, ya que el conjunto de resulta
dos devuelto no se ajustará a lo esperado).
2. Crear una serie de vistas específicas para cada usuario o rol y asignar permisos sobre las
vistas. Esta es la opción propuesta en la arquitectura ANSI-SPARC de base de datos,
de forma que para cada usuario o rol se crearía un esquema externo y los permisos se
asignarían a las vistas del esquema externo de cada usuario o rol. Esta opción es más
potente que la anterior ya que no solamente permite gestionar a qué tablas accede cada
usuario sino que la propia definición de la vista puede incluir restricciones por filas y
por columnas. Sin embargo, si los usuarios realmente tienen que poder acceder a todo
el contenido de las tablas, estaríamos creando un nivel de abstracción intermedio que
aporta poco y complica considerablemente el mantenimiento de la base de datos (si
cada usuario tiene sus vistas, si hay muchos usuarios será muy complicado gestionar
todas esas vistas).
La mejor solución, por tanto, suele ser buscar un equilibrio entre ambas opciones: si los
usuarios tienen acceso a las tablas completas se le suele dar permiso directamente sobre la tabla,
Capítulo 3
98 Administración de sistemas gestores de bases de datos
pero si es necesario limitar las filas o columnas que puede ver un usuario es necesario emplear
las vistas. Cada usuario tendrá, por tanto, un esquema externo que determinará a qué campos
de qué tablas del nivel conceptual podrá acceder:
Usuarios
Esquema
conceptual
tabla tabla tabla tabla
Esquema
interno
disco disco disco disco disco
Figura 3.2
Esquemas externos.
Ten en cuenta
No se deben confundir usuarios de bases de datos con usuarios de aplicación. Si una orga-
nización tiene una aplicación de gestión que usan 100 empleados, no es necesario crear
100 usuarios de bases de datos, sino un usuario que usará la aplicación para conectarse a la
base de datos y lanzar sus consultas. Los usuarios no acceden directamente al sistema gestor
para ejecutar consultas, sino que acceden a la aplicación con sus usuarios de aplicación, y
esta será quien loguee a los usuarios, gestione sus permisos, y ejecute las sentencias de bases
de datos necesarias para mostrar a cada usuario lo que necesite.
Los usuarios de bases de datos permiten establecer una conexión contra el sistema gestor,
por lo que normalmente solo es necesario un usuario de base de datos por aplicación, y usua-
rios propios para los administradores del sistema o desarrolladores que necesiten acceder al
sistema gestor para lanzar sus propias consultas.
Cuando necesitamos crear una base de datos, lo más habitual es crear al menos los siguientes
usuarios:
a) Un usuario que será el propietario de la base de datos o esquema. Este usuario tendrá
permisos para manipular toda la información de la base de datos e incluso puede tener
permisos para crear objetos de la base de datos (tablas, procedimientos, índices, etc.).
En este esquema se crearán también una serie de vistas por medio de las que se dará
posteriormente acceso al resto de usuarios (concediéndoles permisos de consulta, mo
dificación, etc., sobre las vistas).
b) Para cada usuario o aplicación que quiera acceder a los datos, se creará un nuevo usua
rio de bases de datos. El usuario propietario creará las vistas que sean necesarias para
Capítulo 3
Gestión de usuarios y permisos 99
que cada uno de estos usuarios “invitados” vea solo lo que debe ver, y les dará permisos
sobre esas vistas. En el usuario “invitado” se podrán crear sinónimos para cambiar el
nombre a las vistas si es necesario.
Aún en caso de que tengamos varios usuarios que puedan ver exactamente las mis
mas tablas, es conveniente crear un usuario para cada uno de ellos en lugar del mismo
usuario para todos ellos (para gestionar los permisos crearíamos un rol que asignaríamos
a todos los usuarios), ya que de esta manera las funciones de auditoría nos permitirían
diferenciar qué hace cada uno de los usuarios, y si todos usasen el mismo usuario no
habría forma de obtener esta información.
Ejemplo
Una empresa se dedica al mantenimiento del sistema informático de 2 clientes. La base de datos
tendrá una tabla INCIDENCIAS compuesta de los campos: "idincidencia", "idcliente", "fechaincid",
"idemp", "solucion" y "fecresol" para guardar la información de todas las incidencias registradas.
● Para gestionar sus incidencias, instala a cada uno de los clientes una aplicación por
medio de la cual pueden registrar incidencias y consultar sus propias incidencias, pero
no ver las de los demás clientes.
● En la oficina de la empresa tendrán otra aplicación en la que no podrán registrar inci-
dencias pero podrán ver y modificar las incidencias registradas por todos los clientes.
● El gerente de la empresa tendrá una aplicación de reporting que le mostrará el número
de incidencias resueltas y sin resolver al final del día, y le permitirá desglosarlas por usua-
rio, pero no le permitirá consultar los detalles de las incidencias (solución, clientes, etc.).
● Cada una de las aplicaciones de los clientes podrán crear y ver sus propias incidencias.
● La aplicación central podrá ver y modificar todas las incidencias, pero no crear nada.
● La aplicación de reporting podrá ver todas las filas de la tabla INCIDENCIAS pero no
podrá ver las columnas “SOLUCION”, “IDCLIENTE” o “FECINCID”.
Figura 3.3
Ejemplo de esquemas
externos.
Capítulo 3
100 Administración de sistemas gestores de bases de datos
3.4.1. Vistas
Una vista no es más que una consulta almacenada a la que se le asigna un nombre, por lo que
las vistas no ocupan espacio de almacenamiento (no guardan ningún dato: los datos ya están
almacenados en las tablas y únicamente se consultan).
Para restringir las filas o columnas de una o varias tablas que puede ver un usuario habrá
que definir la consulta que devuelva los datos que se quieren mostrar, y asignarle un nombre
a esa consulta (que será el nombre de la vista). Cuando un usuario ejecute una consulta sobre
la vista, lo que hará el sistema será ejecutar la consulta que corresponde a la vista, guardar los
resultados en una tabla temporal en memoria, y sobre esa tabla temporal resolverá la consulta
que se ha ejecutado sobre la vista.
Las vistas se definen siempre en el esquema propietario de los datos, y el usuario propietario
será el único que podrá redefinirlas (no tendría sentido crear una vista para limitar los datos a los
que puede acceder un usuario “invitado” y que este pueda modificar dicha vista).
Para el sistema gestor las vistas son desde un punto de vista lógico como si fueran ta
blas, y por tanto permite realizar sobre las vistas prácticamente todas las operaciones que se
pueden realizar sobre las tablas: definir consultas, asignar permisos, modificar datos (no todas
las vistas lo permiten), e incluso crear nuevas vistas por medio de consultas sobre vistas ya
existentes.
Existen tres tipos de vistas:
a) Vistas horizontales: permiten restringir las filas de la tabla a las que tendrán acceso los
usuarios (por ejemplo, que un usuario solamente pueda ver las ventas de su departa
mento).
b) Vistas verticales: permiten restringir las columnas de la tabla a las que tendrán acceso los
usuarios (por ejemplo, que un usuario tenga acceso a los datos de los empleados pero
no a su sueldo).
c) Vistas mixtas: permiten limitar el acceso horizontal y verticalmente (por ejemplo, que
un usuario tenga acceso a todos los datos de los empleados de su departamento excepto
su sueldo).
Capítulo 3
Gestión de usuarios y permisos 101
Ejemplo
– Vista horizontal:
SELECT codemp, empleado, salario, coddepto FROM empleados WHERE coddepto=2;
Figura 3.4
Ejemplo vista
horizontal.
– Vista vertical:
SELECT codemp, empleado FROM empleados;
Figura 3.5
Ejemplo vista
vertical.
– Vista mixta:
SELECT codemp, empleado FROM empleados WHERE coddepto=2;
Figura 3.6
Ejemplo vista
mixta.
Las vistas no pueden modificarse por medio de una sentencia ALTER. Para modificar una
vista, habrá que sobrescribir la consulta que tenía asociada, de ahí la cláusula [OR REPLACE]
que se puede indicar en la sentencia de creación de una vista.
Capítulo 3
102 Administración de sistemas gestores de bases de datos
¿Sabías que...?
Las vistas deberían crearse indicando siempre explícitamente los campos que debe devolver
las consultas, evitando usar el “*” en el select de las consultas. Si una aplicación consulta los
4 campos de una tabla por medio de una vista definida por medio de un “SELECT *” de esa
tabla y por cualquier motivo se añade un campo nuevo a la tabla, lo más probable es que las
aplicaciones que consulten esa vista fallen ya que cuando consultan la vista esperan que
esta devuelva únicamente 4 campos, pero se encontrarían con que devuelve 5 campos y eso
podría provocar un fallo en las aplicaciones pues las estructuras de datos donde almacenan la
información consultada se verían desbordadas.
Para eliminar una vista, se usará DROP como con cualquier otro objeto de base de datos:
3.4.2. Sinónimos
Los sinónimos son como accesos directos que permiten hacer referencia a un objeto de base de
datos (una tabla, vista o procedimiento generalmente) por medio de otro nombre.
La sentencia SQL para crear un sinónimo es la siguiente:
Al igual que sucedía con las vistas, no es posible ejecutar un ALTER sobre un sinónimo,
para modificarlo lo único que habrá que hacer es redefinirlo usando “OR REPLACE”.
Por medio de los sinónimos es posible hacer que varios usuarios usen un mismo nombre de
objeto aunque realmente estén accediendo a objetos diferentes, lo que nos proporciona varias
ventajas:
a) Seguridad: los usuarios no saben en qué esquema están los datos a los que están acce
diendo, cómo se llaman las tablas ni que campos contienen realmente.
b) Facilidad de uso: los sinónimos se crean en el esquema propio del usuario, lo que evita
hacer referencia constantemente al esquema propietario de las tablas o vistas para ac
ceder a ellas: se crea el sinónimo que apunte a la tabla o vista y el usuario lo usará para
hacer referencia a ella cuando lo necesite.
c) Homogeneidad: todos los usuarios pueden emplear un mismo nombre de objeto para
acceder a los datos, independientemente de a qué datos acceda cada uno. De esta forma,
es posible por ejemplo emplear la misma aplicación en distintas sedes de una empresa
de manera que la aplicación siempre consulte los clientes ejecutando la misma consulta:
“SELECT * FROM CLIENTE;”, pero el objeto “CLIENTE” no será una tabla, sino
que internamente será un sinónimo que en función de qué usuario lo invoque estará
Capítulo 3
Gestión de usuarios y permisos 103
haciendo referencia a distintas vistas, consiguiendo así que cada sede vea únicamente sus
clientes.
La sintaxis para la creación tanto de vistas como de sinónimos es muy similar al estándar:
Ejemplo
Supongamos una empresa con una base de datos centralizada que da servicio a varias sedes,
de forma que en cada sede podrán gestionar únicamente la información de la propia sede.
Para almacenar la información se creará un usuario propietario llamado “gestion” en cuyo
esquema se crearán todas las tablas necesarias. Todos los clientes, por ejemplo, estarán en la
tabla “gestion.CLIENTE”, y, para limitar los datos a los que pueden acceder desde cada sede,
se creará una vista para cada una de las sedes:
Capítulo 3
104 Administración de sistemas gestores de bases de datos
Cada sede tendrá su propio usuario de base de datos “invitado” (gestion_sedeX) con su
propio esquema. A cada usuario se le dará permiso de acceso a la vista que se le ha creado, y
tendrá en su esquema un sinónimo “cliente” que apuntará a la vista:
Todas las sedes usarán la misma aplicación de gestión, y la aplicación cuando consulta los
clientes lo que hace es ejecutar la consulta: “SELECT * FROM CLIENTE” independientemente
de la sede desde la que se acceda.
Para que todo funcione correctamente y desde cada sede solamente se pueda acceder a su
propia información, lo único que habrá que configurar será el usuario con el que se conecta
la aplicación desde cada sede: en la sede 1 se usará el usuario gestion_sede1, y cuando este
acceda a su objeto “cliente”, que es un sinónimo, realmente estará accediendo a la vista clien-
te_sede1 definida en el esquema “gestion”. Lo mismo sucedería para los usuarios de la sede 2
y la sede 3, y así se puede usar siempre la misma consulta para recuperar la información, pero
en función del usuario que la ejecute, la consulta devolverá una cosa u otra.
Para consultar las vistas y sinónimos en el diccionario de datos, existen tres vistas (USER_,
ALL_ y DBA_) para cada uno de ellos:
Las actividades propuestas en el recurso digital Esquemas externos permiten practicar la crea-
ción de esquemas externos en diferentes casuísticas, así como repasar la creación de usuarios, ro-
les, perfiles y asignación de los permisos necesarios para dar respuesta a las casuísticas propuestas.
Resumen
Capítulo 3
Gestión de usuarios y permisos 105
Ejercicios propuestos
Capítulo 3
106 Administración de sistemas gestores de bases de datos
5. Has creado un nuevo usuario pero no puede conectarse al sistema gestor. ¿Cuál de las
siguientes opciones le permitiría hacerlo?
6. ¿Qué ocurre si intento eliminar un usuario que tiene una sesión iniciada?
Capítulo 3
Gestión de usuarios y permisos 107
●
SEDE: en este fichero se guarda la información de las sedes de tu empresa: código
de sede, nombre, dirección y el código del empleado que es jefe de la sede.
● CARGO: fichero donde se registran los distintos cargos existentes: código de car-
go, su descripción y la bonificación que implica para el empleado el desempeño
de dicho cargo.
● PERSONAL: almacena la información del personal de la empresa: código de em-
pleado, nombre, apellidos, dirección, DNI, código postal, sueldo base, código de
sede a la que está asociado, código del cargo que ocupa y fecha de contratación.
● NOMINAS: fichero donde se almacenan las nóminas pagadas a los empleados.
Contiene los campos: "código de empleado", "código de sede", "mes", "importe" y
"retención".
– Una aplicación de escritorio que emplearán los responsables de gestionar las nó-
minas para realizar los pagos de cada mes.
– Una aplicación web a través de la que los propios empleados pueden acceder y
consultar sus nóminas.
– Una aplicación para móvil que los empleados podrán usar del mismo modo que
la página web.
– Un módulo de análisis que lee la información registrada en la base de datos por
parte de los tres sistemas anteriores y la guarda en su propia base de datos de forma
que facilite la elaboración de informes por parte de los gerentes de la organización.
a) Crea los usuarios y roles que consideres necesarios, y asígnales a todos ellos el
tablespace TBS_NOMINAS.
b) Asigna los permisos del sistema y cuotas que garanticen que:
Capítulo 3
108 Administración de sistemas gestores de bases de datos
c) Crea las vistas y asigna los permisos necesarios para asegurar que:
●
Los empleados que utilicen la aplicación de escritorio puedan ver y modificar
todo, excepto el sueldo base de los empleados y las bonificaciones que co-
rresponden a cada cargo.
● Desde la aplicación web y la aplicación móvil se tenga acceso y se pueda
modificar la información personal de los empleados: nombre, apellidos, di-
rección, DNI y código postal, pero que no se pueda eliminar ninguna infor-
mación de la base de datos.
● La aplicación de análisis pueda acceder a toda la información de todas las
tablas pero solo para lectura.
● Los miembros del equipo de soporte puedan consultar y manipular la infor-
mación de cualquier tabla de la base de datos.
d) Crea los sinónimos que sean necesarios en cada esquema para que puedan hacer
referencia de forma homogénea a las tablas de la base de datos.
e) Habilita los perfiles de usuario y crea un perfil que garantice las siguientes restric-
ciones:
Capítulo 3
Gestión de usuarios y permisos 109
Actividades de autoevaluación
1. Para que los usuarios de una sede de la empresa no puedan ver todos los campos
de la tabla empleados y solo vean los empleados de la propia sede, tendré que
usar:
a) Revoke.
b) Perfiles.
c) Una vista vertical.
d) Una vista mixta.
Capítulo 3
110 Administración de sistemas gestores de bases de datos
10. Necesito crear un esquema con varias tablas y darle acceso a cuatro aplicaciones que
tendrán exactamente los mismos permisos. ¿Qué tendré que crear?
a) Cuatro perfiles.
b) Dos roles.
c) Cinco usuarios.
d) Todas las respuestas anteriores son correctas.
a b c
1. d 5.
a b c d
a b c
2. a b c d 9.
d 6. a b c d
a b c
3. a b c d 10.
d 7. a b c d
a b c
4. a b c d
d 8.
Capítulo 3
4
Seguridad
Objetivos
3 Establecer los mecanismos básicos de seguridad que permitan garantizar la
integridad y confidencialidad del sistema gestor.
3 Conocer el funcionamiento de las herramientas existentes para garantizar la
seguridad del sistema.
3 Tomar conciencia de la importancia de establecer políticas y procedimien-
tos de copia de seguridad y restauración.
3 Comprender el papel que desempeñan las distintas herramientas del sistema
gestor de base de datos para garantizar las medidas impuestas por la norma-
tiva de protección de datos.
112 Administración de sistemas gestores de bases de datos
Mapa conceptual
Auditoría
Encriptación Funciones
Encriptación transparente
Restricciones
Recuperación Backup
Restauración
Recuperación
Control de concurrencia
realiza Funciones
Puesta en marcha
Seguridad Encriptación
Auditoría
Recuperación
Protección de datos
Explotación
Administración
Capítulo 4
Seguridad 113
Glosario
4.1. Introducción
En cualquier sistema de base de datos, será necesario asegurar tanto la confidencialidad de la
información como la integridad de la información almacenada, para evitar la corrupción de
la información o la aparición de inconsistencias.
En los sistemas multiusuario, además de asegurar que cada usuario acceda únicamente a la
información a la que tiene permiso, será necesario garantizar que no se produzcan errores de-
bido al acceso simultáneo de varios usuarios.
Existen dos tipos de políticas que debe llevar a cabo el administrador de base de datos para
garantizar la seguridad:
● Políticas activas: tareas que se implementan de manera proactiva para evitar fallos en el
funcionamiento del SGBD.
● Políticas pasivas: se aplican de manera reactiva en ocasiones en que las políticas activas no
han alcanzado su propósito, y tratan de detectar la causa de los fallos, una vez que estos
son irremediables.
Capítulo 4
114 Administración de sistemas gestores de bases de datos
Las principales áreas de trabajo para garantizar la seguridad de los datos son la confidencia-
lidad y la integridad.
b) Garantizar la integridad consiste en asegurar que los datos reflejen la realidad de manera
correcta y completa, cumpliendo las reglas y restricciones definidas en el diseño de la
base de datos. Para garantizar la integridad de los datos, es fundamental partir de un
diseño adecuado (normalizado), ya que eso evitará posibles anomalías en la inserción,
modificación o borrado de información. Por su parte, el sistema gestor dispone de va-
rias herramientas que permiten mantener la integridad de la información:
4.2. Confidencialidad
Además de la gestión de usuarios y permisos y la definición de esquemas externos, existen otras
medidas que se pueden llevar a cabo para garantizar la confidencialidad de la información: la
encriptación y la auditoría.
4.2.1. Encriptación
Por medio de los sistemas de gestión de usuarios y permisos y la definición de vistas, se garantiza
que los usuarios no accedan incorrectamente a la información a través del sistema gestor de base
de datos, pero esto no garantiza que no puedan acceder a las estructuras de almacenamiento del
sistema operativo donde se almacenan los datos.
Hay casos también en que es necesario restringir el acceso a datos concretos de una tabla
para determinados usuarios, aunque estos tengan acceso a la tabla.
Para proteger estos accesos, los sistemas gestores de bases de datos implementan herramien-
tas de encriptación que permiten que la información se guarde de forma cifrada (por medio de
algoritmos como RSA o AES) y solamente se pueda desencriptar accediendo a ella a través
de las herramientas que proporciona el sistema gestor.
Existen dos maneras de cifrar la información:
Capítulo 4
Seguridad 115
La mayoría de sistemas gestores están desarrollados por medio de una arquitectura cliente/
servidor, de modo que los clientes acceden a los datos alojados en el servidor a través de una
red. Para garantizar la confidencialidad de estas comunicaciones, la mayoría de sistemas gestores
multiusuario permite también asegurar las comunicaciones a través de la red estableciendo co-
municaciones por medio de protocolos seguros como SSL.
Capítulo 4
116 Administración de sistemas gestores de bases de datos
Ten en cuenta
La encriptación transparente no permite cifrar la información para unos usuarios pero no para
otros: siempre que accedan a través del sistema gestor, los usuarios podrán consultar los datos,
pero si intentan acceder directamente a través del sistema operativo o con cualquier otra
herramienta, no los podrán ver ya que estarán cifrados.
Para encriptar y desencriptar los datos se utiliza una clave de encriptación y un algorit-
mo (normalmente AES, pero pueden ser otros) que utilizará el sistema gestor para encriptar y
desencriptar los datos de forma transparente para el usuario. En caso de que fuese necesario
migrar la base de datos a otro servidor, sería imprescindible copiar también la clave de encrip-
tación para poder acceder a los datos en el nuevo servidor.
Todos estos mecanismos de encriptación se complementan entre ellos, ya que cada uno
de ellos tiene una funcionalidad. Accede al recuso digital Tipos de encriptación,
donde se plantean distintos casos prácticos, en los que habrá que elegir el tipo de encrip-
tación más adecuado para cada uno de ellos.
4.2.2. Auditoría
La auditoría de la base de datos consiste en guardar registro de las operaciones llevadas a cabo
por los usuarios en el sistema gestor, lo que permite al administrador de la base de datos conocer
detalles acerca del uso que se hace de la base de datos por parte de los usuarios.
Es una medida de seguridad pasiva ya que normalmente se recurre a ella en casos en que
se ha registrado un acceso o una operación inadecuada y es necesario comprobar quién fue el
responsable de dicho acceso o cual fue la operación que generó el error. La funcionalidad de
la auditoría no es evitar ese acceso u operación inadecuados, sino diagnosticar lo sucedido para
poder tomar las medidas oportunas.
Por medio de la auditoría es posible detectar varios tipos de anomalías, como por ejemplo:
– Accesos no autorizados al sistema, realizados por usuarios que no deberían tener acceso
o en horas anómalas.
– Ataques de desbordamiento de memoria (buffer overflow), basados en pasar como en-
trada a un programa más datos de los que espera recibir, lo que podría permitir al ata-
cante escribir en una zona de memoria más allá de la reservada.
– Inyección de Código SQL, ataque que consiste en incorporar en el código ejecutado
por las aplicaciones que acceden a la base de datos comandos no autorizados.
Capítulo 4
Seguridad 117
La información de auditoría se puede guardar tanto en ficheros como en tablas del dic-
cionario de datos del propio sistema gestor. Si se almacena la información en el diccionario de
datos, cualquier acceso a un objeto auditado se guardaría como una fila en una tabla, lo que
facilita considerablemente la consulta y revisión de la información auditada pero implica mayor
carga para el sistema gestor y un consumo de espacio considerable si la política de auditoría es
muy restrictiva, por lo que se deberían limitar los objetos auditados para no comprometer los
recursos del sistema.
Toma nota
4.3.1. Encriptación
Los datos almacenados en el servidor Oracle pueden ser encriptados utilizando explícitamente
funciones para cifrarlos y descifrarlos, o puede delegarse esta tarea en el servidor, que dispone de
una herramienta cuya función es encriptar y desencriptar la información almacenada de forma
transparente al usuario: TDE: (Transparent Data Encryption).
Capítulo 4
118 Administración de sistemas gestores de bases de datos
almacenar de manera conjunta una serie de funciones, procedimientos y constantes que tienen una
funcionalidad común.Todos los paquetes del sistema se almacenan en el diccionario de datos, por
lo que se puede acceder a ellos consultando los paquetes definidos en el esquema del usuario SYS.
Figura 4.1
Paquetes del diccionario
de datos.
1. Encrypt: permite encriptar un texto (de tipo CLOB) que podrá ser desencriptado por me-
dio de la función decrypt. La encriptación se puede llevar a cabo empleando varios modos
de cifrado (ECB, CBC, CFB o OFB), que básicamente difieren en el modo en que aplican
la clave de cifrado y el vector de inicialización (si lo hay) sobre el mensaje original.
DBMS_CRYPTO.ENCRYPT(
dst IN OUT NOCOPY BLOB, -- destino
src IN CLOB CHARACTER SET ANY_CS, -- texto a encriptar
typ IN PLS_INTEGER, -- modo de encriptación
key IN RAW, -- clave de cifrado
iv IN RAW DEFAULT NULL); -- vector de inicialización
DBMS_CRYPTO.DECRYPT(
dst IN OUT NOCOPY BLOB, -- destino
src IN BLOB, -- texto a desencriptar
typ IN PLS_INTEGER, -- modo de encriptación
key IN RAW, -- clave de cifrado
iv IN RAW DEFAULT NULL); -- vector de inicialización
3. Hash: se utiliza para calcular un hash que no podrá ser desencriptado. Se puede aplicar
sobre variables de tipo RAW (tipo binario de longitud fija), BLOB (un objeto binario)
o CLOB (un objeto expresado en forma de caracteres de 1 byte).
Capítulo 4
Seguridad 119
DBMS_CRYPTO.Hash (
src IN RAW, -- texto a encriptar
typ IN PLS_INTEGER) -- tipo de algoritmo utilizado
RETURN RAW;
4. MAC: se utiliza para calcular un hash pero pasándole una clave de encriptación. Al igual
que en el caso anterior, se puede aplicar sobre variables de tipo BLOB, RAW o CLOB.
DBMS_CRYPTO.MAC (
src IN RAW, -- texto a encriptar
typ IN PLS_INTEGER, -- tipo de algoritmo usado
key IN RAW) -- clave de encriptación
RETURN RAW;
encripta
desencripta
Master
Listener key
Cliente Keystore
Base de datos
Figura 4.2
Encriptación transparente.
TDE permite utilizar diferentes algoritmos para cifrar la información. Para ello emplea una
clave de cifrado maestra (Master Encryption Key) formada por un par de claves publica/privada
o certificados digitales, que se guardan en un almacén de claves al que denomina Wallet (en las
versiones 11g y anteriores) o Keystore (a partir de la 12c), que no es más que un fichero para
almacenar claves.
El keystore puede abrirse o cerrarse, por lo que si en algún momento queremos denegar el
acceso a la información a los usuarios, no tenemos más que cerrar el keystore (si está cerrado
no se puede acceder a las claves y, por tanto, no se puede descifrar la información).
Capítulo 4
120 Administración de sistemas gestores de bases de datos
1. Crear un keystore para almacenar las credenciales: Los almacenes de claves se gestionan
siempre desde la instancia (ORCL), y es necesario hacerlo siempre con un usuario co-
nectado con rol de DBA. Hay dos tipos de keystores:
Para crear un keystore basado en password, debemos realizar las siguientes operaciones:
a) Crear el keystore:
b) Abrir el keystore:
De esta manera se crea el keystore y se abre en todas las PDB, pero todavía no tiene
una master key para cifrar y descifrar la información, por lo que al consultar su estado
a través de la vista V$ENCRYPTION_WALLET veremos que su estado es “OPEN_
NO_MASTER_KEY”:
c) Crear la master key: Al igual que sucede con el keystore, la master key se debe crear
en la instancia (ORCL) usando un usuario con rol DBA, y, para que pueda utilizarse en
todas las PDB, será necesario indicar “CONTAINER=ALL”:
SQL> ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password WITH BAC-
KUP CONTAINER=ALL;
Capítulo 4
Seguridad 121
d) El problema de estos almacenes de claves basados en password es que cada vez que se
reinicia la instancia es necesario abrirlos explícitamente. Para evitarlo es posible crear
un keystore de auto login, que lo único que hace es abrir automáticamente el keystore
basado en password cuando este se cierra. Para crear un keystore de auto login, habría
que ejecutar, también en la instancia ORCL, las siguientes operaciones:
4.3.2. Auditoría
La activación de la auditoría en Oracle viene definida por el valor del parámetro: “audit_trail”.
Consultando la vista que muestra los parámetros de la instancia se puede comprobar si la audi-
toría de la base de datos está activada:
SQL> select name, value from v$parameter where name like ‘audit_trail’;
Este parámetro puede tomar varios valores, pero los más usuales son:
Capítulo 4
122 Administración de sistemas gestores de bases de datos
Para activar o desactivar la auditoría, solamente habrá que cambiar el valor del parámetro:
1. Auditorías de inicio de sesión: audita los intentos de conexión con la base de datos. Las
acciones auditadas pueden limitarse a un usuario concreto o a un resultado concreto (si
el acceso ha sido correcto o incorrecto).
2. Auditorías de acción: permiten auditar cualquier acción que afecte a un tipo de objeto
de la base de datos (tablas, enlaces de base de datos, tablespaces, sinónimos, usuarios,
índices, etc.). Las posibles acciones que pueden auditarse (create, alter, drop) sobre estos
tipos de objetos pueden agruparse para simplificar la cantidad de esfuerzo administrati-
vo necesario para determinar y mantener las opciones de configuración de la auditoría.
Capítulo 4
Seguridad 123
Cuando se habilita esta auditoría también es posible limitar las operaciones que se
registrarán o el usuario sobre el que se actuará
¿Sabías que...?
Hasta la versión 11g de Oracle, el comando audit permitía registrar las operacio-
nes por sesión o por acceso. A partir de esa versión, sigue permitiendo indicar
“BY ACCESS” o “BY SESSION” al ejecutar el comando pero independientemente
de la opción que se indique siempre registra las acciones por acceso.
3. Auditorías de objeto: audita las acciones de manipulación de datos sobre objetos concre-
tos. Se pueden auditar operaciones de select, insert, update y delete sobre tablas o vistas
y las ejecuciones (execute) de procedimientos y funciones. Este tipo de auditoría no se
puede restringir a usuarios determinados como las dos anteriores.
El comando noaudit se utiliza para detener el registro de la auditoría que se había activado
previamente con la instrucción audit. Tiene exactamente la misma sintaxis que audit, con las
mismas opciones en función del tipo de auditoría que se quiera detener.
Ten en cuenta
Capítulo 4
124 Administración de sistemas gestores de bases de datos
Cuando se crea una regla, es necesario indicar a qué objeto estará asociada (una tabla o vista)
y qué condición disparará los eventos de auditoría (por ejemplo, auditar los accesos a una tabla
que se realicen entre las 6 PM y 6 AM de los sábados y domingos, que utilicen una dirección
IP desde fuera de la red corporativa, que actualicen una columna concreta, o que usen un valor
concreto para esa columna).
FGA admite todas las combinaciones de ‘select’,‘insert’,‘update’,‘delete’, condiciones ‘whe-
re’ o selección de una o varias columnas en particular. Solo se generarán registros de auditoria
cuando se cumplan estas condiciones, todas o alguna de ellas, según se desee.
Para guardar un registro cada vez que un usuario acceda simultáneamente a las columnas
SALARIO y DNI de los empleados de un departamento concreto que tienen comisión, ten-
dríamos que crear una regla como la siguiente:
execute dbms_fga.add_policy(
object_schema=>’RRHH’,
object_name=> ‘EMPLEADOS’,
policy_name=> ‘chk_rrhh_empleados’,
audit_condition => ‘ID_DEPTO = 50 and COMISION > 0’,
audit_column => ‘DNI,SALARIO’,
enable => TRUE,
statement_types => ‘INSERT, UPDATE, SELECT, DELETE’,
audit_trail => DBMS_FGA.DB,
audit_column_opts => dbms_fga.all_columns);
Donde:
Para dejar de aplicar una regla de auditoría, se puede borrar la regla directamente (DBMS.
FGA.DROP_POLICY), o bien deshabilitarla (DBMS_FGA.DISABLE_POLICY), lo que
permitiría volver a habilitarla posteriormente (DBMS_FGA.ENABLE_POLICY):
execute DBMS_FGA.DROP_POLICY(
object_schema => ‘HR’,
object_name => ‘EMPLOYEES’,
policy_name => ‘ck_au_employees’);
Capítulo 4
Seguridad 125
Una vez creada la regla, se podría habilitar o deshabilitar utilizando audit y noaudit.
Para consultar las reglas de auditoría unificada existentes, se pueden utilizas las vistas:
Capítulo 4
126 Administración de sistemas gestores de bases de datos
Figura 4.3
Resumen
auditoría de
Oracle.
4.4. Integridad
Tal y como se indicó anteriormente, fundamentalmente existen cuatro funcionalidades que
permiten garantizar la integridad de la información almacenada en el sistema gestor: la defini-
ción de restricciones, los mecanismos de control de concurrencia y de control de transacciones
y la realización de copias de seguridad.
4.4.1. Restricciones
Los sistemas gestores proporcionan herramientas para definir restricciones sobre las tablas o las
columnas, para garantizar la integridad de los datos almacenados.
En los sistemas relacionales, hay varias restricciones que son inherentes al modelo:
Normalmente, los sistemas gestores permiten definir restricciones adicionales, que pueden
aplicarse sobre uno o varios campos de una tabla, e incluso existen restricciones que permiten
realizar verificaciones sobre los datos de más de una tabla. Los principales tipos de restricciones
existentes son los siguientes.
Capítulo 4
Seguridad 127
Cuadro 4.1
Principales restricciones
De nulidad Asegura que los valores insertados en un atributo o conjunto de atributos no toman
valores nulos.
De unicidad Asegura que los valores insertados en un atributo o conjunto de atributos no se
repiten.
Valor por Aplicable a una columna, permite asignar un valor por defecto que se asignará a la
defecto columna en caso de que no se indique el valor del campo en una inserción.
De clave Aplicable a una o varias columnas de una tabla, asegura que los valores insertados
primaria en esa combinación de atributos cumplen las restricciones de unicidad y de nulidad.
De clave Un atributo o conjunto de atributos definidos como clave foránea hacen referencia a
foránea la clave primaria en otra tabla, y esta restricción garantiza que solamente se puedan
asignar valores a los atributos de la clave foránea que existan en la clave primaria. La
restricción de clave foránea también permite indicar la operación a llevar a cabo en la
clave foránea en caso de modificación o borrado de su clave principal asociada: trasla-
dar el cambio o eliminación a la clave foránea, impedir el cambio o eliminación de la
clave principal, asignar un valor nulo a la clave foránea o ponerle un valor por defecto.
De Permite establecer una condición que se comprobará cada vez que se modifique
comprobación una columna o conjunto de columnas de una tabla, impidiendo realizar la modifi-
cación si no se cumple la condición.
Disparadores Los disparadores permiten definir acciones que se ejecutarán antes o después de
hacer modificaciones en una tabla.
En ocasiones es necesario deshabilitar las restricciones en el sistema gestor para realizar deter-
minadas tareas, por lo que los sistemas gestores proporcionan mecanismos que permiten desha
bilitar las restricciones: algunos permiten deshabilitar solo restricciones concretas y otros obligan
a deshabilitar todas las restricciones existentes (no permiten deshabilitar unas sí y otras no).
Ejemplo
Figura 4.4
Ejemplo de restricciones.
Capítulo 4
128 Administración de sistemas gestores de bases de datos
En el campo “codjefe” de la tabla departamento definimos también una foreign key “FK_
DEPTO_JEFE” que valide que el jefe que asigne a un departamento exista en la tabla de em-
pleados, y asigno una restricción “NOT NULL” para que no pueda haber departamentos sin
jefe asignado.
Si acabamos de crear la base de datos y las tablas están vacías, y queremos comenzar a
insertar datos en ambas tablas:
La solución en este caso pasaría por deshabilitar las restricciones que generan los proble-
mas, hacer la inserción, y luego habilitarlas de nuevo:
Ten en cuenta
Una transacción se define como una unidad lógica de tratamiento (conjunto de órdenes) que
aplicada a un estado consistente de la base de datos la deja, de nuevo, en un estado consistente,
después de hacer las modificaciones. La gestión de transacciones debe asegurar que una transac-
ción solo se pueda ejecutar completamente o ser anulada.
Para implementar el control de transacciones, los sistemas gestores proveen de un lenguaje
de control de transacciones (TCL). Este lenguaje es muy sencillo, ya que solamente permite dos
operaciones: commit y rollback. Cada operación de inserción, modificación o borrado que se
realiza en la base de datos da origen a una transacción, y su final vendrá marcado por una de
esas dos sentencias:
Capítulo 4
Seguridad 129
● rollback se ejecuta cuando se ha producido algún error, y deshace los cambios realizados
desde que dio comienzo la transacción.
Una transacción puede estar compuesta por varias operaciones y tardar un tiempo con-
siderable en completarse, por lo que los sistemas gestores requieren de un sistema de control
de concurrencia que permita el acceso simultáneo a los datos por parte de los usuarios y ase-
gure que las operaciones que se ejecutan concurrentemente produzcan el mismo resultado
final que si estos accediesen secuencialmente (uno a continuación de otro). El objetivo del
sistema de control de concurrencia es garantizar la consistencia de los datos almacenados
en la base de datos.
Cuando varias transacciones se ejecutan de forma concurrente (simultáneamente) y acce-
den a los mismos datos, pueden producirse tres tipos de problemas:
1. Lectura sucia (dirty read): se produce cuando una transacción lee datos modificados por
otra transacción que todavía no ha sido comitada.
Figura 4.5
Ejemplo de lectura sucia.
Figura 4.6
Ejemplo de lectura no repetible.
3. Lectura fantasma (phantom read): se produce cuando una transacción lee unos datos que
no existían cuando se inició la transacción.
Capítulo 4
130 Administración de sistemas gestores de bases de datos
Figura 4.7
Ejemplo de lectura fantasma.
La forma más habitual de solucionar estos problemas es empleando bloqueos. Los bloqueos
se producen cuando una transacción realiza una lectura o escritura en una tabla, y su función es
impedir el acceso a esa tabla para el resto de transacciones hasta que no finalice la transacción
que generó el bloqueo.
Hay sistemas gestores que permiten definir distintas granularidades de bloqueo: pueden
bloquear una tabla completa, un datafile, una partición o solamente las filas concretas que se va-
yan a actualizar. Con esto se consigue que el número de transacciones afectadas por los bloqueos
sea mucho menor, con lo cual pueden optimizar la ejecución en paralelo de las transacciones.
¿Sabías que...?
La granularidad del bloqueo en MySQL se realiza a nivel de tabla. Esto impide que se puedan
realizar operaciones como modificar los datos de una tabla que a su vez tienes que consultar
para obtener los datos a asignar. Por ejemplo, si queremos asignar a todos los empleados el
mismo salario, y el salario que se ha de asignar es la media de todos los salarios de la tabla,
tendríamos que ejecutar la sentencia:
Uno de los problemas de los bloqueos es que pueden dar lugar a interbloqueos (deadlock).
Un interbloqueo se produce cuando una transacción bloquea un elemento que requiere otra
transacción que a su vez está bloqueando otro elemento que necesita la transacción inicial. Am-
bas transacciones quedarían a la espera de que la otra transacción finalice y libere su bloqueo,
pero como ambas están bloqueadas nunca finalizarán. Esto supone un gran problema ya que
las transacciones quedarían en espera indefinida y además estarían bloqueando cualquier otra
transacción que quisiese hacer uso de los mismos recursos.
Existen dos mecanismos para evitar el interbloqueo:
● Prevenirlo: obligando a que las transacciones bloqueen todos los elementos que necesitan
por adelantado, antes de empezar a ejecutarse.
Capítulo 4
Seguridad 131
Figura 4.8
Ejemplo de interbloqueo.
Capítulo 4
132 Administración de sistemas gestores de bases de datos
Figura 4.9
Niveles de
aislamiento.
1. Establecer el nivel de aislamiento que sea más adecuado al uso que se realizará de la base
de datos.
2. Optimizar la distribución de los datos de las tablas para evitar los bloqueos en la medida
de lo posible. La forma en que se distribuyen los datos de una tabla afecta a los bloqueos
que se realizan sobre esa tabla: supongamos que tenemos una tabla de ventas donde se
guardan las ventas realizadas por internet, por aplicación móvil y en tienda física de for-
ma conjunta. Cuando es necesario realizar una modificación que afecte a varias ventas
realizadas en tienda, se bloqueará toda la tabla, impidiendo realizar ventas tanto presen-
ciales como remotas. Si modifico la forma de almacenar la información (particionar la
tabla en función del tipo de venta y guardar cada partición en un tablespace diferente,
por ejemplo), podría limitar el bloqueo de la tabla únicamente a la partición o el fichero
de las ventas en tienda, pudiendo trabajar normalmente el resto de aplicaciones.
3. Monitorizar que no se produzcan interbloqueos y eliminar las sesiones que lo hayan
producido. Hay sistemas que ya se encargan de realizar estas tareas, pero si no es así se
puede establecer una alerta que avise cuando se produzcan este tipo de situaciones para
tomar las medidas adecuadas.
4.4.3. Recuperación
Uno de los requisitos fundamentales de los sistemas gestores de bases de datos es garantizar la
disponibilidad de la información y la recuperación ante fallos, por lo que casi todos ellos in-
corporan herramientas que permiten efectuar copias de los contenidos de una base de datos.
Existen dos mecanismos básicos de restauración para garantizar la posibilidad de recuperar
la información en caso de fallo:
Capítulo 4
Seguridad 133
1. Backup: guardar una copia de los ficheros de la base de datos en un medio de almace-
namiento externo.
2. Restore: recuperación de los datos de la base de datos a partir de los ficheros del sistema
de almacenamiento externo.
3. Recovery: para recuperar el estado anterior a un fallo no solo es necesario recuperar
la última copia disponible sino que también será necesario recuperar la información
almacenada en los ficheros del cuaderno de bitácora y ejecutar de nuevo todas las ins-
trucciones que hicieron modificaciones en los datos tras la última copia de seguridad.
En caso de un fallo general del sistema gestor que provocase una pérdida de información, el
procedimiento que se habría de seguir para recuperarla consistiría en restaurar en primer lugar la
última copia de seguridad disponible, y utilizar el diario de transacciones para recuperar y volver
a ejecutar todas las operaciones llevadas a cabo desde la realización de esa copia de seguridad.
Las tareas del administrador de la base de datos en relación con la recuperación de infor-
mación serán:
a) Totales o parciales: una copia total de la base de datos incluye todos sus objetos, archivos
de datos, de control, cuaderno de bitácora, ficheros de configuración, etc. Una copia
parcial permite especificar los objetos o ficheros concretos que se quieren incluir en la
copia, y no está sincronizada con la base de datos (es una copia puntual de una parte de
la base de datos, que se suele usar para trasladar datos a otro sistema gestor).
b) Lógicas o físicas: una copia de seguridad lógica permite guardar objetos de la base de
datos (tablas, índices, etc.), mientras que una copia física almacena componentes físicos:
tablespaces, archivos de datos o bloques. Tanto una como otra permiten guardar copias
de la base de datos completa, solo que uno guardará objetos lógicos y otro guardará los
bloques físicos de esa base de datos.
c) Completos o incrementales: un backup completo de una base de datos contiene una copia
de la base de datos o de una parte de esta en un momento concreto. El backup incre-
mental permite almacenar únicamente los cambios que se han producido o que se han
añadido después de un backup completo. Este tipo de copias ocupan mucho menos
Capítulo 4
134 Administración de sistemas gestores de bases de datos
tamaño y son significativamente más rápidas, pero, para restaurar una base de datos de la
que se hayan realizado copias incrementales, es necesario restaurar en primer lugar
la última copia completa que se haya realizado, y a continuación todas las copias incre-
mentales realizadas desde entonces, por lo que el proceso de restauración es más lento.
Normalmente las copias incrementales solo se pueden realizar cuando se trabaja
con copias físicas.
d) Online u offline: una copia offline es la que se hace cuando la base de datos está cerrada,
mientras que la copia online se puede realizar mientras la base de datos está trabajando.
Las copias offline permiten realizar copias consistentes de la base de datos (que incluyen
todos los cambios que se han realizado hasta ese momento en la base de datos). Aunque el
proceso de recuperación es más sencillo cuando la copia de seguridad es consistente, tiene
la desventaja de que hay que parar y cerrar la base de datos para realizarla, lo que no es
posible en sistemas 24 x 7, por lo que en estos casos es necesario implementar algún pro-
ceso de copia más complejo que permita realizar los backups en caliente (online), como
la copia en espejo (mirroring) o los BCV (que permiten realizar una copia de la base
de datos que puede ser actualizada sencuencialmente por medio de la replicación de las
operaciones registradas en el cuaderno de bitácora), o realizar copias de seguridad incon-
sistentes que incluyan toda la información registrada en el cuaderno de bitácora.
4.5.1. Restricciones
Las restricciones en Oracle se definen cuando se crea la tabla, y se pueden modificar por medio
de un alter table. Pueden ser de varios tipos:
Cuadro 4.2
Restricciones habituales en Oracle
NOT NULL La columna no permitirá valores nulos.
DEFAULT [valor] La columna tendrá un valor por defecto. El SBGD utiliza este valor cuando no se
especifica un valor para dicha columna al insertar una fila nueva.
PRIMARY KEY Permite indicar que esta columna o columnas constituyen la clave primaria.
FOREIGN KEY Es la manera de indicar que este campo es una clave foránea (foreign key)
y hace referencia a la clave primaria de otra tabla.
UNIQUE Obliga a que los valores de una o varias columnas tomen valores únicos (no puede
haber dos filas con igual valor en esos campos). Internamente se implementa
creando un índice para dicha(s) columna(s) que no puede tomar valores repetidos.
CHECK Permite indicar una condición que debe de cumplir esa columna. Se suele
(condición) utilizar para restringir los posibles valores que se pueden asignar a una variable.
Capítulo 4
Seguridad 135
Las restricciones definidas sobre cada tabla se pueden consultar por medio de la vista DBA_
CONSTRAINTS (o sus vistas user_ y all_ correspondientes).
El nivel de aislamiento se puede modificar para una transacción concreta o para una sesión,
modificando el parámetro de configuración “isolation_level”:
¿Sabías que...?
Oracle utiliza grafos de esperas para detectar interbloqueos entre transacciones y cuando de-
tecta un interbloqueo aborta la transacción que más tarde se inició.
Capítulo 4
136 Administración de sistemas gestores de bases de datos
Tanto el EM como el SQL Developer permiten también hacer copias de seguridad em-
pleando una interfaz gráfica, pero lo que hacen internamente es emplear una de las herra-
mientas anteriores para realizar la copia.
Figura 4.10
Herramientas de copia de seguridad en Oracle.
A) Export/import
Los comandos exp e imp son las herramientas proporcionadas por Oracle desde sus prime-
ras versiones para la realización de backups lógicos de la base de datos. Permiten realizar copias
totales o parciales, completas y offline u online, aunque si se hace de manera online la tabla se
bloquea mientras dura la exportación.
Para crear el fichero de backup se utiliza el comando exp y para importar el contenido y
restaurar la base de datos se utiliza el comando imp.
Este tipo de backup se utiliza habitualmente en los siguientes casos:
● Para hacer copias en un equipo local (si un usuario no tiene acceso al servidor, esta será
la única opción que podrá emplear para hacer una copia de sus datos).
● Para realizar copias de bases de datos pequeñas.
● Para corregir problemas de fragmentación como “Row Migration” y “Row Chaining”
(veremos en el capítulo 6 en qué consisten).
● Para “migrar” una base de datos a otro servidor.
Estos comandos se utilizan desde el interfaz de comandos del sistema operativo, y aceptan
varios parámetros: las tablas a importar/exportar, el esquema origen, el esquema destino, las
condiciones que deben cumplir las filas exportadas… Con la opción “-help” se pueden consul-
tar todos los parámetros existentes tanto para exportar como para importar:
exp -help
imp -help
Capítulo 4
Seguridad 137
Ejemplo
Accede al recurso digital Copias de seguridad exp, con el que podrás practicar la realización
y restauración de diversas copias de seguridad empleando las herramientas exp e imp.
Capítulo 4
138 Administración de sistemas gestores de bases de datos
Ejemplo
Capítulo 4
Seguridad 139
C) RMAN
RMAN (Oracle Recovey Manager) es una herramienta de copia de seguridad a nivel físi-
co que permite realizar backups incrementales solo de los bloques de datos que han cambiado
desde la última copia realizada. RMAN permite realizar copias incrementales de bases de datos
completas, tablespaces o datafiles.
Lo que distingue a RMAN de cualquier otro método es que los respaldos son a nivel de
bloque de datos, a diferencia de los respaldos gestionados por el usuario, y esto trae grandes
ventajas, ya que no requiere respaldar bloques vacíos, elimina la corrupción en los respaldos y
permite maximizar la compresión al hacerlo.
Además, esta copia se puede hacer de forma online, por lo que permite mantener un servi-
dor de backup que se actualiza periódicamente a partir del servidor principal y en caso de fallo
podría restablecerse rápidamente el servicio pasando a trabajar sobre el servidor de respaldo
(recuperando previamente todas las operaciones de los archivos de redo del servidor principal
que se hubiesen realizado desde la última sincronización).
Cuando se utiliza RMAN para realizar réplicas, lo que hace es leer todas las operaciones
almacenadas en los ficheros de REDO LOG (el cuaderno de bitácora) y enviarlas a la copia de
respaldo para ejecutarlas allí. Los archivos de redo log tienen el problema de que son cíclicos, y
cuando se llenan los tres se borra el contenido del primero y se reescribe sobre él. Para evitar este
problema, RMAN obliga a tener la base de datos en modo ARCHIVE LOG, de modo que antes
de reescribir un fichero de redo log, se hace una copia del mismo y se almacena, lo que garanti-
za que no se pierda la información que RMAN necesita para recuperar una copia incremental.
Existen dos paquetes en el diccionario de datos (en el esquema SYS) que permiten trabajar
directamente con RMAN desde el intérprete de SQL:
● DBMS_RCVMAN, mantiene un registro de los componentes de la base de datos: co-
pias de la base de datos, la lista de los respaldos, etc.
● DBMS_BACKUP_RESTORE, el que se encarga de realizar las operaciones de res-
paldo y recuperación (crear el snapshot del archivo de control, respaldar los datafiles,
backups del spfile, etc.).
Pero lo más habitual es utilizar la herramienta RMAN que se instala junto con el sistema
gestor y ejecutar en ella los comandos que sean necesarios.
Así como exp y datapump son bastante similares a la hora de realizar las copias de seguridad,
RMAN es completamente diferente. Accede al recurso digital Copias de seguridad RMAN,
en él se plantean varias de las distintas opciones existentes para realizar paso a paso copias de
seguridad y restauraciones de datos empleando RMAN.
Capítulo 4
140 Administración de sistemas gestores de bases de datos
El DBA es el responsable de gestionar los datos almacenados, lo que además de realizar las co-
pias de seguridad para garantizar la recuperación del sistema, incluye asegurar que los accesos
a dichos datos cumplen los requisitos especificados en la normativa vigente, que viene dada
principalmente por:
4.6.1. La LOPD
La LOPD (Ley Orgánica de Protección de Datos de Carácter Personal) regula el proceso de
recopilación, tratamiento y almacenamiento de la los datos de carácter personal por parte de las
organizaciones. Un dato de carácter personal es cualquier información que permite identificar
a una persona o hacerla fácilmente identificable.
La ley determina que los datos personales están sometidos a cuatro derechos por parte de
sus propietarios (los derechos ARCO):
a) Nivel básico: todos los ficheros que traten datos de carácter personal deberán adoptar
las medidas de nivel básico. Las medidas a aplicar incluyen: gestión de los accesos por
parte de los usuarios, realizar copias de seguridad y custodiar los soportes de almace-
namiento.
b) Nivel medio: deberá aplicarse en ficheros que contengan datos referentes a infracciones
cometidas, tributos, seguridad social o que contengan características de los ciudadanos
que permitan evaluar aspectos de su personalidad. A estos ficheros se le deben aplicar las
medidas del nivel básico y además: identificar responsables de seguridad, registro físico
de acceso a los sistemas de información, registrar entrada y salida de soportes, elaborar
auditorías periódicamente y asegurar la destrucción de los soportes de información
cuando sean desechados.
Capítulo 4
Seguridad 141
c) Nivel alto: deberá aplicarse a los ficheros con información referente a ideología, afilia-
ción sindical, religión, creencias, origen racial, salud o vida sexual, o los que contengan
datos policiales recabados sin consentimiento de las personas afectadas. Estos datos de-
ben almacenarse en soportes cifrados y protegidos con llave, se deben conservar copias
en emplazamientos físicos diferentes al del servidor donde se alojan, se deben auditar
todos los accesos a los datos, y cualquier transferencia de información debe ser por me-
dio de una conexión cifrada. El no cumplimiento de las normas especificadas para los
ficheros de seguridad alta conllevan multas de entre 300 y 600 000 euros.
Recuerda
3 Cada organización que trate con datos de carácter personal debe disponer obligato-
riamente de un documento de seguridad, que debe mantenerse siempre actualizado. El
contenido mínimo que debe tener el Documento de Seguridad es el siguiente:
● La gestión de usuarios y permisos garantizará que los usuarios únicamente accedan a los
datos sobre los que tienen permiso, y que únicamente puedan realizar las operaciones
que les están permitidas sobre esos datos.
● Los sistemas de recuperación permitirán realizar copias periódicas de la información
para mantenerla a salvo.
● Las restricciones de integridad de la base de datos garantizan la corrección de los datos
almacenados.
● La encriptación de los datos y de las comunicaciones garantizará que los usuarios no
puedan acceder a información no autorizada.
● La auditoría permite registrar todos los accesos realizados a los datos, con lo que se
podrá almacenar tanto los accesos realizados (con información detallada de fecha y
Capítulo 4
142 Administración de sistemas gestores de bases de datos
hora de acceso, equipo desde el que se accede, IP, sistema operativo, etc.), como las ope-
raciones realizadas sobre esos datos. Esta información se almacena en un esquema del
sistema, por lo que es necesario tener controlados los campos sobre los que se aplican y
pasar a histórico esta información periódicamente.
Resumen
n Las primeras tareas que debe llevar a cabo el DBA tras la instalación y configu-
ración del sistema gestor están destinadas a garantizar la seguridad del sistema:
asegurar la confidencialidad de la información y la integridad de la información
almacenada.
n Las medidas que se pueden llevar a cabo para garantizar la seguridad del sistema
gestor pueden ser activas (medidas proactivas que tratan de evitar que se produzcan
accesos inadecuados o inconsistencias en la información) o pasivas (medidas reacti-
vas cuyo objetivo es detectar los errores producidos para solucionarlos).
n La confidencialidad se garantizará por medio de la gestión de usuarios y permi-
sos, la definición de esquemas externos, la encriptación de los datos almacenados
y la auditoría de los accesos y operaciones realizadas en el sistema por parte de los
usuarios.
n El objetivo de la encriptación es cifrar la información almacenada, y se puede llevar
a cabo por medio de funciones (encriptar y desencriptar para poder recuperar la
información o hash y mac para impedir que la información pueda ser descifrada) o
por medio de la encriptación transparente (el sistema gestor se encarga automática-
mente de cifrar la información al insertarla y de descifrarla al recuperarla).
n La auditoría tiene por objetivo detectar accesos u operaciones inadecuadas. Se pue-
den auditar tanto las operaciones realizadas en el sistema gestor como las operaciones
realizadas sobre objetos concretos de las bases de datos.
n El sistema gestor dispone de herramientas cuyo objetivo es garantizar la integridad de
la información, como la definición de restricciones que evitan la aparición de datos
incongruentes, el control de concurrencia para evitar el solapamiento de las operacio-
nes realizadas por diversas transacciones y la realización de copias de seguridad que
permitan restaurar la información en caso de fallo del sistema.
n Las restricciones se definen al crear las tablas (claves primarias y foráneas, nulidad,
check y unicidad). El DBA podrá habilitarlas o deshabilitarlas para realizar tareas con-
cretas.
n El control de concurrencia garantizará que las transacciones se ejecuten en el orden
correcto y sin interferir entre ellas. El gestor de concurrencia utiliza bloqueos para
aislar las transacciones. Para buscar un equilibrio entre capacidad de paralelismo del
sistema y posibles errores que se puedan asumir debidos a la interacción entre tran-
sacciones se pueden definir distintos niveles de aislamiento, que se diferenciarán en
el modo en que apliquen los bloqueos sobre los recursos. El DBA deberá definir el
nivel de aislamiento, optimizar la distribución de datos en los discos y monitorizar
interbloqueos.
Capítulo 4
Seguridad 143
Ejercicios propuestos
Crea un usuario “nominas” y asígnale los permisos necesarios para iniciar sesión, crear
tablas y usar las funciones de encriptación y la auditoría:
SQL> @”c:\temp\REC04.01-Esquema_nominas.sql”
Capítulo 4
144 Administración de sistemas gestores de bases de datos
Una vez creadas las tablas, modifica por medio de un UPDATE el campo “sala-
rio_base” de la tabla personal para almacenar en él el resultado de encriptar el campo
“sueldo_base” usando el algoritmo AES 128 con la clave: ‘12345’. Ten en cuenta
que el algoritmo AES 128 emplea una clave de longitud 16 en lugar de los 32 bytes que
usa AES 256.
Una vez ejecutado el update, el campo "sueldo_base" ya no sería necesario, por
lo que habría que eliminarlo de la tabla.
3. Para que los empleados puedan acceder a las aplicaciones de la empresa, asignare-
mos a cada empleado una clave personal que permita verificar su identidad. Dicha
clave se calculará aplicando al DNI del empleado una función hash con el algoritmo
SHA2 de 512 bits y la clave “12345”. El resultado lo almacenaremos en el campo
“clave” de la tabla PERSONAL.
4. Si auditamos las operaciones de select e insert sobre una tabla llamada TEMP y ejecu-
tamos un inserta as select en esa tabla (insert into TEMP select * from TEMP;), ¿cuántas
entradas se registrarán en el log de auditoría?
5. ¿Sucede lo mismo si habilitamos la auditoría de grado fino sobre un campo de esa
tabla para las operaciones de select e insert y ejecutamos de nuevo un insert as select?
7. Revisa los parámetros que permite usar “exp” e indica el comando que ejecutarías para
exportar las tablas PERSONAL y SEDE del usuario “nominas” sin datos (solo la estructu-
ra) en el fichero c:/app/oracle/salida.dmp. ¿Qué ocurre al ejecutar el comando?
8. Revisa los parámetros que permite usar “expdp” e cuales tendrías que indicar en
un fichero de configuración de datapump para realizar el mismo export anterior
pero usando la encriptación transparente, guardando la información en el fichero
“nominas_dpump.dmp” ubicado en el directorio “dumpdir” y usando 4 hilos de
ejecución.
9. ¿Qué sentencia tendrías que ejecutar con RMAN para exportar el tablespace “TB_CI-
FRADO “?
10. ¿Qué sentencias tendrías que ejecutar para recuperar ese mismo tablespace y dejarlo
accesible si se hubiese eliminado por error?
Capítulo 4
Seguridad 145
Actividades de autoevaluación
1. ¿Cuál de las siguientes no es una política activa de seguridad?
a) Gestión de usuarios y permisos.
b) La definición de restricciones.
c) La gestión de transacciones.
d) La auditoría de los inicios de sesión.
4. ¿Qué función permite encriptar los datos pasando una clave, sin que se puedan desen
criptar?
a) ENCRYPT.
b) DECRYPT.
c) HASH.
d) MAC.
7. En caso de fallo en el sistema gestor, ¿qué debo restaurar primero, la copia de seguri-
dad o el cuaderno de bitácora?
a) La copia de seguridad.
b) El cuaderno de bitácora.
c) Ambas simultáneamente.
d) Depende de en qué momento falle.
Capítulo 4
146 Administración de sistemas gestores de bases de datos
8. ¿Cuál de las siguientes no es una tarea relacionada con la gestión de copias de segu-
ridad?
a) Backup.
b) Restore.
c) Recovery.
d) Refresh.
9. ¿Con qué tipo de copia de seguridad puedo copiar una sola tabla?
a) Totales.
b) Lógicas.
c) Físicas.
d) Incrementales.
SOLUCIONES:
a b c
1. d 5.
a b c d
a b c
2. a b c d 9.
d 6. a b c d
a b c
3. a b c d 10.
d 7. a b c d
4.
a b c d 8.
a b c d
Capítulo 4
5
Monitorización
y optimización
Objetivos
3 Comprender los beneficios de monitorizar el funcionamiento del sistema
gestor.
3 Conocer los mecanismos existentes para detectar posibles errores o inefi-
ciencias que puedan provocar un deterioro en el rendimiento del sistema
gestor.
3 Interpretar adecuadamente los planes de ejecución de las consulta.
3 Disponer de herramientas que permitan detectar ineficiencias en una con-
sulta y llevar a cabo las acciones necesarias para optimizarla.
3 Adquirir soltura en la utilización del diccionario de datos para realizar todo
tipo de tareas de monitorización y optimización del sistema gestor.
148 Administración de sistemas gestores de bases de datos
Mapa conceptual
Registro de errores
Plan de ejecución
Herramientas específicas
realiza Funciones
Puesta en marcha
Seguridad
Explotación Monitorización
Optimización
Entorno
Sistema gestor
Base de datos
Consultas
Administración
Capítulo 5
Monitorización y optimización 149
Glosario
Caché de consultas. Almacén temporal de los planes de ejecución óptimos de cada una
de las consultas más ejecutadas en el sistema gestor.
Data warehouse. Almacén de datos, repositorio de información corporativa destinado a
tareas de inteligencia de negocio como la elaboración de informes y la realización de
análisis de datos.
Fragmentación. Aparición de espacios no utilizados en los soportes de almacenamiento
de la información debidos a la operativa diaria de inserción, modificación y elimi-
nación de datos, que provocan una ocupación de espacio innecesaria y hacen más
ineficientes las búsquedas de información.
Índice balanceado. Un índice con estructura de árbol se dice que está balanceado si en
todos los niveles del árbol sus nodos tienen un número de hijos similar.
Log. Grabación secuencial en un fichero o base de datos de los eventos registrados en un
sistema.
Optimizador. Componente del sistema gestor encargado de calcular el coste de ejecución
estimado de cada posible plan de ejecución existente para una consulta y seleccionar
el de menor coste (plan de ejecución óptimo).
Plan de ejecución. Camino que seguirá el sistema gestor para acceder a los datos resulta-
do de una consulta.
Tabla particionada. Una tabla particionada está dividida en segmentos que el sistema ges-
tor trata lógicamente como objetos de base de datos individuales, por lo que permite
operar con cada uno de ellos por separado.
5.1. Introducción
Una vez que se ha instalado y configurado el SGBD, y se ha garantizado el acceso a los usuarios ga-
rantizando todas las medidas de seguridad necesarias, comenzaría la fase de explotación del sistema.
En esta fase, las tareas más habituales del administrador de base de datos serán:
Este capítulo se centrará en las tareas destinadas a garantizar el acceso óptimo a la informa-
ción por parte de los usuarios: la monitorización y la optimización.
5.2. Monitorización
Aunque no es posible ni recomendable monitorizar el uso del sistema gestor constantemente,
sí es preciso hacerlo regularmente y de la forma más automatizada posible. Los sistemas gestores
de bases de datos cuentan con herramientas que ayudan en la tarea de monitorizar el sistema.
Capítulo 5
150 Administración de sistemas gestores de bases de datos
Toma nota
Normalmente las tareas de monitorización se llevan a cabo por medio de tres herramientas:
b) Detección de bloqueos: de forma general podríamos decir que cuando un usuario co-
mienza una operación de modificación de datos sobre una tabla, esta se bloquea, y
cualquier petición de modificación de otro usuario quedaría bloqueada en espera de la
finalización de esta modificación, pudiendo dar lugar a interbloqueos u otras situacio-
nes indeseadas. Por medio de la monitorización del SGBD es posible comprobar si se
están produciendo bloqueos en un momento dado o incluso consultar si se producen
habitualmente para tratar de evitarlos (algunos bloqueos pueden evitarse particionando
la tabla, dividiendo su contenido en varios ficheros, modificando el espacio libre en los
bloques de índices o modificando parámetros del sistema gestor).
Capítulo 5
Monitorización y optimización 151
c) Detección de procesos que acaparen recursos: en caso de que un proceso acapare recursos (de
disco, CPU, etc.) penalizando el rendimiento general del sistema, es posible detectar esta
situación y en caso de que pueda comprometer el correcto funcionamiento del sistema
incluso se puede finalizar ese proceso.
d) Consumo de recursos: otra de las posibilidades que ofrece el monitor de rendimiento es
comprobar el consumo de recursos producido al lanzar una consulta, por lo que de cara
a la optimización de consultas es muy útil para comprobar el impacto de una reescritura
de la consulta, un cambio en el optimizador, el impacto de la creación de un índice, etc.
e) Definición de alertas o umbrales: las alertas o umbrales permiten activar avisos cuando se
cumpla una condición (si nos quedemos sin espacio en disco, por ejemplo).
Cuadro 5.1
Nivel de los mensajes que se almacenan en el log
Debug Guarda en el log información de mucho detalle de las operaciones que realiza
el sistema gestor. Se suele usar durante el desarrollo de la propia aplicación
para comprobar su funcionamiento.
Warning Guarda solamente mensajes relevantes producidos durante la ejecución.
Error Únicamente se almacenan los errores producidos en la aplicación.
Capítulo 5
152 Administración de sistemas gestores de bases de datos
Recuerda
3 Las herramientas gráficas en general consumirán más recursos del sistema y de la
base de datos, por lo que determinadas tareas puede ser conveniente realizarlas por
medio de consultas al diccionario de datos en lugar de recurrir al monitor de rendimiento
(que internamente lo que está haciendo para mostrar la información es lanzar consultas
sobre el diccionario de datos y mostrar los resultados de manera gráfica).
Comprobar esta información directamente con consultas sobre la base de datos no es muy
intuitivo, pero es posible elaborar informes que ejecuten estas sentencias y muestren de modo
gráfico y personalizado toda la información que nos interese conocer en cada momento.
Otra ventaja de esta opción es que el acceso al monitor de rendimiento habitualmente
está limitado a usuarios con permisos de administración, mientras que a cualquier usuario se le
podría dar permiso para ejecutar consultas sobre determinadas tablas del diccionario de datos y
que pudiese comprobar información puntual acerca del estado de la instancia.
En caso de detectar una sentencia SQL que está consumiendo muchos recursos (penalizan-
do el rendimiento del sistema) o que se ha quedado colgada por cualquier motivo, es posible
forzar la finalización de dicha sentencia por medio de instrucciones SQL.
1. Monitor de rendimiento: permite hacer un seguimiento del uso que se está haciendo
de los recursos del sistema.
2. Gestión de incidencias, eventos y problemas: desde la utilidad de gestión de inciden-
cias se podrán revisar picos de uso de recursos o errores que se hayan producido en la
Capítulo 5
Monitorización y optimización 153
instancia. Es posible también crear reglas que capturen y registren excepciones concre-
tas que se produzcan en la base de datos y las muestren en el gestor de incidencias.
3. Gestionar las tareas programadas: permite programar nuevas tareas y realizar un segui-
miento de las ejecuciones de las tareas ya programadas.
4. Definir acciones correctivas, que se ejecutarán en respuesta a alertas o eventos concretos.
5. Definir notificaciones, que se enviarán ante determinados sucesos.
6. Consultar informes predefinidos con información acerca del estado de la instancia.
En su versión “express”, la única funcionalidad que contempla es la monitorización de las
consultas ejecutadas en el sistema gestor y el uso de los recursos de la instancia.
La instalación del sistema gestor Oracle incluye la instalación del EM Database Express. Accede al
recurso digital Monitorización con EM, en el que se proponen algunas tareas que se pueden
llevar a cabo por medio de dicha herramienta, así como del diccionario de datos, para realizar
una monitorización básica de la actividad del sistema.
Capítulo 5
154 Administración de sistemas gestores de bases de datos
● alert.log: log del sistema en formato XML. Registra cronológicamente los errores pro-
cedentes de la operación diaria del sistema gestor. Cada instancia tendrá su propio
registro de log (alertORCL.log), pero todos los PDB comparten el mismo alert.log.
● cdump: archivos core, donde se registran las trazas producidas por el núcleo del sistema.
● incident: contiene múltiples subdirectorios, cada uno con el nombre de un incidente en
concreto y en cada uno de ellos se guardarán los dumps producidos por ese indicente.
● trace: directorio donde se guardan las trazas de los procesos de background, de los pro-
cesos de servidor, del listener y de otros programas de usuario.
● others: otros subdirectorios donde se almacenan incidencias, reportes de monitorización
y otro tipo de información.
Figura 5.1
Ubicación de los ficheros de log.
El SQL Developer también permite realizar determinadas tareas de monitorización. Accede al re-
curso digital Monitorización con Developer, donde se muestra cómo revisar distintos aspectos
del sistema gestor por medio de los informes del Developer, y cómo emplear la herramienta para
acceder al contenido del alert.log de forma más legible y más fácilmente manipulable.
5.4. Optimización
Al igual que existían varios niveles en los que era necesario realizar tareas de configuración
inicial del sistema gestor (a nivel del entorno del servidor, a nivel de red, etc.), las tareas de op-
timización del sistema deben realizarse también a varios niveles, ya que será necesario tener en
cuenta tanto los aspectos internos del sistema gestor y sus bases de datos como aspectos externos
del equipo donde se encuentra instalado y de las comunicaciones a través de las que se accede
al sistema gestor.
Capítulo 5
Monitorización y optimización 155
a) Tamaño de los bloques de datos: la información de las tablas se almacena lógicamente fila
a fila, y físicamente en bloques de datos. Si el tamaño de una fila es muy grande y el
tamaño de los bloques es muy pequeño, sucederá habitualmente que una fila haya que
guardarla en dos bloques de datos, con lo cual para leer la información de esa fila serían
necesarios dos accesos a disco, lo que implica una penalización del rendimiento. Es ne-
cesario por tanto asignar un tamaño adecuado a los bloques de datos que empleen las
tablas (las tablas con muchas columnas tendrán que tener un tamaño de bloque mayor
que las tablas con pocas columnas, para evitar su fragmentación).
b) Tamaño y ubicación de los ficheros de datos: el acceso al almacenamiento físico (el disco) su-
pone habitualmente un cuello de botella: si todos los datos están almacenados en el mis-
mo disco físico, todos los accesos a disco se realizarán en el mismo dispositivo y no se
pueden paralelizar. Para solucionar este problema, se recomendaba separar, si es posible,
los datos de las tablas grandes en varios discos (especialmente si están particionadas), y
separar en distintos discos también los datos y los índices de una misma tabla, de forma
que los accesos a ambos pudiesen realizarse en paralelo. Los sistemas gestores de bases
de datos instalados en entornos de producción suelen utilizar almacenamiento RAID
o almacenamiento NAS o SAN (en red), de forma que estas consideraciones ya no son
necesarias, aunque sí se recomienda utilizar tantos discos como CPU tenga el servidor,
para optimizar el procesamiento paralelo.
c) Deshabilitar procesos “ocultos”: muchos sistemas gestores permiten configurar los archivos
de datos para que incrementen su tamaño (auto-grow) o se compacten (auto-shrink) au-
tomáticamente si se quedan sin espacio libre. El problema de estos procesos es que escapan
a nuestro control y se pueden ejecutar en cualquier momento, y son procesos bastante
costosos en cuanto a uso de disco. En general, se recomienda deshabilitar este tipo de
procesos y monitorizarlos y ejecutarlos manualmente fuera del horario de producción,
minimizando de ese modo el impacto que puedan tener los cambios.
Capítulo 5
156 Administración de sistemas gestores de bases de datos
d) Tamaño del almacenamiento temporal: todas las transacciones que se ejecutan en el sistema
gestor almacenan los datos que van generando hasta que finaliza la transacción en un
espacio de almacenamiento temporal. Si este espacio se llena, el sistema no admitirá más
transacciones, por lo que debemos asegurar que tenga espacio suficiente pero sin des-
perdiciar espacio en disco. El espacio dedicado al almacenamiento temporal dependerá
principalmente del tipo de tablas que tengamos y del tipo de transacciones que se rea-
licen: en entornos operacionales (con tablas pequeñas y muchas transacciones simples),
no será necesario un tablespace temporal muy grande, únicamente habrá que asegurar
que se puedan ejecutar todas las transacciones. En entornos data warehouse, con ta-
blas muy grandes y pocas transacciones pero muy complejas, necesitaremos un espacio
temporal muy grande para almacenar los resultados parciales de las consultas que se
ejecuten. El almacenamiento temporal nunca debería tener activado el incremento de
espacio automático (auto-grow).
a) Diseño de las tablas y elección de tipos: es importante que el tipo de datos que utilicemos
se ajuste lo más posible al rango de valores a almacenar. También es importante ajustar
los tipos de datos a lo que necesitemos, para evitar conversiones de tipos de datos inne-
cesarias, lo cual también afectará al rendimiento.
Ejemplo
Una base de datos de ventas contiene una tabla maestra de “tipos de pago” en la que se alma-
cenan los diferentes tipos de pago que actualmente permite la empresa. La tabla tiene un código
identificador de “tipos de pago” al que se ha asignado un tipo entero de 10 dígitos, cuando sola-
mente se permiten 5 tipos de pago (que se podrían representar con un solo dígito). Si el sistema
gestor representa cada dígito por medio de 2 bytes, esto supondría que se estarían desperdician-
do 2 bytes * 9 dígitos=18 bytes en cada fila. Si se han realizado 10 millones de ventas, cada
una con su código de tipo de pago, se estarían desperdiciando al menos 180 MB de espacio de
almacenamiento (réplicas y RAID aparte), pero además el hecho de tener que leer más bytes en
disco al lanzar las consultas implica también un menor rendimiento de las consultas.
b) Campos calculados: los campos calculados obligan al sistema a realizar numerosas opera-
ciones durante su consulta, lo que puede afectar al rendimiento del sistema. Si los campos
a partir de los que se calculan no sufren variaciones, puede ser conveniente incorporar
los campos calculados a la base de datos, calculando su valor en el m omento que se in-
sertan, y evitando de esta forma recalcularlos continuamente al realizar las consultas.
Capítulo 5
Monitorización y optimización 157
Ejemplo
Las desnormalización es muy habitual en entornos data warehouse. En este tipo de sistemas se
utilizan tablas muy grandes, por lo que es fundamental minimizar las operaciones de JOIN al
realizar las consultas. Al desnormalizar lo que hacemos es reducir los JOIN a costa de incre-
mentar la redundancia en el sistema.
Supongamos una base de datos con información de productos, que contiene las siguientes
tablas:
Figura 5.2
Tablas operacional.
Figura 5.3
Dimensión producto.
● Cuando se accede a datos de una sola partición, se accede únicamente a esa parti-
ción, evitando procesar toda la tabla.
● Permite guardar en una sola tabla más datos que los que podrían ser alojados física-
Capítulo 5
158 Administración de sistemas gestores de bases de datos
Índice no balanceado 20
16 21
Índice balanceado
15 17
15
10
7 20
8
4 8 16 21 7
2 5 10 17 2
4
Figura 5.4 5
Índices balanceados y no balanceados.
Si queremos recuperar el valor 5 (el peor caso), con el índice balanceado solamente
necesitaríamos 4 accesos mientras que con el índice no balanceado necesitaríamos 9.
Para balancear de nuevo el índice habrá que reconstruir el índice o reorganizarlo.
La ventaja de reconstruirlo es que además de nivelarlo elimina los espacios vacíos que
queden en los bloques del índice, por lo que también se desfragmentaría el índice.
g) Crear, modificar o eliminar índices.
Capítulo 5
Monitorización y optimización 159
Sin embargo, crear índices tiene también sus desventajas: crear un índice implica la nece-
sidad de mayor espacio de almacenamiento (para guardar el índice), y un consumo extra de
recursos, ya que cada vez que se manipulan los datos de la tabla es necesario actualizar también
el índice. Es necesario, por tanto, buscar un equilibrio a la hora de crear índices entre el rendi-
miento que aportan y el coste de su implementación (tan importante como la creación de los
índices es la eliminación de índices innecesarios).
A la hora de crear un índice, debemos tener en cuenta dos cuestiones:
– Las claves primarias y foráneas (estos índices normalmente ya los crea automáticamente).
– En las columnas que habitualmente aparecen en el SELECT o el WHERE de las consultas.
– Columnas con buena selectividad. La selectividad de un índice es buena si pocas filas
del índice tienen el mismo valor.
– Tablas con muy pocos datos: si la tabla se puede cargar entera en memoria al consultarla
es más rápido recorrerla entera en memoria que acceder a través de un índice.
– Columnas que tienen muchos nulos.
– Columnas cuyos valores se modifiquen muy frecuentemente, ya que implicaría un cos-
te extra de actualización del índice muy elevado.
– Índices sobre muchas columnas (su coste de mantenimiento y espacio son muy altos).
– Si se crean muchos índices en una tabla, esto penaliza considerablemente las insercio-
nes, modificaciones y eliminaciones en la tabla, e incluso en las consultas a veces al
haber tantos índices directamente los omite.
¿Sabías que...?
Cuando creamos un índice sobre varias columnas, el orden es importante ya que el primer cam-
po que se indique será el que se use para ordenar las entradas del índice, por lo que el índice
sería muy eficiente para hacer búsquedas por el primer campo (recorrería solo las entradas del
índice necesarias para encontrar el valor buscado), mientras que las búsquedas por el segundo
campo tendrán que recorrer siempre todo el índice, ya que ese campo no está ordenado.
Capítulo 5
160 Administración de sistemas gestores de bases de datos
1. Por su organización
● Agrupados: los campos sobre los que se define el índice determinan la organización
de la tabla, ya que las filas de la tabla se guardarán ordenadas en base al valor de las
columnas indexadas. No ocupan espacio adicional, pero solo se puede definir un
índice de este tipo por tabla. En general, se recomiendan para campos cuyo valor no
cambia (lo que obligaría a una reordenación del contenido de la tabla) y se utilizan
habitualmente en las consultas para filtrar los datos a recuperar, por lo que los sistemas
gestores los suelen emplear para implementar los índices para las claves primarias de
las tablas.
● No agrupados: se construyen como una estructura aparte de la tabla con punteros a los
datos de la tabla. Requieren espacio adicional pero se pueden definir tantos índices de
este tipo por tabla como se quiera. Se recomiendan para consultas que accedan solo a
parte de una tabla, consultas con JOIN o GROUP BY, consultas que devuelven pocos
datos, consultas que usen coincidencias exactas en el WHERE o consultas sobre co-
lumnas que no tengan muchos valores únicos.
2. Por su estructura
● Índices agrupados: el índice se implementa en la propia tabla, sin una estructura adicional.
Ejemplo
Supongamos una tabla de empleados en la que guardamos el código del empleado, su nom-
bre, su salario, su código de departamento y su género. Se podría crear un índice agrupado
para la clave primaria de la tabla. Las filas de la tabla se almacenarían ordenadas por dicho
campo, sin estructuras adicionales:
Figura 5.5
Ejemplo de índice agrupado.
● Índices B-tree (árbol binario): el índice se implementa como un conjunto de nodos en-
lazados entre sí formando un árbol. Cada nodo almacena los valores inferiores al suyo
propio en su subárbol izquierdo, y los valores superiores en su subárbol derecho.
Capítulo 5
Monitorización y optimización 161
Ejemplo
En la tabla del ejemplo anterior, se podría crear un índice de tipo b-tree para optimizar las
consultas que acceden al campo “empleado”. Para crear su árbol correspondiente, se partiría
de un nodo raíz al que se asignaría un valor intermedio, en este caso "Darío", y se irá constru-
yendo el árbol almacenando a su izquierda los valores inferiores a ese valor, y a su derecha
los valores superiores.
Índice empleado
Darío
Beatriz Esperanza
Figura 5.6
Ejemplo índice b-tree.
Si se ejecutase la consulta:
Accedería en primer lugar al nodo central, cuyo valor es "Darío". Como el valor buscado
es inferior (en orden alfabético), se continuaría la búsqueda en su subárbol izquierdo, con lo
cual se accedería al nodo con valor "Beatriz". Como el valor buscado sigue siendo inferior, se
accedería de nuevo a su subárbol izquierdo, y se encontraría el valor buscado.
● Índices bitmap: se implementan en forma de vectores de valores binarios. Para cada po-
sible valor del campo, se crea un vector con tantos elementos como filas tenga la tabla:
si en la fila X de la tabla el valor del campo coincide con el del vector, entonces en la
posición X del vector se almacena un 1, y si no se almacena un 0. Son adecuados para
columnas con pocas modificaciones que toman pocos valores diferentes (especialmente
en entornos data warehouse).
Ejemplo
Utilizando el mismo caso del ejemplo anterior, supongamos que en la empresa solamente hay
3 departamentos, y son muy raros los cambios de departamento entre los empleados. Podría-
mos crear un índice de tipo bitmap para el código de departamento y otro para el género (que
solo puede tomar dos valores y tampoco suele cambiar).
En el índice del campo género se crearía un vector binario para el valor “Hombre” (que
tomará el valor 1 en las filas que correspondan a hombres y 0 en las filas que correspondan a
mujeres) y otro vector para el valor “Mujer” que almacenará unos para las mujeres y ceros para
Capítulo 5
162 Administración de sistemas gestores de bases de datos
los hombres. Para el índice del código de departamento, se crearía un vector para cada uno
de los posibles valores del campo “coddepto” que tomaría valores de manera análoga:
Figura 5.7
Ejemplo de índices bitmap.
El sistema gestor la resolvería haciendo una operación “AND” entre los vectores corres-
pondientes de los dos índices y la tabla:
Figura 5.8
Resultado de consulta con índices bitmap.
● Índices hash: este tipo de índices utilizan una función (la función hash), que, aplicada a
un valor del campo, determina en qué posición del índice se almacena dicho valor, y en
esa posición se almacenará un puntero a la fila concreta de la tabla. Son muy útiles para
consultas en las que se busque siempre un valor concreto de un campo, pero son malos
para buscar rangos de valores (tendrían que aplicar la función a cada valor y no podrían
recuperar los datos en bloque) o en casos en que el resultado de aplicar la función hash
es el mismo para muchos valores del campo, ya que en esos casos obliga a implementar
medidas de gestión de duplicados (como crear una zona de desbordamiento al final del
índice donde se buscarían secuencialmente los valores repetidos).
Capítulo 5
Monitorización y optimización 163
Ejemplo
Para completar el caso propuesto en los ejemplos anteriores, crearemos un índice hash sobre
el campo “salario”. Pongamos que la función hash que emplearemos será f(X)=X mod 9, es
decir, tendremos un índice con 9 posiciones y para saber qué posición corresponde a cada
valor lo dividiríamos entre 9. El resto de esa división será la posición en la que tendremos que
buscar ese valor:
Figura 5.9
Ejemplo de índice hash.
Si se ejecutase la consulta:
Accedería a la posición 6 del índice y ahí encontraría el valor almacenado junto con un
puntero a la fila de la tabla donde se almacena ese valor.
Accede al recurso digital Creación de índices donde se plantean ejemplos de bases de datos
sobre las que se realizan diferentes consultas de información, y determina qué índices sería más
adecuado emplear en cada caso.
Antes de proceder a optimizar las consultas de nuestro sistema, es importante identificar las con-
sultas que se ejecutan más a menudo y consumen más recursos, para centrar en ellas las tareas
de optimización.
Los lenguajes de consulta basados en el álgebra relacional como SQL son no procedimen-
tales, ya que el usuario dice el resultado que quiere obtener, pero no cómo conseguirlo. Esto
Capítulo 5
164 Administración de sistemas gestores de bases de datos
presenta una gran ventaja para el usuario, pero delega en el sistema la toma de estas decisiones,
lo que limita notablemente la capacidad del usuario para asegurar que los datos se recuperen de
forma óptima (aunque sí existen varias tareas que se pueden llevar a cabo para ayudar al sistema
a tomar las decisiones correctas).
Cuando se ejecuta una consulta se siguen las siguientes fases:
A) Estadísticas
Las estadísticas de las tablas se guardan en el diccionario de datos. Cuando creamos una tabla
en la base de datos, se inserta una fila en el diccionario de datos con el nombre y características
de la tabla definidas en el DDL de creación de la tabla, pero toda la información referente a la
distribución de los datos en dicha tabla (bloques vacíos, longitud promedio de sus filas, distribu-
ción de los datos, etc.) estará vacía hasta que se ejecuten las estadísticas de la tabla, proceso que
calculará todos estos parámetros y los actualizará en el diccionario de datos. Si las estadísticas no
están actualizadas el optimizador partirá de supuestos acerca de la distribución de los datos en
la tabla erróneos, por lo que generará planes incorrectos.
Recuerda
3 El primer paso por tanto para optimizar una consulta cuyo rendimiento se ha degradado
con el tiempo será actualizar las estadísticas de las tablas que participan en la consulta,
ya que es el proceso menos invasivo y ofrecerá mejorías considerables e inmediatas.
Capítulo 5
Monitorización y optimización 165
efectivamente la reescritura de una consulta nos va a dar mejores resultados, lo único que ten-
dremos que hacer es comparar el coste estimado de los planes de ejecución de cada una de las
versiones de la consulta.
Las transformaciones que se realicen a las consultas deben buscar dos objetivos:
Algunas de las reescrituras que se pueden aplicar a las consultas para mejorar su rendimiento son:
Si tenemos una consulta sobre dos tablas que devuelve las filas que cumplen una condición
en una de las tablas u otra condición en la otra tabla (con un OR), lo que hace el optimizador es
obtener primero todos los resultados del JOIN cruzando todas las filas de las dos tablas, guardar
los resultados en una tabla temporal y sobre ella aplicar los filtros. Si hubiese índices definidos
sobre las columnas “filtradas” no los utilizaría ya que el filtrado no lo hace sobre cada tabla,
sino sobre la tabla temporal que construye en memoria. Si en lugar del OR realizamos una
unión de las filas que cumplan una condición más las filas que cumplan la otra condición, pri-
mero recuperaría los datos que cumpliesen las condiciones en cada una de las tablas usando los
índices y luego haría el join solo de las filas que cumplan una u otra condición.
Ejemplo
La consulta:
Si hubiese un índice por nombre del empleado y otro por nombre del departamento, se
podría sustituir por:
Capítulo 5
166 Administración de sistemas gestores de bases de datos
2. IN vs EXISTS
Si tenemos una consulta que para cada valor de la consulta principal comprueba si se cum-
ple una condición en una subconsulta, si utilizamos los operadores IN, ALL o ANY, la subcon-
sulta siempre se ejecutaría completamente para cada registro de la consulta principal, mientras
que si utilizamos un exists(select 1 from …), en cuanto la subconsulta obtenga un resultado ya
no continuaría evaluando el resto de filas.
Por el contrario, si la subconsulta siempre devuelve los mismos valores y no es necesario
evaluarla para cada valor de la consulta principal, si utilizamos IN, la primera vez que ejecute
la subconsulta almacenará sus resultados en memoria y no tendrá que volver a ejecutar la sub-
consulta, mientras que con exists tendría que evaluarla para cada fila de la consulta principal.
Ejemplo
La consulta:
3. IN vs BETWEEN
Ejemplo
La consulta:
4. Comparaciones
Capítulo 5
Monitorización y optimización 167
Ejemplo
La consulta:
Ejemplo
Queremos hacer una consulta que nos devuelva, para cada empleado, su información y además
el número de empleados que han nacido el mismo día. La podríamos escribir de las tres formas:
– Con una tabla derivada:
SELECT e.nombre, e.apellidos, e.fecnacimiento, e2.cuenta as mismo_dia
FROM personal e,
(SELECT fecnacimiento, count(*) as cuenta FROM personal GROUP BY fecnacimien-
to) e2
WHERE e2.fecnacimiento = e.fecnacimiento
Capítulo 5
168 Administración de sistemas gestores de bases de datos
– Eliminando la subconsulta:
6. Group by
Cuando incluimos varias tablas en un join, es el optimizador quien decide a qué tablas
accede primero, y por lo general lo hace bien. Puede fallar sin embargo en casos en que la
consulta tiene un group by, ya que normalmente el criterio seguido por el optimizador es tratar
de minimizar los accesos a disco, pero no tiene en cuenta el esfuerzo que supondrá reordenar o
agrupar todos los resultados en memoria una vez obtenidos. Algunos sistemas gestores proveen
de herramientas para forzar al optimizador a utilizar las tablas del join en un orden concreto.
Por otra parte, el uso de GROUP BY en vistas puede empeorar el rendimiento de las consultas.
Ejemplo
En primer lugar se ejecutaría la consulta que corresponde a la vista, y sobre sus resultados
se ejecutaría el segundo select, lo que equivaldría a ejecutar la siguiente consulta:
7. Cursores y funciones
Los cursores son una herramienta muy potente y muy eficaz en Oracle, pero no sucede lo
mismo en otros sistemas gestores que permiten definir cursores pero estos son muy ineficientes.
Usar funciones dentro de una SELECT es muy útil, pero también tenemos que tener cuidado
con ellas cuando las consultas son muy complejas.
Cuando ejecutamos una consulta, lo primero que hace el optimizador es comprobar si ya
tiene creado un plan en caché para esa consulta, y si lo tiene, lo utiliza. Si no lo tiene, lo cons-
truye y una vez que sabe cómo obtener los resultados de la mejor manera ejecuta la consulta.
Cuando usamos cursores o funciones, el sistema gestor entiende que es una consulta variable
Capítulo 5
Monitorización y optimización 169
por lo que no reutiliza los planes sino que los crea cada vez, lo que introduce carga adicional
innecesariamente. Además, algunos sistemas gestores ni siquiera utilizan los índices cuando hay
funciones o variables de por medio (si en la cláusula WHERE se utilizan campos indexados
como argumentos de funciones, el índice quedará desactivado), por lo que los resultados pue-
den ser francamente malos. Si se puede modificar la consulta para aplicar la condición sobre el
campo directamente, se podría usar el índice y así mejorar su rendimiento.
Ejemplo
La consulta:
Capítulo 5
170 Administración de sistemas gestores de bases de datos
Ten en cuenta
Al elaborar el plan de ejecución, el sistema gestor realiza también un cálculo del
coste estimado de ejecución de la consulta, que se mostrará conjuntamente con
su plan. Para cada paso del plan, muestra el coste de ejecución de dicho paso, lo
que nos puede orientar acerca de en qué paso podría ser más conveniente actuar.
Cada sistema gestor tiene sus propias herramientas para consultar los planes de ejecución,
algunas más sencillas que otras (en modo texto, en XML, en modo gráfico, etc.). En general,
todas ellas muestran la siguiente información:
Capítulo 5
Monitorización y optimización 171
Las tareas de optimización externas al sistema gestor serán independientes del sistema gestor de
bases de datos específicos que se utilice, por lo que en el siguiente apartado veremos algunas
de las operaciones de optimización que se pueden llevar a cabo internamente en el sistema
gestor de bases de datos Oracle.
¿Sabías que...?
Este parámetro es común a la instancia, no se pueden especificar valores diferentes para dis-
tintos esquemas, ni siquiera para distintas PDB.
b) Tamaño y ubicación de los ficheros de datos: la ubicación de los ficheros de datos se indica
en el momento de crear los tablespaces, y se puede modificar, tal como se indicó en el
capítulo 2.
Capítulo 5
172 Administración de sistemas gestores de bases de datos
c) Deshabilitar procesos “ocultos”: cuando se crea un tablespace, es posible indicar cual debe
ser el comportamiento de cada uno de sus datafiles con respecto al incremento auto-
mático. Esta información se puede consultar también en el diccionario de datos:
d) Tamaño del almacenamiento temporal: para incrementar el tamaño del tablespace temporal
sería suficiente con añadirle un nuevo datafile con el tamaño deseado.
Ten en cuenta
Si se deshabilita el incremento automático del tamaño de los datafiles, podría suceder que un ta-
blespace se quedase sin espacio y esto implicaría que no se podrían insertar datos en las tablas. Esta
medida por tanto debería ir acompañada de la creación de una alerta o una tarea programada que
revise periódicamente si algún tablespace se está quedando sin espacio libre y envíe una notificación
para solucionarlo. En el próximo capítulo veremos cómo crear este tipo de tareas automáticas.
Las modificaciones pueden provocar problemas similares: si tengo un campo de tipo var-
char2 en una tabla, por ejemplo, cuando inserto los datos solamente se ocupa el espacio que
realmente ocupe el varchar2. Si modifico todas esas filas incrementando la longitud del campo,
ya no me cabría en el espacio que tenía reservado en la fila, con lo cual lo que hace es añadir
el nuevo valor al final del bloque de datos en una zona especial para ello, con lo cual la fila se
parte en dos y para acceder a ella tendría que acceder dos veces al disco para recuperar sus datos.
Capítulo 5
Monitorización y optimización 173
La solución para ambos problemas es compactar las tablas, lo que haremos “moviendo” las ta-
blas al mismo sitio donde están (el comando MOVE se utiliza para mover las tablas a un tablespace
diferente, pero si lo ejecutamos sin indicar ningún tablespace lo que hace es compactar la tabla):
Si usamos la opción COMPRESS, además de compactar la tabla la comprime, con lo cual ocu-
pará menos espacio y las consultas serán más rápidas, pero en caso de que se modificasen los datos
de la tabla las operaciones de modificación serían más costosas y provocarían mayor fragmentación
en la tabla, con lo cual no se aconseja comprimir una tabla si sus datos se modifican frecuentemente.
B) Índices
Los índices se crean en Oracle usando la instrucción “CREATE INDEX”, indicando en
qué tabla y sobre qué campo o campos se va a definir el índice.
En Oracle se pueden crear índices de tipo b-tree (en forma de árbol) o índices bitmap, que
se suelen utilizar únicamente en bases de datos data warehouse.
Los índices b-tree guardan los valores del campo de forma ordenada. Si se realizan muchas
modificaciones sobre el índice, esto puede provocar que las ramas del árbol queden muy desba-
lanceadas, provocando que el índice sea mucho más ineficiente.
Cuando un índice está desnivelado, fragmentado o inutilizado, podemos arreglarlo recons-
truyéndolo con REBUILD, con lo que el índice quedaría nivelado y compactado:
Capítulo 5
174 Administración de sistemas gestores de bases de datos
D) Particionamiento
Cuando particionamos una tabla la dividimos en segmentos lógicos (particiones), que pue-
den ser tratadas como tablas individuales. Esto implica que podemos acceder simultáneamente a
varias particiones de la misma tabla, y que si consultamos datos de una partición, no se realizaría
un FULL SCAN de la tabla completa, sino solamente de la partición.
En Oracle no podemos particionar una tabla ya existente, sino que tenemos que crear una
nueva tabla particionada e insertar los datos en la nueva tabla. Tampoco se puede “desparticio-
nar” una tabla particionada.
Ejemplo
Capítulo 5
Monitorización y optimización 175
● Realiza los cálculos que pueda resolver antes de ejecutar la consulta: si encuen-
tra una expresión “WHERE precio>2000/5” la transformaría en “WHERE pre-
cio>400”.
● Sustituye determinadas instrucciones para hacerlas más eficientes: sustituye los LIKE
por “=” si no se usan las wilcards, si es posible sustituye los IN, ANY y SOME por
ORs, los ALL por ANDs y los OR por UNION, y transforma los BETWEEN en
comprobaciones “<= AND >=”.
● Puede inferir condiciones transitivas que le permitan usar mejor los índices. Por
ejemplo, podría sustituir la condición “WHERE dep.coddepto=3 and emp.cod-
depto=depto.coddepto” por “WHERE dep.coddepto=3 and emp.coddepto=3”.
b) Transforma sentencias complejas en otras más sencillas: si detecta subconsultas que pue-
den ser transformadas en un JOIN, realiza la transformación automáticamente.
c) Transforma las vistas en su correspondiente consulta.
d) En caso de que la consulta implique un JOIN de varias tablas, evalúa el orden en el que
accederá a ellas y de qué forma accederá a cada tabla.
¿Sabías que...?
En versiones antiguas de Oracle, era más eficiente hacer un join que cruzar las tablas en el
where, es decir, escribir una consulta de esta forma:
En las versiones actuales, el sistema gestor ya detecta automáticamente los cruces de ta-
blas y realiza los accesos en el orden que considere más conveniente, independientemente de
cómo se escriba la consulta.
Accede al recurso digital Optimización de consultas que contiene varios ejemplos por medio
de los cuales podrás comprobar cómo la reescritura de una consulta puede afectar a su rendimiento.
Capítulo 5
176 Administración de sistemas gestores de bases de datos
El SQL Plus permite consultar el plan de ejecución de las consultas en modo texto, ejecu-
tando la siguiente instrucción:
Tras su ejecución, cualquier consulta que se ejecute solamente mostrará su plan de ejecu-
ción y no devolverá datos. El resultado del plan será una tabla donde se muestran, en orden
descendente de ejecución, todos los pasos que se llevan a cabo para resolver la consulta. En cada
paso se mostrará la siguiente información:
Más sencillo es emplear el SQL Developer, ya que permite consultar el plan de ejecución
de forma gráfica y es más fácilmente interpretable. Para ello, basta con situar el cursor sobre la
consulta cuyo plan de ejecución se quiere comprobar y pulsar el botón “Explicación del plan”
o la tecla F10:
Figura 5.10
Consulta del plan de ejecución en SQL Developer.
Capítulo 5
Monitorización y optimización 177
Figura 5.11
Plan de ejecución en SQL Developer.
Las conclusiones o propuestas de mejora detectadas por el SQL Tunning Advisor se pueden
consultar por medio de la vista DBA_ADVISOR_ACTIONS:
Capítulo 5
178 Administración de sistemas gestores de bases de datos
Figura 5.12
Monitor SQL.
● Inserciones masivas: las inserciones masivas permiten insertar datos en bloques en lugar
de hacerlo fila a fila, con lo que se incrementa notablemente la velocidad. En Oracle las
inserciones masivas se realizan por medio del SQL Loader.
● Insert append: al insertar datos en una tabla se van completando en primer lugar los
espacios libres que queden en los bloques de la tabla. Al hacer un append los datos se
Capítulo 5
Monitorización y optimización 179
insertan siempre por el final de la tabla, por lo que se evita recorrer la tabla y la inserción
es más rápida. Tiene el problema de que si se hace habitualmente puede dejar la tabla
muy fragmentada.
● Nologging: se emplea cuando se realiza una inserción de un gran número de filas en una
tabla, para evitar guardar registro de cada inserción en el fichero de redo. Esto implica
que la operación no se podrá deshacer, pero ahorra mucho tiempo debido a que no está
registrando todas las transacciones que está ejecutando.
● Intercambio de particiones: el intercambio de particiones permite intercambiar una tabla
por una partición de otra tabla. Las operaciones de inserción son mucho más rápidas
que las de modificación, por lo que en lugar de modificar los datos de una partición
de una tabla, se pueden insertar los datos en una tabla temporal y luego intercambiar
la tabla temporal por la partición (que es inmediato), con lo que además de ganar en
velocidad se actualizaría la información de la tabla sin afectar a su rendimiento.
Ejemplo
Figura 5.13
Tabla particionada.
Figura 5.14
Modificaciones en la partición.
Capítulo 5
180 Administración de sistemas gestores de bases de datos
En lugar de ejecutar un update de las filas que han cambiado y un insert de las filas nuevas,
lo que podemos hacer es crear una tabla nueva donde insertaríamos todas las filas de 2020, y
luego intercambiar la tabla por la partición:
Figura 5.15
Intercambio de particiones.
● Vistas materializadas: las vistas materializadas almacenan no solo la consulta que define
la vista sino también sus datos. Se utilizan con consultas que acceden a datos que se
actualizan puntualmente y contienen cálculos y agrupaciones, ya que tener los datos
precalculados supone una reducción considerable en el tiempo necesario para acceder a
ellos. Se utilizan mucho en entornos data warehouse ya que la información únicamente
se actualiza cuando se lanza el proceso de carga (ETL) que vuelca la información en la
base de datos, y por tanto es sencillo controlar cuando se debe actualizar la vista mate-
rializada.
● Merge: la operación “merge” combina la inserción y modificación en una sola instruc-
ción. Al hacer el merge de una fila se comprueba si la clave de la fila existe en la tabla:
si no existe inserta esa fila, y si existe actualiza todas las columnas de la fila existente por
los de la fila nueva. Es muy apropiada para procesos ETL en entornos data warehouse.
● Hints: Oracle dispone de un mecanismo que permite al usuario guiar al optimizador a
la hora de resolver una consulta concreta, denominado hints. Los hints se indican entre
/*+ */, y permiten sugerir al optimizador que use un índice concreto, a que haga un
join de varias tablas en un orden concreto, a que inserte los datos de un modo determi-
nado, etc. Existen gran variedad de hints que podemos utilizar, pero hay que tener en
cuenta que un hint no obliga al optimizador a comportarse de una manera determina-
da: lo hará como le digamos si puede y quiere.
¿Sabías que...?
Capítulo 5
Monitorización y optimización 181
Resumen
n Las principales tareas que tendrá que llevar a cabo el DBA en la etapa de explotación
del sistema gestor son la monitorización y optimización.
n La monitorización se realizará por medio del monitor de rendimiento (que permite detec
tar anomalías en el funcionamiento del sistema gestor en tiempo real), el registro de erro-
res (ayuda a detectar y diagnosticar errores una vez producidos) y el diccionario de datos
(que almacena y permite consultar toda la información disponible del sistema).
n Por medio del monitor de rendimiento se puede realizar un seguimiento de métricas,
detectar bloqueos o procesos que acaparen recursos, monitorizar el uso de los recur-
sos y definir alertas y umbrales.
n El registro de errores almacena todos los eventos producidos en el sistema gestor, los
errores, las consultas pesadas que se han lanzado y puede guardar también un registro
de todas las consultas ejecutadas.
n El diccionario de datos permite conceder acceso a información del monitor de ren-
dimiento a usuarios que no tienen permiso para emplear esa herramienta, facilita
la automatización de tareas y permite la elaboración de informes personalizados.
n La optimización del sistema debe buscar un equilibrio entre la mejoría que aporta frente
al impacto que puede tener en el resto de operaciones del sistema, y se aplicará a todos
los niveles: servidor (hardware, sistema operativo y red), SGBD, objetos de bases de
datos y consultas. Para optimizar el sistema disponemos de las herramientas de monitori-
zación, el plan de ejecución y herramientas de optimización específicas de cada SGBD.
n La optimización del entorno buscará ajustar la asignación de recursos al sistema gestor.
n Los ajustes en el sistema gestor buscarán optimizar las características de almacena-
miento del sistema (tamaño de los bloques, tamaño y ubicación de los ficheros de
datos, funcionamiento del optimizador y deshabilitar procesos ocultos).
n La optimización de los objetos de base de datos buscará adecuar su diseño físico a
las necesidades y mejorar la forma de almacenarlos para que sean más eficientes.
n Para optimizar las consultas se buscará reescribirlas de forma que el optimizador
construya planes de ejecución más eficientes, que empleen los índices siempre que
sea posible, eviten recorrer tablas completas si no es necesario y eviten en la medida
de lo posible los accesos a disco.
Ejercicios propuestos
Tenemos una aplicación de gestión de nóminas cuya base de datos contiene las siguientes
tablas:
SEDE(codsede,nombre,direccion,codcoordinador)
CARGO(codcargo,cargo,bonificacion)
PERSONAL(codemp,codsede,nombre,apellidos,dni,direccion,cp,sueldo_base,
codcargo,feccontratacion,coddepto)
NOMINA(codnomina,codemp,codsede,mes,importe,retencion)
DEPARTAMENTO(coddepto, departamento, codresponsable)
Capítulo 5
182 Administración de sistemas gestores de bases de datos
1. Sabiendo que para consultar las nóminas de un empleado la aplicación permite
buscar por nombre del empleado o por sus apellidos, ¿qué índices crearías para las
tablas?
2. Una de las consultas que se ejecutarán más frecuentemente será el importe de las
nónimas de cada mes en cada departamento, que involucrará a las tablas de nóminas,
personal y departamento. Tras crear la base de datos comprobamos cual es el plan de
ejecución de la consulta, y posteriormente procedemos a insertar los datos en las tablas.
¿El plan de ejecución será el mismo antes y después de insertar datos en las tablas o
puede cambiar? Justifica tu respuesta.
3. Comprueba con el SQL Developer qué consultas habría que ejecutar para obtener la
siguiente información:
4. Indica qué modificaciones se pueden llevar a cabo en la base de datos para optimizar
cada una de las siguientes consultas:
5. Indica qué cambios se podrían aplicar a las siguientes consultas para reescribirlas de
forma que sean más eficientes.
a) SELECT emp.nombre,emp.apellidos
FROM PERSONAL emp, CARGO cr
WHERE emp.codcargo=cr.codcargo
AND (emp.codemp,emp.codsede) IN (SELECT nom.codemp,nom.codsede FROM
NOMINA nom WHERE nom.importe*nom.retencion/100 > cr.bonificacion);
b) SELECT nombre, apellidos
FROM PERSONAL emp
Capítulo 5
Monitorización y optimización 183
6. ¿Qué sentencia tendrías que ejecutar para actualizar las estadísticas de todas las tablas
del esquema USR_NOMINAS?
8. ¿Qué sentencia tendrías que ejecutar para reconstruir el índice PK_NOMINA definido
sobre la clave principal de la tabla NOMINA del esquema usr_nominas?
9. Indica cuál de las siguientes consultas sobre la base de datos “bd_nominas” da lugar
a un plan de ejecución con mayor coste:
Capítulo 5
184 Administración de sistemas gestores de bases de datos
Actividades de autoevaluación
1. ¿Para qué sirve la caché de consultas?
a) Almacena los resultados de las consultas más recientes.
b) Almacena los últimos datos accedidos en la consulta a disco.
c) Almacena los planes de ejecución de las consultas ejecutadas.
d) Analiza los planes de ejecución posibles de cada consulta.
3. Un plan de ejecución:
a) Determina cómo se puede resolver una consulta.
b) Se crea para ejecutar las consultas en el orden que queramos.
c) Establece la mejor forma de ejecutar una consulta.
d) Determina el orden en que se procesarán FROM, WHERE, ORDER...
5. ¿Qué diferencia existe entre usar JOIN o cruzar las tablas en el WHERE?
a) Con JOIN es más rápido.
b) Ninguna.
c) Depende del orden en que se realicen los cruces en el JOIN.
d) Cruzando las tablas en el WHERE es más rápido.
Capítulo 5
Monitorización y optimización 185
9. Si ejecuto una consulta sobre una tabla particionada que lee datos de todas las parti-
ciones de la tabla:
a) Será más rápida que si la tabla no estuviese particionada.
b) Será más lenta que si la tabla no estuviese particionada.
c) Depende de qué campo se haya usado para particionar la tabla.
d) El resultado sería el mismo.
SOLUCIONES:
a b c
1. a b c d
d 5.
2.
a b c d 6.
a b c d 9.
a b c d
a b c
3. a b c d 10.
d 7. a b c d
4.
a b c d 8.
a b c d
Capítulo 5
6
Automatización de tareas
Objetivos
3 Comprender las ventajas de automatizar tareas de administración del siste-
ma gestor de bases de datos.
3 Entender los tipos de tareas cuya automatización suele ser más habitual.
3 Conocer los mecanismos existentes para automatizar tareas de administra-
ción en el sistema gestor.
3 Diseñar programas sencillos que lleven a cabo tareas de administración del
sistema.
3 Manejar con soltura el diccionario de datos para recuperar cualquier tipo de
objeto que pueda ser necesario manipular por medio de una tarea de admi-
nistración.
188 Administración de sistemas gestores de bases de datos
Mapa conceptual
Funciones
Triggers
Programador de tareas
realiza Funciones
Puesta en marcha
Seguridad
Explotación
Particionamiento
Reconstrucción de índices
Estadísticas
Compactación de tablas
Otras tareas
Capítulo 6
Automatización de tareas 189
Glosario
6.1. Introducción
● Ahorra tiempo.
● Reduce costes de administración.
● Reduce los errores en la ejecución (elimina el error humano).
Una tarea automatizada habitualmente está compuesta de varias subtareas o sentencias que
se deben ejecutar de manera conjunta. En estos casos será necesario crear previamente un pro-
grama, que será el que se automatice, que contendrá todas las tareas que sea necesario ejecutar.
Para crear y programar estos programas existen básicamente dos opciones:
1. Definir un script o programa externo al sistema gestor que se programará por medio del
programador de tareas del sistema operativo. Este script se conectará al sistema g estor y
Capítulo 6
190 Administración de sistemas gestores de bases de datos
ejecutará las sentencias que necesite. Esta solución no suele ser muy conveniente para
implementar tareas de administración ya que este tipo de tareas normalmente requieren
disponer de credenciales de administrador del sistema gestor, y delegar esta tarea en un
programa externo podría suponer una vulnerabilidad.
2. Definir y programar la rutina en el propio SGBD.
Los sistemas gestores por tanto deben proporcionar al DBA las herramientas necesarias
para crear rutinas que puedan ser programadas, y para programar estas rutinas de forma que se
ejecuten de manera automática.
– Las rutinas externas son programas definidos externamente al sistema gestor, pero que pue-
den ser invocados por este. Se puede especificar el lenguaje en que están escritas, cómo
deben ser llamadas, y si pueden o no modificar los datos o solamente consultarlos. En el
caso de Oracle, por ejemplo, permite la ejecución de aplicaciones y métodos en java (que
ejecuta haciendo uso de su propia máquina virtual de java) y en otros lenguajes (en este
caso cede el control al sistema operativo, que será el encargado de ejecutar esos programas).
– Las rutinas internas son programas definidos en el propio sistema gestor. Existen tres
tipos de rutinas internas: procedimientos, funciones y disparadores (triggers).
La utilización de rutinas internas aporta varias ventajas sobre la ejecución de las mismas
acciones por parte de código externo al sistema gestor:
Capítulo 6
Automatización de tareas 191
manipulación sobre las tablas: en lugar de asignarles permiso de “INSERT” en una ta-
bla se les podría dar permiso de “EXECUTE” en una rutina que realice la inserción,
incorporando un nuevo nivel de abstracción entre los usuarios y las tablas.
Ejemplo
Supongamos que una empresa tiene varias aplicaciones que pueden dar de alta usuarios, y
por política de empresa se desea que los logins de todos los usuarios se creen a partir del
nombre del usuario y las iniciales de sus apellidos, con un formato “NOMBRE-A1-A2”. Para
asegurar que siempre se creen los usuarios correctamente se puede implementar en un pro-
cedimiento almacenado esta funcionalidad, de manera que cuando una aplicación quiera dar
de alta un usuario nuevo solo tiene que llamar a ese procedimiento pasándole el nombre y
apellidos del usuario, y el procedimiento sería quien insertase los datos en la base de datos.
De esta manera nos aseguramos que todos los usuarios se creen conforme a las reglas defini-
das por la empresa, garantizando que se cumplen las políticas de la empresa en ese sentido,
y para los usuarios sería completamente irrelevante cómo se almacene esa información (no
tendrían que saber ni donde se almacena esa información ni qué campos tiene la tabla donde
se almacene).
Por otra parte, la ejecución de este tipo de tareas en el sistema gestor de base de datos su-
pone un consumo considerable de recursos por parte del servidor, que estará destinando un
tiempo de procesamiento y memoria muy valiosos a realizar tareas que realmente no competen
al sistema gestor, cuya principal misión es gestionar el acceso a los datos.
Toma nota
Al igual que sucede con los procedimientos y funciones creadas por medio de un len-
guaje de programación, las rutinas internas que se definen en el sistema gestor deben
estar correctamente documentadas.
Esto implica que se deben recoger en un documento todos los procedimientos y ru-
tinas definidos en las bases de datos, pero también incluir como comentario en la propia
definición de cada rutina, al menos:
En sistemas grandes en los que el rendimiento del sistema se pudiese ver comprometido por
la incorporación de la lógica de negocio en las rutinas internas del sistema gestor, la opción más
eficiente pasaría por implementar una arquitectura cliente/servidor en tres capas, con una capa
intermedia compuesta de servicios web: los clientes no acceden al sistema gestor directamente,
Capítulo 6
192 Administración de sistemas gestores de bases de datos
sino que ejecutan servicios web alojados en un servidor web independiente, y este servidor web
sería el encargado de asumir esa tarea de procesamiento de la lógica de negocio (programada en
los servicios web), y ejecutar en el sistema gestor de base de datos únicamente las sentencias de
manipulación de datos que sean necesarias.
6.3.1. Permisos
Para poder crear procedimientos y funciones, el usuario debe tener el permiso “CREATE PRO-
CEDURE”. Para crear disparadores hay que asignarle al usuario el permiso “CREATE TRI-
GGER”. Si un usuario tiene concedidos permisos para crear procedimientos, podrá también
ejecutar sus propios procedimientos.
Para dar permisos de ejecución en los procedimientos, funciones o triggers de un usuario,
se conceden con el permiso “GRANT EXECUTE”:
Capítulo 6
Automatización de tareas 193
6.3.2. Procedimientos
Los procedimientos se ejecutan como una instrucción y no devuelven ningún valor. Su sintaxis
es la siguiente:
Donde:
– <procedimiento> será el nombre del procedimiento, que se utilizará para poder ejecu-
tarlo.
– AUTHID determina con qué permisos se ejecutará el procedimiento. Por defecto será
siempre INVOKER: cuando un usuario ejecuta el procedimiento utiliza sus permi-
sos, y si el procedimiento accediese a una tabla a la que el usuario no tuviese acceso
provocaría un error por falta de permisos. Si se utiliza la autenticación DEFINER, los
usuarios ejecutarían el procedimiento con los permisos del usuario que creó el proce-
dimiento.
Toma nota
– <param1>, <param2>, …: son los parámetros del procedimiento. Los parámetros con-
tienen valores que se pueden especificar en el momento de llamar al procedimiento, lo
que permite ejecutar el mismo código empleando valores diferentes de cada vez. Si se
quieren ejecutar tareas muy similares sobre distintos objetos, o con ciertas condiciones
cambiantes, en lugar de crear varios procedimientos es conveniente crear un solo pro-
cedimiento y parametrizarlo, de forma que en función de los parámetros que se pasen
al procedimiento se realicen las tareas de un modo u otro. Los parámetros pueden ser de
Capítulo 6
194 Administración de sistemas gestores de bases de datos
entrada (se utilizan para pasar valores al procedimiento. Serán de este tipo por defecto,
si no se indica otra cosa), de salida (se utilizan para devolver valores desde el procedi-
miento, como mensajes de error) o de entrada/salida (permiten pasar un valor al pro-
cedimiento y modificar su valor dentro del procedimiento para generar un valor diferente
de salida).
– <variables>: en los procedimientos se pueden crear variables para almacenar valores
temporales, pero estas variables solo pueden ser usadas en el código interno del proce-
dimiento.
– <CÓDIGO PL/SQL>: es el código que se ejecutará cuando se invoque el procedi-
miento. En este código será donde se hará uso de las variables declaradas así como de
los parámetros.
Los procedimientos se ejecutan por medio de las sentencias: exec, execute o call:
execute <procedimiento>(<param1>, <param2>,…);
Ejemplo
El uso de parámetros nos permite ejecutar el mismo código con distintos empleados y
distintos salarios. Para asignar el salario 3000 al empleado 6, invocaríamos al procedimiento
asignando esos valores a los parámetros de entrada:
execute pr_actualiza_sueldo(12,2800);
Capítulo 6
Automatización de tareas 195
6.3.3. Funciones
Las funciones solo pueden recibir parámetros de entrada, y siempre devuelven un único valor.
Las funciones se pueden utilizar en cualquier contexto igual que los valores que devuelven:
si una función devuelve un varchar2, se podrá usar la función en cualquier lugar en que se
pueda usar un varchar2: para asignar valores a una variable, para devolver valores en una se-
lect, etc.
La sintaxis para la declaración de funciones en Oracle es la siguiente:
Donde:
El valor devuelto por una función se puede consultar incluyendo la función en el select de
una consulta cualquiera.
¿Sabías que...?
En Oracle existe una tabla de sistema llamada “dual” que permite ejecutar consultas
que no accedan a ninguna tabla de la base de datos, lo que es muy útil para compro-
bar el resultado de invocar una función:
Capítulo 6
196 Administración de sistemas gestores de bases de datos
Ejemplo
Podríamos crear una función para consultar cuantas asignaturas aprobó un alumno concreto
que se pase como parámetro:
Podríamos usar la función en una consulta sobre la tabla alumnos para que en el propio
resultado nos indique cuántas asignaturas aprobó cada alumno:
6.3.4. Disparadores
Los disparadores o triggers son rutinas que se ejecutan automáticamente cuando se produce un
evento sobre una tabla. Este evento puede ser una inserción, una eliminación o una actualiza-
ción de los datos de la tabla. La sintaxis para definir un trigger en Oracle es la siguiente:
Donde:
Capítulo 6
Automatización de tareas 197
Ejemplo
El siguiente ejemplo muestra un disparador que se ejecutará cada vez que se modifique el
campo salario de la tabla personal, para registrar en una tabla de log todos los cambios de
salario que se hayan producido.
Capítulo 6
198 Administración de sistemas gestores de bases de datos
A) Comentarios
Existen dos tipos de comentarios en Oracle:
● Comentarios en una línea: se indican precedidos por un guión doble (--) y solo pueden
ocupar una línea.
● Comentarios de varias líneas: se indican entre /* y */ y pueden ocupar tantas líneas
como sea necesario.
B) Variables
Las variables permiten almacenar valores temporalmente dentro de un procedimiento. Si
queremos consultar un dato para usarlo posteriormente, tendremos que usar una variable para
guardar el valor que devuelve la consulta, y esa variable podrá ser usada en cualquier lugar del
procedimiento para consultar su valor.
Los procedimientos, funciones y disparadores contienen una zona específica para la decla-
ración de variables en su sintaxis: justo tras el create y antes del begin.
Para asignar valor a una variable se puede utilizar el operador “:=” (no confundir con el
“=”, que se utiliza solo para comparaciones) o se puede asignar el valor devuelto por una con-
sulta, utilizando la palabra clave into.
v_numero number(12) := 0;
Una variable puede ser de cualquier tipo simple de los manejados por Oracle (varchar2,
number, integer…), o de varios tipos complejos (tabla, matriz o cursor). Para facilitar la asig-
nación de tipos a variables, se pueden utilizar las palabras clave “TYPE” y “ROWTYPE”, de
forma que podemos asignar a una variable el tipo que tenga cualquier tabla o columna de la
base de datos de la siguiente manera:
Capítulo 6
Automatización de tareas 199
● IF: permite ejecutar una sentencia cuando se cumple una condición y otra diferente
cuando no se cumple.
Ejemplo
● CASE: la instrucción CASE tiene dos formas. Una de ellas permite ejecutar distintas
instrucciones para cada valor diferente que pueda tomar una variable o una expre-
sión. La otra permite comprobar distintas condiciones, y si se cumple alguna de ellas
ejecutar un conjunto de instrucciones determinado. Cuando se cumple una de las
condiciones especificadas en el when, no se siguen evaluando el resto de condiciones
del case.
Capítulo 6
200 Administración de sistemas gestores de bases de datos
Ejemplo
D) Bucles
Existen varios tipos de bucles en Oracle, pero el más utilizado por su sencillez, especialmen-
te para recorrer cursores, es el bucle FOR.
● LOOP: las sentencias de dentro del bucle se ejecutarán durante un número indefinido
de vueltas, hasta que aparezca la instrucción EXIT, que finalizará el bucle. Este tipo de
bucle se denomina bucle incondicional.
LOOP
Sentencias
IF (expresion) THEN
Sentencias
EXIT;
END IF;
END LOOP;
● FOR: se ejecuta mientras una variable tome valores entre dos límites.
Capítulo 6
Automatización de tareas 201
La variable <contador> deberá ser una variable numérica que sea capaz de contener los
valores comprendidos entre limite_inferior y limite_superior, los cuales deberán ser expresiones
numéricas (pueden ser funciones que devuelvan números). La variable contador no es necesario
definirla previamente: Oracle definirá una variable de tipo INTEGER al iniciar el bucle, y la
liberará al finalizar el bucle.
Ejemplo
El bucle FOR se suele utilizar también con cursores para ejecutar el bucle tantas veces
como filas contenta el cursor. En este caso la variable “contador” será del tipo que devuelva la
sentencia del cursor, y sus límites inferior y superior serán la primera y última fila del cursor.
Ejemplo
…
FOR datos in c_articulos LOOP
Update articulos set iva=21, pvp=pvp/1.16*1.21 where idarticulo=datos.idarticulo;
END LOOP;
Capítulo 6
202 Administración de sistemas gestores de bases de datos
Ejemplo
IF (v_fecha>sysdate) THEN
BEGIN
Update salidas set fecha=sysdate where fecha=v_fecha;
Delete from salidas where fecha>sysdate;
END;
END IF;
F) Cursores
Los cursores son un tipo especial de variables que permite almacenar los valores devueltos
por una consulta, para poder utilizarlos en otra operación.
Los cursores existen en varios sistemas gestores, pero Oracle es el que mejor rendimiento
obtiene de ellos, ya que su forma de gestionar la memoria es óptima para tratar este tipo de es-
tructuras (en SQL Server por ejemplo dan muchos problemas y en muchos casos recomiendan
directamente no usarlos).
Los cursores se definen en la zona de definición de variables, por medio de la siguiente
sintaxis:
Permiten indicar parámetros que se utilizarán en la consulta, de forma que se puede ejecu-
tar varias veces un mismo cursor desde el código PL/SQL pasándole distintos parámetros en
cada ocasión.
Si el cursor devuelve un solo valor, se puede asignar este valor a una variable directamente
con la sintaxis:
OPEN nombre_cursor(par1,par2);
FETCH nombre_cursor INTO v_aux;
CLOSE nombre_cursor;
Ten en cuenta
Es importante recordar cerrar siempre los cursores, ya que cuando se abre un cursor,
se ejecuta la consulta que lleva asociada y guarda en una tabla temporal en memoria
el resultado de dicha consulta. Esa memoria no se libera hasta que se cierra el cursor
o finaliza el procedimiento, por lo que si un procedimiento tiene muchos cursores y
estos no se cierran podría generarse un error por desbordamiento de memoria.
Si el cursor devuelve muchos valores no podemos volcar el resultado en una variable sim-
ple, sino que tendremos que utilizar un bucle que procese cada una de las filas devueltas:
Capítulo 6
Automatización de tareas 203
La ventaja de esta solución es que no tenemos que preocuparnos de cerrar los cursores: el
cursor se cierra solo al salir del bucle FOR.
¿Sabías que...?
Si se ejecuta un update sobre todos los registros de una tabla que tenga muchos millo-
nes de registros, es fácil que la operación falle debido a que saturará el tablespace de
UNDO (no será capaz de registrar todas las operaciones que tendría que realizar para
deshacer el cambio de tantos millones de registros). En su lugar, se podría crear un
procedimiento que vaya actualizando registro a registro (o mejor, partición a partición,
si es posible) y que vaya haciendo commit cada cierto tiempo para evitar saturar el
tablespace de UNDO.
Los procedimientos no incluyen por defecto un “commit”, por lo que es importante acor-
darse de ejecutar un commit tras la ejecución de un procedimiento si queremos que los cam-
bios realizados por este pasen a ser persistentes sobre la base de datos.
Capítulo 6
204 Administración de sistemas gestores de bases de datos
BEGIN
EXCEPTION WHEN <error> THEN
END;
Los manejadores de excepciones pueden definirse de forma que capturen un solo tipo de
incidencia…
BEGIN
SELECT 1/0 FROM DUAL;
EXCEPTION WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(‘Se ha producido el error ‘||SQLERRM);
RAISE_APPLICATION_ERROR(SQLCODE, SQLERRM);
END;
Desde cualquier rutina interna de Oracle (incluso desde un bloque de instrucciones) se puede
llamar a cualquier otra función o procedimiento invocándolo directamente como una instruc-
ción más (sin necesidad de incluir call, exec o execute).
Del mismo modo, se pueden utilizar las funciones o procedimientos incluidos en paquetes
del diccionario de datos, precediendo el nombre del procedimiento o función del nombre del
paquete al que pertenece.
Ten en cuenta
Oracle por defecto deshabilita la salida por pantalla, por lo que si quieres invocar el procedimiento
“dbms_output.put_line” desde un programa tendrás que habilitarla previamente para poder ver los
mensajes mostrados en la pantalla, ejecutando la sentencia: SET SERVEROUTPUT ON.
Capítulo 6
Automatización de tareas 205
Ejemplo
La automatización de tareas nos permite llevar a cabo tareas repetitivas con poco esfuerzo y
de forma sencilla. En un sistema gestor existen dos tipos de tareas que suele ser conveniente
automatizar:
a) Tareas de base de datos: orientadas a realizar tareas que afectan a los datos de un esquema.
Este tipo de tareas las programa el diseñador de la base de datos por medio de triggers,
funciones o procedimientos, y normalmente implementan reglas de negocio (un pro-
cedimiento para dar de alta empleados que automáticamente los inserte también como
usuarios del sistema, un trigger que se ejecute al borrar un producto que lo guarde en
una tabla de histórico, etc.).
b) Tareas de administración: orientadas al mantenimiento del sistema gestor y de las bases
de datos. Son tareas definidas por el DBA por medio de un procedimiento, que tienen
como objetivo facilitar el mantenimiento de los objetos de las bases de datos y de las
propias bases de datos, y normalmente se automatiza su ejecución (es decir, no hay un
evento que las dispare, sino que se programan para ejecutarse en determinado momen-
to). Para ofrecer esta funcionalidad, los sistemas gestores necesitarán un mecanismo que
permita programar las tareas (registrar en algún lugar, normalmente en el diccionario
de datos, las tareas pendientes de ejecutar y en qué momento se debe ejecutar cada
una de ellas), y un agente que se encarga de conectarse al sistema gestor, consultar si hay
tareas pendientes de ejecución, y si es así se encarga de lanzarlas. Estos agentes se suelen
implementar por medio de un servicio del sistema operativo independiente del sistema
gestor, aunque no siempre es así.
Capítulo 6
206 Administración de sistemas gestores de bases de datos
1. Un cursor busca por medio de una consulta sobre el diccionario de datos los objetos
que puedan presentar una problemática concreta.
Ten en cuenta
2. Por medio de un bucle se recorre el cursor, y para cada objeto devuelto por el mismo
se ejecuta una sentencia que solucione el problema.
Recuerda
3 Por lo general, las sentencias necesarias para solucionar estos problemas serán senten-
cias del DDL, que no se pueden ejecutar directamente dentro de un procedimiento, sino
que habrá que ejecutarlas dentro de una sentencia “execute immediate”.
Por ejemplo, para desfragmentar una tabla que se pase como parámetro dentro de
un procedimiento tendríamos que usar:
Algunas de las principales tareas de administración de la base de datos (habrá muchas más
tareas que se puedan automatizar a nivel de sistema operativo: comprobación de espacio, purgado
de logs, etc.) que se pueden automatizar por parte del DBA son las que se indican a continuación.
Capítulo 6
Automatización de tareas 207
Las copias de seguridad de la base de datos son seguramente las tareas más susceptibles de ser
automatizadas, aunque normalmente esta tarea se suele delegar en el sistema operativo, ya que
aunque hay sistemas gestores que permiten realizar las copias de seguridad empleando proce-
dimientos del propio sistema gestor de base de datos, lo más habitual es que esta tarea se lleve a
cabo por medio de aplicaciones que deben ser invocadas desde el sistema operativo.
6.4.3. Particionamiento
El particionamiento permite dividir una tabla grande en “subtablas” que pueden ser tratadas
por separado.
Esto implica varias ventajas:
● Optimiza el acceso a la tabla: si tenemos una tabla con varios millones de filas de datos
históricos de ventas, lo habitual es que se consulten o modifiquen los datos del último
mes o año, pero cada vez que se lance una consulta, esta recorrerá los datos de toda
la tabla, con lo que ello implica. Si se particiona la tabla por mes o año, la mayoría de
consultas se ejecutarán sobre la partición actual, por lo que el número de registros que
debe recorrer decrece considerablemente.
● Optimiza las tareas de administración: lo habitual es que los cambios en una tabla muy
grande se concentren en un conjunto concreto de datos (los correspondientes al últi-
mo mes, año, etc.). Si tenemos que realizar cualquier operación de administración que
afecte solamente a esos datos (mover a un disco más lento, comprimirla, reconstruir los
índices, lanzar las estadísticas, etc.), es mucho más rápido hacerlo solo sobre la partición
que los contiene que no sobre la tabla completa.
● Facilita el purgado de datos: si una organización tiene una política que establece que
únicamente se mantendrán en la tabla los datos de los últimos X años y se particiona la
tabla por mes o año, para realizar las tareas de purgado únicamente será necesario pasar
a disco las particiones del año a purgar y borrar la partición correspondiente en la tabla.
● Facilita el mantenimiento: si hago un update sobre todos los registros de una tabla, lo
que hace internamente el sistema es crear una tabla nueva en el tablespace temporal con
los cambios que estoy realizando, y cuando acaba de crear la tabla temporal, la reemplaza
por la tabla en la que estoy haciendo los cambios. Si queremos hacer una modificación
sobre todos los datos de una tabla muy grande, probablemente sature el temporal, por
lo que no nos dejará realizar la modificación. Si lo hago partición a partición, es más
rápido y no colapsa el temporal.
● Permite la realización de operaciones de optimización avanzadas como el intercambio
de particiones.
¿Sabías que...?
Una tabla se particiona siempre por un campo de la tabla, definiendo los rangos de valores que
pertenecen a cada partición, por lo que el campo de particionamiento debe ser numérico (ente-
ro) o de tipo fecha (date o timestamp), y deben emplearse campos con restricción NOT NULL.
Capítulo 6
208 Administración de sistemas gestores de bases de datos
1 01/01/20 1 04/01/20 1 1 4
2 01/01/20 2 04/01/20 2 1 5
3 01/01/20 3 05/01/20 4 1 6
… 1 2 4
5000 02/01/20 1 04/01/20 3 2 4
5001 02/01/20 1 06/01/20 3 3 5
… 4 2 6
12101 03/01/20 2 null 4 3 12
12102 03/01/20 3 07/01/20 1 2 0
… 2 5 9
– Con particiones fijas: las particiones existentes se especifican cuando se crea la tabla y
estas no varían: si en una empresa con varias sedes se quiere particionar la tabla de ventas
por código de sede, siempre que no se añadan sedes nuevas las particiones en que se
dividirá la tabla serán fijas y no será necesario crear particiones regularmente.
– Con particiones variables: este tipo de particionamiento se suele dar cuando la par-
tición es por fechas. A medida que transcurre el tiempo y se van añadiendo nuevos
registros a la tabla, será necesario crear nuevas particiones para almacenar los registros
que corresponden a nuevos días, meses, años, etc. En este tipo de particiones es
en las que resulta más adecuado crear las particiones de forma automática al entrar en
la nueva fecha (con un procedimiento que se ejecute diariamente a las 00:00, por
ejemplo).
1. Creación de particiones: cuando se crea una tabla con particiones variables, en la sentencia
de creación de la tabla se especifican las particiones que contendrá inicialmente, y todas
Capítulo 6
Automatización de tareas 209
Fecha Partición
01/2021 P_202101
02/2021 P_202102
03/2021 P_202103
04/2021 P_FINAL
…
Para que el particionamiento sea realmente efectivo, cada mes se debería crear una
nueva partición para almacenar los registros correspondientes a ese mes. Esto se hace
dividiendo la partición final en una partición correspondiente al nuevo mes y otra
partición final:
Fecha Partición
01/2021 P_202101
02/2021 P_202102
03/2021 P_202103
04/2021 P_202104
05/2021 P_FINAL
…
2. Compresión de particiones: en tablas muy grandes puede ser adecuado comprimir las par-
ticiones antiguas, ya que no solo se reduce el espacio que ocupan sino que además me-
jora su rendimiento. La compresión es una herramienta que debe usarse con cuidado,
ya que si bien se optimizan las consultas sobre la tabla, se penalizan las modificaciones
y borrados, por lo que conviene utilizarla únicamente cuando sabemos que los datos ya
insertados no van a cambiar. Además, hay que tener cuidado con los índices, ya que al
comprimir una tabla o partición, los índices quedan en estado “unusable”. Si una tabla
se particiona cada día o cada mes, cada vez que se crea una partición nueva se podría
automatizar también la compresión de la última partición existente.
3. Reconstrucción de índices: si se comprimen particiones, los índices de esas particiones
quedan en un estado no válido y es necesario reconstruirlos, por lo que se puede auto-
matizar también esta tarea como parte del proceso de particionamiento.
Capítulo 6
210 Administración de sistemas gestores de bases de datos
Toma nota
Para evitar el bloqueo es conveniente programar la actualización de estadísticas para que se eje-
cute en un horario de mínima carga, de modo que se garantiza que se mantengan actualizadas
y esto no provoque problemas a la hora de explotar la información por parte de los usuarios.
6.4.5. Desfragmentación
La operación diaria con las tablas de la base de datos (modificaciones y borrados, especialmente)
produce en muchas ocasiones fragmentación en las tablas. Que una tabla esté fragmentada im-
plica no solo que esté ocupando más espacio del necesario, sino que cuando se lanza una con-
sulta que tiene que recorrer dicha tabla, la consulta tendrá que leer de disco todos los registros
de la tabla, estén vacíos o no, lo que supone una degradación del rendimiento de las consultas.
Es posible automatizar la compactación de las tablas para evitar que se produzcan estas situa-
ciones por medio de un procedimiento que busque en el diccionario de datos tablas o índices
que tengan espacios internos inutilizados y los compacten.
Existen dos problemas fundamentalmente relacionados con estos espacios internos que se
pueden solucionar con una compactación:
Capítulo 6
Automatización de tareas 211
Capítulo 6
212 Administración de sistemas gestores de bases de datos
Recuerda
3 Tanto las operaciones de purgado como de paso a histórico pueden ser automatizadas
por medio de un procedimiento programado para que se ejecute regularmente (a princi-
pios de año normalmente) que se encargue de volcar al histórico la información del año
anterior y de purgar la que tenga una antigüedad determinada.
La opción más sencilla para crear una tarea programada es crear un script, guardarlo en un
fichero y programarlo por medio del programador de tareas del sistema operativo.
El problema de esta opción es que para ejecutar el script es necesario indicar las credencia-
les del usuario que lo ejecutará, lo cual podría suponer un problema de seguridad, y que tiene
ciertas limitaciones en cuanto a las sentencias que se pueden ejecutar.
Capítulo 6
Automatización de tareas 213
Ejemplo
BEGIN
DBMS_SCHEDULER.CREATE_JOB (
job_name => ‹estadisticas’,
job_type => ‹STORED_PROCEDURE’,
job_action => ‹pr_actualiza_estadisticas’,
number_of_arguments => 2,
start_date => to_date(‘18-12-20 00.30.00’,’dd-mm-yy hh24.mi.ss’),
repeat_interval => ‘FREQ=DAILY’,
enabled => FALSE
);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(‘estadisticas’,1,’ nominas’);
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE(‘estadisticas’,2,’personal’);
DBMS_SCHEDULER.ENABLE(‘estadisticas’);
END;
/
En el caso de Oracle, la ejecución de las tareas programadas no se lleva a cabo por medio
de un servicio externo al sistema gestor, sino que uno de los grupos de procesos que contiene
la instancia de base de datos, el llamado “procesos de colas de trabajo” (job queue processes),
corresponde al planificador de tareas. Uno de los procesos de este grupo es el encargado de
coordinar la ejecución de las tareas programadas: consulta la tabla DBA_SCHEDULER_JOBS
y para cada tarea que deba ejecutar activa un proceso esclavo al que encarga ejecutar la tarea.
Accede al recurso digital Automatización de tareas, donde se proponen varios ejercicios con
los que se podrá practicar la programación de tareas sencillas en Oracle por medio de jobs.
Capítulo 6
214 Administración de sistemas gestores de bases de datos
Para que un usuario pueda programar tareas, debe tener dos permisos:
Las cadenas son muy útiles para crear planes de mantenimiento: una secuencia de tareas de
mantenimiento que se ejecutan secuencialmente y siempre con la misma periodicidad. Un
plan de mantenimiento puede incluir tareas como la revisión de los índices, la actualización de
estadísticas, la ejecución de copias de seguridad, etc.
La forma más sencilla de crear una cadena en Oracle es por medio del SQL Developer,
que incluye una interfaz gráfica que permite crear de forma sencilla cada uno de los pasos de
la cadena y las reglas que determinan en qué condiciones se ejecutará cada uno de los pasos.
El recurso digital Automatización de tareas con SQL Developer contiene un tutorial donde
se muestra la forma de crear jobs (para programar tareas individuales) y cadenas (para crear pla-
nes de mantenimiento) empleando el interfaz gráfico del SQL Developer.
Resumen
Capítulo 6
Automatización de tareas 215
n Las rutinas internas permiten llevar a cabo todo tipo de tareas de mantenimiento de
forma automática: gestionar el particionamiento de las tablas, realizar copias de segu-
ridad, mantener las estadísticas actualizadas, eliminar la fragmentación de los objetos
de base de datos, asegurar la corrección de los índices, llevar a cabo los procesos de
purgado y pase a histórico, etc.
Ejercicios propuestos
a) ¿Cuándo se ejecuta?
b) ¿Qué es lo que hace?
c) Explica cómo podrías hacer para que se ejecute esta noche a las 23:30.
2. Define una función que reciba como parámetro el nombre de una tabla y devuelva el
nombre del esquema al que pertenece esa tabla. Ten en cuenta que:
a) Si hay varios esquemas que contienen una tabla con dicho nombre, la función
puede devolver cualquiera de ellos.
b) Si no existe la tabla, devolverá ‘tabla no encontrada’.
c) Cualquier usuario puede ejecutar la función, aunque no tenga permisos de acceso
a la tabla buscada.
d) La función se debe ejecutar siempre con los permisos del usuario administrador
que define la función.
Capítulo 6
216 Administración de sistemas gestores de bases de datos
a) Todos los domingos a las 00:30 debe compactar las tablas del esquema “PROCE-
DIMIENTOS”.
b) Todos los domingos entre el 9 de junio y el 28 de julio, a las 01:30, debe recons-
truir los índices del esquema “PROCEDIMIENTOS”.
c) Todos los primeros de mes de 2020, a las 02:00, hasta el 31 de diciembre de
2030, debe actualizar las estadísticas del esquema “PROCEDIMIENTOS”.
Actividades de autoevaluación
1. Si particionamos una tabla (señala la incorrecta):
a) Es más sencillo gestionar sus índices.
b) Facilita el purgado de datos y optimiza su administración.
c) Optimiza su acceso y su administración.
d) Permite realizar tareas de optimización avanzadas.
Capítulo 6
Automatización de tareas 217
6. ¿Cuál será el salario de los empleados tras la ejecución de este bloque de código?
begin
update empleados set salario=1000;
commit;
select 1/0 from dual; -- excepción
update empleados set salario=2000;
commit;
exception when others then
update empleados set salario=salario*1.5;
commit;
end;
a) 1000.
b) 1500.
c) 2000.
d) Se produce un error de ejecución.
Capítulo 6
218 Administración de sistemas gestores de bases de datos
9. ¿Cuál será el salario de los empleados tras la ejecución de este bloque de código?
begin
update empleados set salario=1000;
commit;
update empleados set salario=2000;
rollback;
update empleados set salario=3000;
end;
a) 1000.
b) 2000.
c) 3000.
d) Se produce un error de ejecución.
SOLUCIONES:
a b c
1. a b c d
d 5.
2.
a b c d 6.
a b c d 9.
a b c d
a b c
3. a b c d 10.
d 7. a b c d
a b c
4. a b c d
d 8.
Capítulo 6
7
Alta disponibilidad
Objetivos
3 Comprender los beneficios que puede aportar la implementación de medi
das que incrementen la disponibilidad de los datos.
3 Conocer las alternativas existentes para incrementar la disponibilidad de la
información.
3 Evaluar las ventajas y desventajas de cada una de las opciones en base a sus
características.
220 Administración de sistemas gestores de bases de datos
Mapa conceptual
Tecnologías SGBDD
Clúster
Cloud
realiza Funciones
Puesta en marcha
Seguridad
Explotación
Glosario
Capítulo 7
Alta disponibilidad 221
Fragmentación. Reparto de la información entre los distintos nodos que forman un siste
ma gestor de bases de datos distribuido, de forma que cada nodo dispondrá única
mente de una parte de los datos.
Nodo. Sistema de procesamiento autónomo que dispondrá de un repositorio de datos lo
cal y estará conectado a través de una red con otros nodos del sistema, de modo que
podrá gestionar su propia información y cooperar con el resto de nodos para manejar
información global.
Replicación. Consiste en duplicar la información entre los distintos nodos de un sistema
distribuido, de forma que cada nodo almacenará localmente toda la información re
plicada.
Sistema gestor de base de datos distribuidas (SGBDD). Software que gestiona una base
de datos distribuida, haciendo que la distribución de los datos sea transparente al
usuario.
Software as a service (SaaS). Modelo de negocio mediante el cual empresas del sector TIC
ofrecen servicios de computación en la nube (tanto almacenamiento como procesa
miento de la información).
7.1. Introducción
El SGBD es uno de los recursos más críticos de las organizaciones, ya que una caída del sistema
que impida el acceso a la información puede suponer serias dificultades para continuar con la
actividad productiva de la organización. Es por ello que la alta disponibilidad se convierte en
una característica clave del sistema gestor, por lo que será fundamental implementar medidas
orientadas a garantizar que los datos estén siempre accesibles, y en caso de fallo del sistema, que
sea posible recuperar su normal funcionamiento lo más rápidamente posible.
Existen diversas tecnologías o arquitecturas orientadas a garantizar la rápida recuperación
del sistema en caso de fallo. Las más habituales son las siguientes:
Capítulo 7
222 Administración de sistemas gestores de bases de datos
1. Por medio de hardware dedicado: el cliente contrata un servidor dedicado (que será una
máquina virtual dedicada) con las características que se deseen. En caso de necesitar
mayor capacidad de procesamiento, memoria o cualquier otro recurso, sería muy sen-
cillo realizar el cambio.
2. Por medio de la contratación de servicios: en este caso lo que se contrata es un paquete que
garantiza una capacidad de almacenamiento, un número máximo de conexiones men-
suales o de transferencia de información, y estos servicios se ofrecen desde la infraes-
tructura del proveedor.
7.2.1. Características Proveedor
externo
La contratación del sistema gestor en la nube es
muy sencilla, ya que normalmente se realiza a tra-
vés de un formulario en el que se van seleccio-
nando las características que se desean: número de
réplicas, memoria disponible, capacidad de alma- Internet
cenamiento, posibilidad de disponer de réplicas
en ubicaciones remotas para prevención de desas-
tres, configuración de las copias de seguridad, etc.
A medida que se van seleccionando las distintas
características, se va recalculando el importe que
supondría mensualmente disponer de ese servicio. Clientes
Estos sistemas son muy flexibles y pueden Figura 7.1
modificarse de forma prácticamente instantánea Esquema de SGBD en la nube.
las opciones contratadas, por lo que si en cual-
quier momento se produjese un pico importante de peticiones que saturasen el sistema, se po-
dría contratar una réplica, duplicar la cantidad de memoria disponible o modificar los recursos
contratados y prácticamente de forma inmediata tendríamos disponible la réplica, la memoria
o el recurso solicitados.
Capítulo 7
Alta disponibilidad 223
repentinamente mucho más espacio de almacenamiento, solo habría que indicarlo por
medio de una web de configuración e inmediatamente se dispondría de dicho espacio.
● Alta disponibilidad y durabilidad: el proveedor garantiza el servicio 24 x 7, y además
este estará disponible desde cualquier parte del mundo.
● Alto nivel de seguridad.
● Completamente administrado, con los ahorros de personal que ello supone. Garantiza-
ría además la actualización de versiones y la instalación de parches de seguridad.
● Compatibilidad con los sistemas gestores centralizados existentes actualmente: la ma-
yoría de empresas que ofrecen servicios de almacenamiento en la nube trabajan con
los principales servidores de bases de datos, con lo cual sería posible seguir trabajando
con el mismo entorno conocido (Oracle, SQL Server, Postgree, MySQL…) pero en
la nube, además de disponer de servicios adicionales como sistemas gestores NoSQL,
que podrían ser más adecuados para determinadas tareas de la organización y por su
características pueden sacar mayor rentabilidad al trabajo en la nube.
● Es la solución que mejor se adapta a entornos de teletrabajo.
Las principales desventajas de este tipo de sistemas son las habituales del trabajo en la nube:
Accede al recurso digital Base de datos en la nube, donde se indican los pasos que es nece-
sario seguir para registrarse en el servicio de AWS Education como formador, crear una clase y
matricular a un grupo de alumnos para que puedan acceder al aula y crear su propio servidor en
la nube, crear un sistema gestor y realizar una configuración básica para poder acceder a él por
medio de una aplicación cliente.
Capítulo 7
224 Administración de sistemas gestores de bases de datos
Los primeros sistemas gestores de bases de datos existentes eran sistemas centralizados, instalados
normalmente en un mainframe con gran capacidad de procesamiento. El incremento de pres-
taciones de las redes de computadoras, junto a la necesidad cada vez mayor de compartir infor-
mación, y la tendencia de las grandes empresas a la descentralización, dieron lugar a la aparición
de sistemas en los que la información ya no reside en un nodo central, sino que se distribuye a
través de todo el sistema: los sistemas gestores de bases de datos distribuidos.
Podemos definir una base de datos distribuida (BDD) como un conjunto de bases de
datos lógicamente relacionadas que están repartidas entre diferentes espacios lógicos y físicos
conectados por una red, y un sistema de gestión de bases de datos distribuidas (SGBDD)
como el software que gestiona una base de datos distribuida, haciendo que la distribución de
los datos sea transparente al usuario (que tendrá la percepción de estar trabajando con una
base de datos centralizada).
En general, un sistema de computación distribuida consiste en un conjunto de compu-
tadores interconectados entre sí a través de una red, que cooperan para realizar una determi-
nada tarea. Los SGBDD están formados por sistemas de procesamiento autónomos (llamados
nodos) que dispondrán de repositorios de datos locales, conectados a través de una red con
el resto de nodos, de modo que podrán gestionar su propia información y cooperar con el
resto de nodos para manejar información global del sistema, dando lugar a dos tipos de tran-
sacciones:
Al igual que los SGBDD, presentan numerosas diferencias con respecto a los sistemas ges-
tores centralizados, también las bases de datos creadas con estos sistemas (bases de datos distri-
buidas) presentarán diferencias con respecto a las bases de datos centralizadas, especialmente en
lo que respecta a su diseño y arquitectura.
Figura 7.2
Esquema de un SGBDD.
Capítulo 7
Alta disponibilidad 225
7.4.1. Características
Para que un sistema gestor sea considerado como SGBDD, debe presentar una serie de carac-
terísticas:
a) Los datos estarán distribuidos en distintas ubicaciones, pero debe existir una relación
lógica entre ellos.
b) Cada uno de los nodos del sistema debe ser autónomo, y ser capaz de realizar proce-
samiento local. Esta característica los diferencia de los sistemas centralizados en clúster
(disponen de varios nodos pero estos forman parte de un sistema indivisible).
c) Debe haber un uso global del sistema. Las operaciones que requieran acceder a informa-
ción almacenada en varios nodos diferentes se realizarán de forma transparente al usuario.
d) Control del sistema: en los sistemas centralizados el control del sistema recae completa-
mente en el nodo central, que será un cuello de botella, mientras que en los distribuidos
deben coordinarse todos los nodos.
e) Datos replicados: en los sistemas centralizados no se suelen almacenar datos replicados,
ya que pueden dar lugar a inconsistencias, mientras que en los distribuidos sí es habitual
replicar la misma información en distintos nodos (penalizan las operaciones de modi-
ficación pero aportan mayor disponibilidad y mejoran notablemente las consultas y la
disponibilidad de la información).
f) Diferentes mecanismos de optimización: en los sistemas centralizados la optimización
está basada en minimizar el coste en recursos y tiempo de las consultas, mientras que en
los distribuidos la base de la optimización es tratar de maximizar el procesamiento local.
g) En los sistemas centralizados hay una política común de seguridad y privacidad, mien-
tras que en los distribuidos es posible realizar una gestión de seguridad local y otra
global, lo que aporta mayor potencia y flexibilidad.
h) En un sistema centralizado, una caída del nodo principal afectaría a todo el sistema. En
un sistema distribuido, en caso de caída de un nodo afectaría a la localización donde se
ubica ese nodo, pero el resto del sistema podría seguir trabajando.
● Su instalación es más económica: es más barato adquirir varios equipos de gama media
para instalar los nodos que adquirir un gran sistema de procesamiento central de una
potencia equivalente.
● Son más flexibles, y se ajustan mejor a una estructura organizativa descentralizada: si
hubiese que añadir una nueva sede al sistema, bastaría con instalar en ella su nodo co-
rrespondiente y vincularlo al sistema distribuido.
● Permite el crecimiento incremental de la base de datos: pueden implementarse a partir de la
interconexión de bases de datos ya existentes, y pueden implementarse inicialmente sobre
un número reducido de nodos e ir incrementando el número de nodos paulatinamente.
● Reduce la sobrecarga de comunicación con respecto a un sistema en red centralizado,
ya que la mayoría del procesamiento es local.
Capítulo 7
226 Administración de sistemas gestores de bases de datos
Capítulo 7
Alta disponibilidad 227
1. Cuando la información que se consulta es común entre los distintos nodos, la solución
pasa por replicar la información (copiarla en todos los nodos que la necesiten). La re-
plicación es la mejor forma de ofrecer alta disponibilidad y tolerancia a fallos: al tener
la información duplicada, si uno de ellos cae o su seguridad se ve comprometida, se
puede recuperar la información a partir de otros nodos de la red, que seguirán estando
disponibles. Esto conlleva sin embargo un enorme coste tanto en espacio de almacena-
miento como en procesamiento, para mantener actualizadas todas las réplicas (si cambio
un dato en un nodo, debo trasladar ese cambio al resto de los nodos asegundando que
ese cambio no se solape con otros cambios que se hayan realizado en el resto de nodos).
Cuando la información está replicada, en cada nodo se dispone de toda la información
existente, y por tanto se consulta únicamente la información local. Mientras el nodo
local no falle, no se consultarán nunca el resto de nodos.
2. Cuando cada nodo utiliza información propia que apenas es consultada por el resto
de nodos, la mejor solución es fragmentar la información: dividirla entre los distintos
nodos, de forma que cada uno acceda únicamente a su información local.
La fragmentación de los datos puede ser:
Capítulo 7
228 Administración de sistemas gestores de bases de datos
Ejemplo
Una empresa dispone de una base de datos para gestionar su personal con una tabla con la
siguiente estructura:
Tras la adquisición de una nueva sede, la empresa quiere redistribuir a sus empleados en
tre las dos sedes y crear una base de datos distribuida para poder acceder a toda la información
desde cualquiera de las sedes.
La empresa podría organizarse internamente de distintas formas, y la estructura de su base
de datos distribuida tendría que adaptarse a la organización que escogiese:
● Si decidiesen dedicar una sede a oficinas y otra a logística, podrían dividir la tabla
de personal de forma que en la oficina únicamente tengan acceso a la información
necesaria para elaborar las nóminas del personal, y en la de logística a la informa
ción necesaria para organizar los equipos de trabajo. Tendríamos de esta forma una
fragmentación vertical para la tabla de personal, y las tablas de departamento y espe
cialidad solamente serían necesarias en la sede de logística, por lo que los esquemas
locales de las sedes serían:
SEDE 1:
NOMINAS(codemp, nombre, apellidos, salario, feccontratacion)
SEDE 2:
PERSONAL(codemp, coddepto, proyecto)
DEPARTAMENTO (coddepto, departamento, ciudad)
ESPECIALIDAD (codesp, especialidad)
● Si cada sede estuviese en una ciudad, y decidiesen dividir los departamentos y sus
empleados entre las dos sedes en función de la ciudad en la que está el departamento,
en cada sede guardarían únicamente la información del personal de los departamen
tos que pertenezcan a esa sede, realizando por tanto una fragmentación horizontal:
la estructura de la tabla de personal es exactamente igual en ambas sedes pero cada
sede guardaría únicamente su información. Las especialidades serán exactamente las
mismas en ambas sedes, por lo que lo ideal sería replicar dicha tabla. La información
de los departamentos podría fragmentarse o replicarse. Al ser una tabla pequeña, y
dado que puede ser de interés disponer en ambas sedes de la información de todos
los departamentos, en este caso se replicará la tabla, por lo que los esquemas locales
de las dos sedes serían los siguientes:
Capítulo 7
Alta disponibilidad 229
SEDE 1:
PERSONAL1(codemp, nombre, apellidos, p.coddepto, salario, feccontratacion,
proyecto)
from PERSONAL p join DEPARTAMENTO d on (p.coddepto=d.coddepto)
where ciudad=’XXX’;
DEPARTAMENTO (coddepto, departamento, ciudad)
ESPECIALIDAD (codesp, especialidad)
SEDE 2:
PERSONAL2(codemp, nombre, apellidos, p.coddepto, salario, feccontratacion,
proyecto)
from PERSONAL p join DEPARTAMENTO d on (p.coddepto=d.coddepto)
where ciudad=’YYY’;
DEPARTAMENTO (coddepto, departamento, ciudad)
ESPECIALIDAD (codesp, especialidad)
Toma nota
● Esquema global: donde se define el conjunto de la información que forma parte del
sistema y su organización.
● Esquema de fragmentación: determina el modo en que se fragmentará la información
de cada tabla.
● Esquema de localización: establece la ubicación de los fragmentos en los nodos del
sistema.
● Esquema local: cada esquema local sería el equivalente al esquema relacional de cada
nodo, e incluirá los objetos propios cada SGBD.
Capítulo 7
230 Administración de sistemas gestores de bases de datos
B) Dblinks
Un enlace de base de datos (en inglés database link o dblink) permite establecer una co-
nexión entre dos sistemas gestores de bases de datos de modo que desde uno de los sistemas se
pueda acceder directamente a las tablas del otro sistema gestor.
¿Sabías que...?
Los dblinks son especialmente útiles en entornos distribuidos, ya que serán los que permiti
rán acceder a la información almacenada en los nodos remotos. Por medio de los dblinks se
podrán realizar consultas globales cuando la información se encuentre fragmentada entre los
distintos nodos.
Ejemplo
Supongamos una empresa con tres sedes que quiere distribuir la información de sus clientes
entre todas sus sedes, de forma que desde cada sede se trabaje normalmente solo con los
clientes locales pero también puedan consultar el resto de clientes de la empresa.
La empresa guarda la siguiente información de sus clientes:
Dado que la empresa tiene tres sedes, crearíamos tres tablas, una para cada sede:
Para consultar la información de todos los clientes desde la sede 1, podríamos crear una
vista de la siguiente manera:
Capítulo 7
Alta disponibilidad 231
Para crear un enlace de base de datos será necesario indicar la cadena de conexión al SGBD
remoto y las credenciales de usuario que se emplearán para establecer la conexión.
C) Replicación
La replicación consiste en duplicar información en distintos nodos, de forma que todos
ellos puedan acceder rápidamente a la información (la tienen disponible en local), pero a cam-
bio de un mayor coste de almacenamiento y sobre todo una mayor complejidad a la hora de
administrar la manipulación de los datos replicados.
La replicación puede llevar a cabo de tres formas diferentes:
1. Unidireccional
Existe un nodo maestro, donde se realizan los cambios, y un nodo esclavo, donde se re-
plican los cambios realizados en el maestro. Los cambios solamente se podrán llevar a cabo en
el maestro, porque si se realizasen en el esclavo no se replicarían en el maestro. Se usa nor-
malmente para copias de seguridad en caliente, de modo que si fallase el SGBD maestro se
podría seguir trabajando con el esclavo cambiando únicamente las cadenas de conexión de las
aplicaciones.
2. Bidireccional
Se establece también entre dos nodos, pero ambos nodos funcionan simultáneamente como
maestros y esclavos, por lo que todos los cambios se replicarán independientemente de donde
se realicen.
3. Multidireccional
Se establece entre varios nodos, actuando uno de ellos como maestro y el resto como escla-
vos, y los cambios realizados en el maestro se trasladan a todos los esclavos. Esta opción se utiliza
mucho en grandes organizaciones que además de disponer de un nodo de réplica disponen de
un data warehouse o sistemas de big data en tiempo real, de forma que cualquier cambio rea-
lizado en el SGBD operacional se traslada inmediatamente tanto a su réplica como a todos los
demás sistemas que sea necesario.
Capítulo 7
232 Administración de sistemas gestores de bases de datos
Ten en cuenta
7.5.1. Fragmentación
Para fragmentar la información en Oracle será necesario crear enlaces de bases de datos (Da-
tabase Links o dblinks) que permitan interconectar los distintos nodos. Los dblinks permiten
Capítulo 7
Alta disponibilidad 233
establecer conexiones directas entre dos instancias Oracle, de forma que desde una de ellas se
puede hacer referencia directamente a las tablas de la otra instancia.
La sintaxis para la creación de un dblink es la siguiente:
Donde:
– SHARED permite crear el enlace de forma que sea compartido entre varios usuarios.
– PUBLIC permite definirlo de forma que sea público y cualquier usuario de la instancia
local pueda utilizarlo.
– Cadena_de_conexion: será la entrada del TNSNAMES del servidor que se utilizará
para establecer la conexión con el servidor remoto (puede indicarse la cadena de cone-
xión directamente, sin incluirla en el TNSNAMES).
Generalmente los dblinks se establecen entre dos instancias Oracle, pero esto no tiene por
qué ser así: se pueden crear enlaces con cualquier sistema gestor, pero en ese caso la conexión
se establece a través de un conector ODBC, por lo que es necesario crear un driver ODBC
previamente en el servidor local que se conecte al servidor remoto. El problema de este tipo de
conexiones es que limita considerablemente las operaciones que se pueden llevar a cabo en el
sistema remoto (dará problema con campos que tengan tipos de datos incompatibles o al reali-
zar operaciones propias del sistema gestor).
Ten en cuenta
Los dbinks pueden comprometer la seguridad del sistema, ya que para crear un dblink,
es necesario indicar en la sentencia de creación del enlace el usuario y contraseña que
se utilizará para acceder a la instancia remota, de modo que cualquier usuario que se co
necte usando ese dblink tendrá acceso a esas credenciales y las empleará para establecer
el enlace.
Lo más adecuado para solucionar estos problemas es crear en el sistema gestor remoto
un usuario personalizado para cada usuario que haga uso de un dblink, de forma que cada
usuario usará sus propias credenciales también en el equipo remoto.
Accede al recurso digital Distribución de datos en Oracle donde se plantea un caso práctico
de fragmentación de información entre distintos nodos de un SGBD heterogéneo. Durante la acti-
vidad se crearán distintas bases de datos y se establecerán conexiones entre ellas por medio de
dblinks, lo que permitirá comprobar y comprender su funcionamiento y su utilidad en un SGBDD.
Capítulo 7
234 Administración de sistemas gestores de bases de datos
7.5.2. Replicación
Hasta la versión 12c de Oracle, la replicación se podía realizar de dos maneras, ambas con so-
porte para replicación multidireccional:
● Asíncrona, por medio de streams: es la forma más simple de replicación. Todas las sen-
tencias ejecutadas sobre el sistema gestor origen se almacenan en una cola, y se van
enviando al destino, que las irá aplicando a medida que las vaya recibiendo. En este caso
habrá un proceso que se encargará de leer el redo log para guardar todos los cambios en
la cola, y otro proceso que regularmente se encargará de enviar los cambios registrados
en la cola al o a los destinos.
● Síncrona, por medio de eventos: en este caso también hay un proceso que se encargará
de leer los cambios registrados en el redo log, pero en este caso lo que hace es generar
eventos que serán capturados en los destinos para replicarlos. Esta replicación tiene una
configuración más compleja, pero permite registrar eventos producidos en cualquier
sistema gestor, no tiene por qué ser solamente Oracle, y puede llevarse a cabo por
medio de conectores externos, aunque Oracle dispone de su propio conector, Oracle
Golden Gate, para realizar esta tarea. Este conector no se instala con el propio sistema
gestor, sino que es un software independiente.
¿Sabías que...?
Para volcar la información de los sistemas operacionales a los sistemas data wa
rehouse se utilizan procesos de carga que se ejecutan en horario de baja carga
para no afectar al rendimiento del sistema. Esta operativa no es factible para los
sistemas de big data que procesan información en tiempo real, lo que motivó la
aparición de este tipo de replicación basada en eventos, capaz de trasladar in
mediatamente cualquier cambio que se produzca en el sistema operacional para
que sea replicado en cualquier otro sistema de la organización, de forma que
estos siempre mantengan su información actualizada.
1. Proceso manager: es el proceso maestro que controla la actividad de golden gate (el que
inicia el resto de procesos). Este proceso debe estar en ejecución en todos los servidores
involucrados en la replicación.
2. Proceso de extracción: lee el redo log y extrae todos los cambios que hayan sido comi-
tados.
3. Cola de salida: fichero donde se almacenan los cambios extraídos encolándolos para su
envío.
4. Proceso de data pump: este proceso es opcional. Su función es trasladar los cambios
registrados en la cola de salida a la cola de entrada de todos los nodos esclavos para su
Capítulo 7
Alta disponibilidad 235
replicación. Es opcional ya que esta funcionalidad la puede llevar a cabo el propio pro-
ceso extractor.
5. Proceso colector: se ejecuta en el servidor destino. Es el encargado de recibir todos los
cambios enviados por todos los servidores origen que deban ser replicados en el servi-
dor destino y registrarlos en la cola de entrada.
6. Cola de entrada: fichero donde se almacenan los cambios pendientes de aplicar en el
servidor destino.
7. Proceso de entrega: encargado de aplicar los cambios en el servidor destino.
Manager
Figura 7.6
Arquitectura de la replicación
con Golden Gate.
Para profundizar en el funcionamiento de un sistema de replicación con Oracle Golden Gate, ac-
cede al recurso digital Replicación con Oracle Golden Gate donde se propone una actividad
que incluye la instalación del software y la configuración de una replicación unidireccional.
Capítulo 7
236 Administración de sistemas gestores de bases de datos
por lo que la mayoría de organizaciones optan por otras soluciones como los clústers o el
trabajo en la nube, ya que facilitan considerablemente la administración del sistema, garanti-
zan totalmente el cumplimiento de las propiedades ACID y son en general más robustas que
un SGBDD.
7.6.1. Características
Un clúster es un conjunto de equipos (nodos), unidos normalmente por medio de una cone-
xión de alta velocidad, que operan conjuntamente como si fuesen un único equipo. Mientras
que en un SGBDD todos los nodos son sistemas gestores de bases de datos, en un clúster esto
no es así: habrá nodos que gestionarán las bases de datos, otros serán nodos de datos (solamente
almacenan información), y normalmente hay también nodos de administración (que se encar-
gan de coordinar el funcionamiento del clúster).
Nodo admin
Tanto la funcionalidad como la información almacenada dentro de los nodos están habi-
tualmente fragmentadas y replicadas dentro del clúster, de forma que en caso de fallo de uno de
los nodos el sistema podría seguir funcionando normalmente: si cae un nodo SQL (que trabaje
como sistema gestor) o un nodo de administración, el sistema puede seguir trabajando normal-
mente si hay otros nodos SQL y de administración, y si cae un nodo de datos, la información
que almacenaba se buscará en los otros nodos donde esté replicada.
Toma nota
Capítulo 7
Alta disponibilidad 237
● Alto rendimiento: no solo se distribuye la información entre los distintos nodos sino
también el procesamiento de la misma, por lo que podrán ejecutarse tareas en paralelo
incrementando el rendimiento del sistema.
● Alta disponibilidad: el sistema podrá seguir trabajando aunque caigan uno o incluso más
nodos.
● Balanceo de carga: la carga se distribuye entre los nodos, evitando cuellos de botella.
● Escalabilidad: para dotar de mayor capacidad al sistema bastaría con incorporar nuevos
nodos (eso sí, esta capacidad de escalabilidad tiene un límite, ya que la gestión de la
información en un clúster es centralizada).
Además, el uso de un clúster permite emplear servidores que, sin ser punteros, trabajando
conjuntamente ofrezcan mejor rendimiento que un único servidor central muy potente, lo que
ahorra costes y facilita la reutilización de los servidores.
La principal desventaja de instalar un clúster de servidores es su coste, no en compara-
ción con un SGBDD, sino en comparación con el coste que implicaría el almacenamiento en
la nube.
Capítulo 7
238 Administración de sistemas gestores de bases de datos
Todos los elementos estarán conectados entre sí por medio de redes de alta capacidad.
La información se almacena en un sistema de archivos compartido, y todos los sistemas ges-
tores tienen acceso al mismo a través de una caché de alta capacidad que facilita la coordinación
a la hora de aplicar los cambios llevados a cabo por cada sistema gestor: el sistema de archivos
retiene en caché los datos a escribir hasta que tiene varios cambios a realizar, y entonces los
vuelca todos juntos. Si todos los cambios afectan a los mismos datos, se realizan directamente en
la caché, no es necesario acceder continuamente al disco.
Para almacenar los datos compartidos de esta manera es necesario un sistema de archivos
especial (no es posible utilizar directamente los provistos por sistemas operativos como Linux,
Unix o Windows). Es posible utilizar cualquier sistema de archivos de clúster, pero Oracle
recomienda su propio sistema de archivos: ASM (Automatic Storage Manager), que permite
almacenar tanto la información de la base de datos como datos no estructurados (imágenes,
documentos, etc.) de forma compartida.
Una de las ventajas de Oracle RAC es que comprueba automáticamente errores en el al-
macenamiento. La información se almacena empleando tecnologías RAID que permiten tanto
replicar la información como comprobar la presencia de errores, de forma que si detecta un
error en algún disco, automáticamente redirigirá las peticiones a un disco que tenga esos mis-
mos datos y no presente sectores defectuosos.
Resumen
Capítulo 7
Alta disponibilidad 239
Ejercicios propuestos
Una clínica dental cuenta con cuatro consultas ubicadas en distintas ciudades. Para ges
tionar las citas de sus clientes, cuentan con una base de datos centralizada en la sede
principal compuesta de las siguientes tablas:
Figura 7.9
Estructura de la base de datos de la clínica dental.
Capítulo 7
240 Administración de sistemas gestores de bases de datos
Tras sufrir varios cortes en la conexión a internet de varias de las consultas, han decidi
do instalar un SGBD en cada consulta y distribuir la información entre todos ellos, de for
ma que la facturación de los servicios prestados a los clientes se seguirá realizando de
forma centralizada desde la sede principal pero cada sede gestionará de forma autónoma
sus citas y sus clientes.
Para poder realizar la facturación, desde la sede principal deberán poder consultar las
citas realizadas por cada cliente en el resto de sedes.
2. Indica qué enlaces de bases de datos tendrías que crear y las sentencias necesarias
para crearlos suponiendo que todas las sedes usasen servidores Oracle y en el tnsna
mes.ora ya existiese una entrada de conexión para cada sede.
4. ¿Qué tipo de replicación implementarías para garantizar que todas las sedes accedan
siempre a información actualizada, teniendo en cuenta que desde cualquier sede se
podría modificar la información de las clínicas?
Actividades de autoevaluación
1. ¿A qué tipo de sistemas le afectaría más una caída en la conexión a internet en todas
las sedes de la organización?
a) Un SGBDD.
b) Un SGBD centralizado.
c) Un servidor en la nube.
d) Un clúster de servidores.
Capítulo 7
Alta disponibilidad 241
7. Tengo una base de datos operacional a partir de la que quiero alimentar en tiempo
real un sistema de big data y un data warehouse. ¿Qué tipo de replicación necesi
taré?
a) Todas ellas.
b) Bidireccional.
c) Unidireccional.
d) Multidireccional.
9. Un SGBDD cuyos nodos tienen instalados distintos sistemas gestores de bases de da
tos es un SGBDD:
a) Equitativo.
b) Homogéneo.
c) Centralizado.
d) Heterogéneo.
Capítulo 7
242 Administración de sistemas gestores de bases de datos
10. Una red interna de alta velocidad será más necesaria en:
a) SGBDD.
b) SGBD centralizados.
c) Servidores en la nube.
d) Servidores en clúster.
SOLUCIONES:
a b c
1. a b c d
d 5.
2.
a b c d 6.
a b c d 9.
a b c d
a b c
3. a b c d 10.
d 7. a b c d
a b c
4. a b c d
d 8.
Capítulo 7