Módulo 03: Sistemas gestores de bases de datos
Objetivos del módulo
- Definir qué es un sistema gestor de bases de datos (SGBD) y diferenciarlo de la base de datos
- Conocer los objetivos y las funciones de un SGBD: definición, manipulación, control, integridad, seguridad, concurrencia, recuperación y diccionario de datos
- Comprender la arquitectura ANSI/SPARC de tres niveles (externo, conceptual e interno) y aplicarla a un ejemplo concreto
- Distinguir entre independencia lógica e independencia física de los datos
- Diferenciar esquema y ejemplar (instancia) de una base de datos
- Identificar los componentes internos de un SGBD y el recorrido de una consulta por ellos
- Clasificar los lenguajes de un SGBD: DDL, DML (procedimental y no procedimental), DCL, TCL y lenguajes anfitriones
- Conocer los distintos usuarios y roles que interactúan con una base de datos
- Entender qué es una transacción y las propiedades ACID
- Conocer las arquitecturas de los sistemas de bases de datos: centralizada, cliente/servidor, dos y tres capas, distribuida
- Comparar los principales SGBD del mercado
- Conocer a nivel conceptual la arquitectura de Oracle Database: instancia y base de datos, arquitectura multitenant (CDB y PDB), usuarios y esquemas, ediciones y versiones
1. ¿Qué es un SGBD?
1.1. Definición
En el módulo 00 viste que una base de datos es una colección de datos integrados, persistentes y compartidos. Pero los datos, por sí solos, no hacen nada: hace falta un software que los organice, los proteja y atienda las peticiones de los usuarios. Ese software es el SGBD.
📘 Concepto: Un sistema gestor de bases de datos (SGBD; en inglés Database Management System, DBMS) es un conjunto de programas que permite definir, construir, manipular, controlar y compartir bases de datos entre diversos usuarios y aplicaciones, garantizando la integridad, la seguridad, la concurrencia y la recuperación de los datos, y proporcionando independencia entre los datos y los programas que los usan.
Recuerda la analogía del módulo 00: la base de datos es la biblioteca (los libros ordenados) y el SGBD es el bibliotecario, que sabe dónde está cada libro, decide quién puede llevárselo, evita que dos personas se lleven el mismo ejemplar y repara los daños.
1.2. Base de datos frente a SGBD
| Aspecto | Base de datos | SGBD |
|---|---|---|
| Qué es | Los datos (y su descripción) | El software que los gestiona |
| Ejemplo | Las tablas del esquema EMPRESA con sus filas | Oracle AI Database 26ai |
| Dónde reside | En ficheros, en almacenamiento persistente | En memoria (procesos en ejecución) y en ficheros de programa |
| Se diseña o se instala | Se diseña (bloques 2 y 3 del curso) | Se instala y se configura (módulo 22) |
| Cambia | Continuamente (cada inserción, cada modificación) | Al actualizar de versión o aplicar parches |
| Relación | Un SGBD puede gestionar muchas bases de datos | Una base de datos la gestiona un SGBD |
⚠️ Importante: En el lenguaje cotidiano se dice “instalar la base de datos” o “la base de datos se ha caído” cuando se habla del SGBD. Es un uso aceptado, pero en un contexto técnico o en un examen distingue siempre ambos conceptos.
2. Objetivos y funciones de un SGBD
2.1. Objetivos
Los SGBD nacieron para resolver los problemas de los sistemas de ficheros (módulo 01). Sus objetivos son, por tanto, el reverso de aquellos problemas:
| Objetivo | Problema de los ficheros que resuelve |
|---|---|
| Abstracción de la información: el usuario no necesita saber cómo se almacenan físicamente los datos | Dependencia física |
| Independencia de los datos respecto a los programas | Dependencia física |
| Redundancia mínima y controlada | Redundancia |
| Consistencia de los datos | Inconsistencia |
| Integridad: los datos cumplen las reglas definidas | Integridad |
| Seguridad: solo acceden quienes están autorizados, y solo a lo que deben | Seguridad |
| Concurrencia: muchos usuarios trabajan a la vez sin interferir | Acceso concurrente |
| Recuperación ante fallos | Atomicidad, pérdida de datos |
| Facilidad de acceso: lenguajes de consulta para preguntas no previstas | Dificultad de acceso |
| Tiempo de respuesta adecuado | Rendimiento |
2.2. Funciones
Para cumplir esos objetivos, un SGBD ofrece un conjunto de funciones:
Función de definición (descripción)
Permite especificar la estructura de la base de datos: tipos de datos, tablas, columnas, relaciones, restricciones, vistas, índices. Esta descripción se hace con el lenguaje de definición de datos (DDL) y se almacena en el diccionario de datos. Abarca los tres niveles de la arquitectura (externo, conceptual e interno) que verás en el apartado 3.
Función de manipulación
Permite consultar (recuperar) y actualizar (insertar, modificar y borrar) los datos. Se realiza con el lenguaje de manipulación de datos (DML).
Función de control
Agrupa las tareas que garantizan que la base de datos funciona correctamente y de forma segura:
| Subfunción | Descripción | Ejemplo en Oracle |
|---|---|---|
| Integridad | Comprobar que los datos cumplen las restricciones definidas (claves, valores válidos, referencias) | Rechazar un empleado con salario negativo por la restricción ck_emp_salario |
| Seguridad | Autenticar a los usuarios y controlar qué puede hacer cada uno sobre cada objeto | El usuario becario solo puede consultar PRODUCTOS, no modificarla |
| Concurrencia | Coordinar el acceso simultáneo de muchos usuarios evitando interferencias | Bloquear la fila de un cliente mientras se modifica |
| Recuperación | Restaurar la base de datos a un estado correcto tras un fallo (de transacción, de sistema o de disco) | Tras un corte de luz, deshacer las transacciones no confirmadas y rehacer las confirmadas |
| Auditoría | Registrar quién hace qué y cuándo | Anotar todos los accesos a la tabla de nóminas |
Función de diccionario de datos
📘 Concepto: El diccionario de datos (o catálogo) es una base de datos interna del SGBD que contiene los metadatos: la descripción de todos los objetos (tablas, columnas, tipos, restricciones, vistas, índices), de los usuarios y sus privilegios, del almacenamiento y de las estadísticas que usa el optimizador.
El SGBD consulta el diccionario constantemente: para comprobar que una tabla existe, que el usuario tiene permiso, que un valor cumple una restricción o para decidir cómo ejecutar una consulta. En Oracle, el diccionario se puede consultar con SQL mediante vistas como USER_TABLES, ALL_TAB_COLUMNS o DBA_USERS (módulo 26).
-- Ejemplo ilustrativo: qué tablas tengo y cuántas filas tenían en el último análisis
SELECT table_name, num_rows
FROM user_tables
ORDER BY table_name;
Otras funciones (utilidades)
- Carga y descarga de datos (en Oracle: SQL*Loader, Data Pump).
- Copias de seguridad y restauración (en Oracle: RMAN).
- Monitorización y ajuste del rendimiento.
- Reorganización del almacenamiento.
- Herramientas de desarrollo e interfaces (en Oracle: SQL*Plus, SQLcl, SQL Developer).
3. La arquitectura ANSI/SPARC de tres niveles
3.1. Origen
En 1975, el comité ANSI/X3/SPARC (Standards Planning and Requirements Committee del organismo de normalización estadounidense ANSI) publicó un informe provisional, completado en 1978 (Tsichritzis y Klug), que proponía una arquitectura de referencia para los SGBD. Aunque ningún SGBD comercial la implementa al pie de la letra, es el marco conceptual con el que se explican todos.
Su idea central es separar la visión que tienen los usuarios de los datos de la forma en que se almacenan físicamente, mediante tres niveles de abstracción, cada uno descrito por un esquema.
3.2. Los tres niveles
flowchart TB
U1["Usuario / aplicación<br/>de Recursos Humanos"] --> E1["Esquema externo 1<br/>(vista de RR. HH.)"]
U2["Usuario / aplicación<br/>de Ventas"] --> E2["Esquema externo 2<br/>(vista de Ventas)"]
U3["Usuario / aplicación<br/>Directorio"] --> E3["Esquema externo 3<br/>(vista del directorio)"]
E1 --> C["ESQUEMA CONCEPTUAL<br/>(toda la BD: entidades, atributos,<br/>relaciones, restricciones)"]
E2 --> C
E3 --> C
C --> I["ESQUEMA INTERNO<br/>(ficheros, bloques, índices,<br/>organización física)"]
I --> BD[("Base de datos<br/>almacenada")]
subgraph NE["Nivel externo"]
E1
E2
E3
end
subgraph NC["Nivel conceptual"]
C
end
subgraph NI["Nivel interno"]
I
end
| Nivel | Describe | Quién lo usa | Cuántos hay | Pregunta que responde |
|---|---|---|---|---|
| Externo (de usuario, de visión) | La parte de la BD que interesa a un usuario o grupo, tal como la quiere ver | Usuarios finales y programadores | Muchos (uno por cada tipo de usuario o aplicación) | ¿Qué datos ve este usuario y con qué forma? |
| Conceptual (lógico global) | Toda la base de datos: qué datos hay, cómo se relacionan y qué restricciones cumplen, sin detalles físicos | DBA y diseñadores | Uno | ¿Qué datos hay en la organización? |
| Interno (físico) | Cómo se almacenan los datos: ficheros, registros, índices, bloques, compresión, rutas de acceso | DBA y el propio SGBD | Uno | ¿Cómo y dónde se guardan? |
💡 Consejo: Piensa en un edificio de oficinas. El nivel interno son las tuberías, el cableado y la estructura de hormigón (solo le interesan al arquitecto y a mantenimiento). El nivel conceptual es el plano completo de todas las plantas. El nivel externo es lo que ve cada empresa inquilina: solo su planta, con su decoración y sus carteles, sin saber nada de las demás.
3.3. Correspondencias (mappings) entre niveles
Entre cada par de niveles adyacentes, el SGBD mantiene una correspondencia (o regla de transformación) que traduce las peticiones y los datos de un nivel al otro:
- Correspondencia externa/conceptual: indica cómo se obtiene cada elemento de un esquema externo a partir del esquema conceptual (por ejemplo, que la columna “sueldo_anual” de una vista es
salario * 14de la tablaEMPLEADOS). - Correspondencia conceptual/interna: indica cómo se almacena físicamente cada elemento del esquema conceptual (por ejemplo, que la tabla
EMPLEADOSestá en el tablespaceUSERS, en tales ficheros, con un índice B-tree sobreemail).
Cuando un usuario hace una consulta sobre su esquema externo, el SGBD la traduce al nivel conceptual y de ahí al interno; los resultados recorren el camino inverso.
3.4. Ejemplo concreto con el esquema EMPRESA
Veamos los tres niveles para una parte del esquema EMPRESA: los empleados y sus departamentos.
Nivel conceptual. Describe todas las tablas, todas sus columnas, sus tipos y sus restricciones. En Oracle se expresa con CREATE TABLE (lo aprenderás en los módulos 23 y 24):
-- Ejemplo ilustrativo (versión resumida de empresa_crear.sql)
CREATE TABLE empleados (
emp_id NUMBER(6) CONSTRAINT pk_empleados PRIMARY KEY,
nombre VARCHAR2(30) CONSTRAINT nn_emp_nombre NOT NULL,
apellidos VARCHAR2(50) CONSTRAINT nn_emp_apellidos NOT NULL,
email VARCHAR2(60) CONSTRAINT nn_emp_email NOT NULL,
telefono VARCHAR2(15),
fecha_alta DATE CONSTRAINT nn_emp_fecha_alta NOT NULL,
oficio VARCHAR2(30) CONSTRAINT nn_emp_oficio NOT NULL,
salario NUMBER(8,2) CONSTRAINT nn_emp_salario NOT NULL,
comision NUMBER(8,2),
jefe_id NUMBER(6),
dept_id NUMBER(4),
CONSTRAINT uq_emp_email UNIQUE (email),
CONSTRAINT ck_emp_salario CHECK (salario > 0),
CONSTRAINT fk_emp_jefe FOREIGN KEY (jefe_id) REFERENCES empleados (emp_id),
CONSTRAINT fk_emp_dept FOREIGN KEY (dept_id) REFERENCES departamentos (dept_id)
);
O, en la notación del esquema relacional que usarás en el bloque 3:
EMPLEADOS (emp_id, nombre, apellidos, email, telefono, fecha_alta, oficio, salario, comision, jefe_id, dept_id)
jefe_id → EMPLEADOS(emp_id)dept_id → DEPARTAMENTOS(dept_id)- UK: email
DEPARTAMENTOS (dept_id, nombre, localidad, presupuesto)
Nivel externo. Cada grupo de usuarios ve solo lo que necesita. En SQL, los esquemas externos se implementan sobre todo con vistas (módulo 26) y con privilegios (módulo 37):
-- Ejemplo ilustrativo. Esquema externo 1: Recursos Humanos ve los datos salariales
CREATE VIEW v_rrhh_empleados AS
SELECT e.emp_id, e.nombre, e.apellidos, e.fecha_alta, e.oficio,
e.salario, e.comision, e.salario * 14 AS sueldo_anual,
d.nombre AS departamento
FROM empleados e
LEFT JOIN departamentos d ON d.dept_id = e.dept_id;
-- Esquema externo 2: el directorio interno NO ve salarios ni comisiones
CREATE VIEW v_directorio AS
SELECT e.nombre || ' ' || e.apellidos AS empleado,
e.email, e.telefono, d.nombre AS departamento, d.localidad
FROM empleados e
LEFT JOIN departamentos d ON d.dept_id = e.dept_id;
Observa que la vista de RR. HH. tiene una columna, sueldo_anual, que no existe en el nivel conceptual: se calcula (es la correspondencia externa/conceptual). Y que el directorio ve el nombre completo en una sola columna, aunque en el nivel conceptual son dos.
Nivel interno. Describe cómo se guardan físicamente los datos. Parte de esa descripción la decide el DBA y parte el propio SGBD:
-- Ejemplo ilustrativo: decisiones del nivel interno
-- Un índice para acelerar las búsquedas de empleados por departamento
CREATE INDEX ix_emp_dept ON empleados (dept_id);
Y el resto de los detalles internos son invisibles para el usuario: la tabla EMPLEADOS se guarda en el tablespace USERS, que corresponde a un fichero de datos users01.dbf; sus filas ocupan bloques de 8 KB; la restricción uq_emp_email se apoya en un índice B-tree creado automáticamente; etc.
| Elemento | Nivel externo | Nivel conceptual | Nivel interno |
|---|---|---|---|
| Ejemplo | Vistas v_rrhh_empleados, v_directorio | Tablas EMPLEADOS, DEPARTAMENTOS con todas sus columnas y restricciones | Tablespace USERS, fichero users01.dbf, bloques de 8 KB, índices B-tree |
| Lo ven | Cada departamento, su vista | El DBA y los diseñadores | El DBA y el SGBD |
| Se define con | CREATE VIEW, GRANT | CREATE TABLE, restricciones | CREATE INDEX, CREATE TABLESPACE, parámetros de almacenamiento |
4. Independencia de datos
4.1. Concepto
📘 Concepto: La independencia de datos es la capacidad de modificar el esquema de un nivel sin tener que modificar el esquema del nivel superior (ni, por tanto, los programas que lo usan). Basta con ajustar la correspondencia entre ambos niveles.
Es el objetivo principal de la arquitectura de tres niveles, y la solución al problema de la dependencia física de los sistemas de ficheros (módulo 01). Hay dos tipos:
4.2. Independencia física
📘 Concepto: La independencia física es la capacidad de modificar el esquema interno sin tener que modificar el esquema conceptual ni los esquemas externos (ni las aplicaciones).
Ejemplos de cambios que no deben afectar a las aplicaciones:
- Crear o borrar un índice para acelerar una consulta.
- Mover una tabla a otro disco, a otro tablespace o a almacenamiento SSD.
- Cambiar el tamaño de bloque, comprimir una tabla o particionarla por fechas.
- Reorganizar los ficheros para recuperar espacio.
💻 Ejemplo: La consulta “empleados del departamento 30” tarda demasiado. El DBA crea el índice
ix_emp_dept. La aplicación de RR. HH. no se toca: sigue ejecutando exactamente la misma consulta, pero ahora el SGBD usa el índice y responde más rápido. Esto es independencia física.
Es relativamente fácil de lograr y todos los SGBD relacionales la ofrecen en gran medida.
4.3. Independencia lógica
📘 Concepto: La independencia lógica es la capacidad de modificar el esquema conceptual sin tener que modificar los esquemas externos ni las aplicaciones que los usan (salvo las que necesiten usar los elementos nuevos o modificados).
Ejemplos:
- Añadir una columna nueva a una tabla (por ejemplo,
fecha_nacimientoenEMPLEADOS): las vistas y aplicaciones existentes no la usan, así que no se ven afectadas. - Añadir una tabla nueva (por ejemplo,
FORMACIONES). - Dividir una tabla en dos y recomponerla con una vista que conserve el nombre y las columnas antiguas, para que las aplicaciones sigan funcionando.
💻 Ejemplo: Se decide que el teléfono de los empleados pase a una tabla aparte
TELEFONOS_EMPLEADO(porque ahora pueden tener varios). La vistav_directoriose redefine para obtener el teléfono principal de la nueva tabla, pero conserva sus mismas columnas. La aplicación del directorio, que consulta la vista, no cambia. Esto es independencia lógica.
Es más difícil de conseguir que la física: si se borra una columna que una aplicación usa, ninguna correspondencia puede inventarse el dato.
4.4. Resumen
| Tipo | Se modifica | No deben cambiar | Se ajusta la correspondencia | Dificultad |
|---|---|---|---|---|
| Física | Esquema interno | Esquema conceptual, esquemas externos, aplicaciones | Conceptual/interna | Menor |
| Lógica | Esquema conceptual | Esquemas externos, aplicaciones | Externa/conceptual | Mayor |
flowchart TB
EXT["Esquemas externos<br/>y aplicaciones"]
CON["Esquema conceptual"]
INT["Esquema interno"]
EXT ---|"correspondencia externa/conceptual<br/>→ INDEPENDENCIA LÓGICA"| CON
CON ---|"correspondencia conceptual/interna<br/>→ INDEPENDENCIA FÍSICA"| INT
5. Esquemas y ejemplares
5.1. Definiciones
📘 Concepto:
- El esquema de una base de datos es la descripción de su estructura: qué tablas hay, qué columnas tienen, de qué tipos, qué restricciones cumplen. Se define al diseñar la base de datos y cambia muy raramente. También se le llama intensión de la base de datos.
- El ejemplar (o instancia, instance; también estado u ocurrencia) de una base de datos es el conjunto de datos que contiene en un momento determinado. Cambia continuamente, con cada inserción, modificación o borrado. También se le llama extensión.
Una analogía: el esquema es el formulario en blanco de matrícula (con sus casillas: nombre, DNI, ciclo…); los ejemplares son los formularios rellenos de todos los alumnos que se han matriculado hoy.
5.2. Ejemplo
Esquema (no cambia):
DEPARTAMENTOS (dept_id, nombre, localidad, presupuesto)
Ejemplar el lunes a las 9:00:
DEPT_ID NOMBRE LOCALIDAD PRESUPUESTO
---------- ---------------- ------------ -----------
10 DIRECCIÓN Madrid 500000
20 VENTAS Madrid 350000
30 INFORMÁTICA Valencia 420000
40 CONTABILIDAD Sevilla 150000
50 MARKETING Barcelona 200000
60 LOGÍSTICA Zaragoza 180000
70 INVESTIGACIÓN Bilbao
Ejemplar el lunes a las 12:00, después de asignar presupuesto al departamento 70 y crear un departamento nuevo (datos inventados para el ejemplo):
DEPT_ID NOMBRE LOCALIDAD PRESUPUESTO
---------- ---------------- ------------ -----------
10 DIRECCIÓN Madrid 500000
...
70 INVESTIGACIÓN Bilbao 90000
80 CALIDAD Valencia 60000
El esquema es el mismo; el ejemplar ha cambiado.
5.3. Ejemplar válido
⚠️ Importante: Un ejemplar es válido si cumple todas las restricciones definidas en el esquema. Una de las funciones esenciales del SGBD es garantizar que la base de datos pasa siempre de un ejemplar válido a otro ejemplar válido. Por ejemplo, si el esquema dice que
nombrees único, el SGBD rechazará la inserción de un segundo departamento llamadoVENTAS.
5.4. Esquemas en la arquitectura ANSI/SPARC
Cada nivel de la arquitectura tiene su esquema:
| Nivel | Esquema | Otros nombres |
|---|---|---|
| Externo | Esquemas externos | Subesquemas, vistas de usuario |
| Conceptual | Esquema conceptual | Esquema lógico global |
| Interno | Esquema interno | Esquema físico, esquema de almacenamiento |
💡 Consejo: La palabra esquema tiene además un significado específico en Oracle: el conjunto de objetos (tablas, vistas, índices…) que pertenecen a un usuario. Lo verás en el apartado 12.4. Y la palabra instancia también tiene en Oracle un significado propio (la memoria y los procesos del servidor, apartado 12.2), distinto de “ejemplar”. Por eso en este curso preferimos el término ejemplar para el contenido de la base de datos.
6. Componentes de un SGBD
6.1. Visión general
Un SGBD es un software muy complejo, formado por varios módulos que colaboran. Aunque cada producto los organiza a su manera, la estructura general es la siguiente:
flowchart TB
subgraph USR["Usuarios y aplicaciones"]
U1["Usuarios finales<br/>(herramientas)"]
U2["Aplicaciones<br/>(programas)"]
U3["DBA<br/>(DDL, DCL)"]
end
USR --> PC
subgraph PC["Procesador de consultas"]
AN["Analizador<br/>(sintáctico y semántico)"]
OPT["Optimizador<br/>de consultas"]
EJ["Motor de<br/>ejecución"]
AN --> OPT --> EJ
end
subgraph GA["Gestor de almacenamiento"]
GT["Gestor de transacciones<br/>(concurrencia y bloqueos)"]
GB["Gestor de buffer<br/>(caché de bloques)"]
GF["Gestor de ficheros"]
GR["Gestor de<br/>recuperación"]
end
EJ --> GT
EJ --> GB
GT --> GB
GB --> GF
GR --> GB
AN -.->|"consulta metadatos"| DIC
OPT -.->|"consulta estadísticas"| DIC
GF --> DAT[("Ficheros<br/>de datos")]
GF --> IDX[("Índices")]
GF --> DIC[("Diccionario<br/>de datos")]
GT --> LOG[("Registro de<br/>transacciones<br/>(log)")]
GR --> LOG
6.2. El procesador de consultas
Recibe las sentencias (SQL) de los usuarios y las convierte en operaciones de bajo nivel.
| Componente | Función |
|---|---|
| Analizador sintáctico (parser) | Comprueba que la sentencia está bien escrita según la gramática del lenguaje (SELEC en lugar de SELECT es un error sintáctico) |
| Analizador semántico | Comprueba con el diccionario que las tablas y columnas existen, que los tipos son compatibles y que el usuario tiene privilegios |
| Reescritura | Sustituye las vistas por su definición y simplifica la consulta |
| Optimizador | Genera varios planes de ejecución posibles (qué índices usar, en qué orden combinar las tablas, qué algoritmo de join aplicar) y elige el de menor coste estimado, usando las estadísticas del diccionario (número de filas, valores distintos, distribución…) |
| Motor de ejecución | Ejecuta el plan elegido, pidiendo los datos al gestor de almacenamiento |
📘 Concepto: El optimizador es lo que hace posible que SQL sea declarativo: tú dices qué quieres y el optimizador decide cómo obtenerlo. Oracle usa un optimizador basado en costes (Cost-Based Optimizer, CBO). Podrás ver el plan que elige con
EXPLAIN PLAN(módulo 26).
6.3. El gestor de transacciones
Garantiza las propiedades ACID de las transacciones (apartado 9):
- Control de concurrencia: coordina las transacciones simultáneas para que no interfieran (con bloqueos y, en Oracle, con versiones de los datos que permiten leer sin bloquear).
- Gestor de bloqueos: concede, registra y libera los bloqueos sobre filas y tablas; detecta interbloqueos (deadlocks).
- Coordina el COMMIT (confirmación) y el ROLLBACK (anulación) con el registro de transacciones.
6.4. El gestor de almacenamiento
Hace de intermediario entre los datos en disco y el resto del SGBD:
| Componente | Función |
|---|---|
| Gestor de ficheros | Reserva espacio en disco y organiza los datos en ficheros, bloques y registros (los conceptos del módulo 01) |
| Gestor de buffer | Mantiene en memoria una caché de bloques (buffer pool; en Oracle, database buffer cache). Decide qué bloques se quedan en memoria y cuáles se descartan (por ejemplo, con algoritmos de tipo LRU, “el menos usado recientemente”) y cuándo se escriben en disco los bloques modificados |
| Gestor de autorización e integridad | Comprueba los privilegios y las restricciones |
6.5. El diccionario de datos
Lo viste en el apartado 2.2. Desde el punto de vista de los componentes, es la fuente de información que consultan todos los demás módulos: el analizador para validar nombres y permisos, el optimizador para obtener estadísticas, el gestor de almacenamiento para saber dónde está cada tabla.
6.6. El registro de transacciones (log) y el gestor de recuperación
📘 Concepto: El registro de transacciones (transaction log; en Oracle, redo log) es un fichero en el que el SGBD anota, antes de modificar los datos en disco, todos los cambios que realizan las transacciones. Esta técnica se llama registro de escritura anticipada (Write-Ahead Logging, WAL).
Gracias al log, el gestor de recuperación puede, tras un fallo:
- Rehacer (redo) los cambios de las transacciones confirmadas que no habían llegado a escribirse en los ficheros de datos.
- Deshacer (undo) los cambios de las transacciones no confirmadas que sí se habían escrito.
💡 Consejo: Por eso un
COMMITes rápido aunque modifique muchos datos: el SGBD no necesita escribir en el momento todos los bloques modificados en los ficheros de datos (lo hará después, con calma); le basta con asegurarse de que el registro de transacciones está escrito en disco. Si el servidor se cae un segundo después, el log permite reconstruir los cambios.
6.7. El recorrido de una consulta
Sigamos lo que ocurre al ejecutar:
SELECT nombre, salario
FROM empleados
WHERE dept_id = 30;
- La aplicación envía el texto de la sentencia al servidor.
- El analizador sintáctico comprueba la gramática: correcto.
- El analizador semántico consulta el diccionario: la tabla
EMPLEADOSexiste, tiene las columnasnombre,salarioydept_id, y el usuario tiene privilegioSELECTsobre ella. - El optimizador consulta las estadísticas: la tabla tiene 24 filas y existe un índice sobre
dept_id. Valora dos planes: leer toda la tabla o usar el índice. Con tan pocas filas, probablemente decida leer la tabla completa (es más barato); con millones de filas, usaría el índice. - El motor de ejecución ejecuta el plan y pide los bloques al gestor de buffer.
- El gestor de buffer busca los bloques en la memoria; si no están (fallo de caché), pide al gestor de ficheros que los lea del disco.
- Se filtran las filas con
dept_id = 30, se extraen las columnas pedidas y se envía el resultado a la aplicación.
6.8. El recorrido de una modificación
UPDATE empleados
SET salario = salario * 1.05
WHERE emp_id = 121;
COMMIT;
- Análisis y optimización, como en la consulta.
- El gestor de transacciones inicia una transacción y obtiene un bloqueo sobre la fila del empleado 121 (nadie más puede modificarla hasta que termine).
- Se guarda la imagen anterior del dato (para poder deshacer: en Oracle, en el undo).
- Se anota el cambio en el registro de transacciones (redo).
- Se modifica el bloque en memoria (en el buffer). Aún no se escribe en el fichero de datos.
- Al ejecutar
COMMIT, se asegura que el registro de transacciones está escrito en disco, se libera el bloqueo y se confirma al usuario. - Más tarde, un proceso del SGBD escribe el bloque modificado en el fichero de datos.
7. Lenguajes de un SGBD
7.1. Clasificación por función
Un SGBD ofrece lenguajes (o partes de un mismo lenguaje) para cada una de sus funciones. En los SGBD relacionales, todos ellos forman parte de SQL:
| Sublenguaje | Nombre completo | Función | Sentencias SQL principales | Módulos |
|---|---|---|---|---|
| DDL | Data Definition Language, lenguaje de definición de datos | Crear, modificar y borrar la estructura (objetos) | CREATE, ALTER, DROP, TRUNCATE, RENAME, COMMENT | 19-22 |
| DML | Data Manipulation Language, lenguaje de manipulación de datos | Consultar y modificar los datos | SELECT, INSERT, UPDATE, DELETE, MERGE | 23-30 |
| DCL | Data Control Language, lenguaje de control de datos | Gestionar los permisos | GRANT, REVOKE | 33 |
| TCL | Transaction Control Language, lenguaje de control de transacciones | Gestionar las transacciones | COMMIT, ROLLBACK, SAVEPOINT, SET TRANSACTION | 31 |
⚠️ Importante: La clasificación no es idéntica en todos los libros ni en todos los fabricantes. Algunos autores incluyen
SELECTen un sublenguaje aparte (DQL, Data Query Language); otros incluyen el TCL dentro del DCL. La documentación de Oracle, por ejemplo, distingue entre sentencias DDL, DML, de control de transacciones, de control de sesión y de control del sistema, e incluyeGRANTyREVOKEdentro del DDL. En este curso usamos la clasificación de la tabla, que es la más extendida en la docencia.
En la arquitectura ANSI/SPARC se distinguía además entre un lenguaje para definir el esquema conceptual (DDL propiamente dicho), otro para el esquema interno (SDL, Storage Definition Language) y otro para los esquemas externos (VDL, View Definition Language). En los SGBD actuales, todos se integran en el DDL de SQL: CREATE TABLE (conceptual), CREATE INDEX o CREATE TABLESPACE (interno) y CREATE VIEW (externo).
7.2. DML procedimental y no procedimental
| Tipo | Cómo se expresa | Unidad de trabajo | Ejemplos |
|---|---|---|---|
| Procedimental (navegacional, de bajo nivel) | El usuario indica qué datos quiere y cómo obtenerlos, paso a paso | Un registro cada vez | DML de CODASYL (FIND, GET), DL/I de IMS (GU, GN), recorrido con bucles en un programa |
| No procedimental (declarativo, de alto nivel) | El usuario indica qué datos quiere; el SGBD decide cómo | Conjuntos de registros | SQL, QBE (Query By Example), QUEL |
💻 Ejemplo: Obtener el nombre de los empleados del departamento 30 que cobran más de 2500 €.
Procedimental (pseudocódigo):
abrir fichero EMPLEADOS leer primer registro MIENTRAS no sea fin de fichero SI registro.dept_id = 30 Y registro.salario > 2500 ENTONCES mostrar registro.nombre FIN SI leer siguiente registro FIN MIENTRAS cerrar ficheroNo procedimental (SQL):
SELECT nombre FROM empleados WHERE dept_id = 30 AND salario > 2500;En la versión SQL no hay bucles, ni ficheros que abrir, ni decisiones sobre el orden de lectura: el optimizador decide si recorre la tabla o usa un índice.
7.3. Lenguajes anfitriones (huésped) y formas de acceso
SQL es muy potente para manejar datos, pero no sirve para construir una aplicación completa (interfaz de usuario, lógica de negocio, comunicaciones). Por eso las sentencias SQL se suelen usar desde otro lenguaje de programación, al que se llama lenguaje anfitrión (host language); en muchos textos en español también se le llama, por traducción, lenguaje huésped.
| Forma de acceso | Descripción | Ejemplos |
|---|---|---|
| Interactiva | El usuario escribe SQL directamente en una herramienta y ve el resultado | SQL*Plus, SQLcl, SQL Developer, DBeaver |
| SQL embebido | Las sentencias SQL se escriben dentro del código del programa y un precompilador las traduce a llamadas | Pro*C/C++ y Pro*COBOL de Oracle, SQLJ |
| API de llamadas | El programa usa una biblioteca para enviar SQL al SGBD y recibir los resultados | JDBC (Java), ODBC, ADO.NET (C#), PDO (PHP), python-oracledb (Python), node-oracledb (JavaScript) |
| ORM | Una biblioteca traduce automáticamente objetos del lenguaje a tablas y genera el SQL | Hibernate/JPA, Entity Framework, Doctrine, SQLAlchemy |
| Lenguaje procedimental del SGBD | Lenguaje que se ejecuta dentro del servidor y amplía SQL con variables, bucles y condiciones | PL/SQL (Oracle), T-SQL (SQL Server), PL/pgSQL (PostgreSQL) |
💡 Consejo: Este curso trata solo SQL. La programación dentro de Oracle con PL/SQL (bloques, procedimientos, funciones, cursores y triggers) se estudia en el Curso de Oracle PL/SQL.
8. Usuarios y roles
Alrededor de una base de datos trabajan personas con responsabilidades muy distintas. La clasificación clásica (Elmasri y Navathe, de Miguel y Piattini) distingue los siguientes perfiles.
8.1. Administradores
| Rol | Responsabilidades |
|---|---|
| Administrador de datos (Data Administrator, DA) | Responsable organizativo de los datos: decide qué datos se guardan, define las políticas de uso, calidad, privacidad y conservación. Perfil más de gestión que técnico |
| Administrador de la base de datos (Database Administrator, DBA) | Responsable técnico: instala y configura el SGBD, crea las estructuras de almacenamiento, gestiona usuarios y privilegios, planifica las copias y la recuperación, vigila y ajusta el rendimiento, aplica parches y actualizaciones |
En organizaciones pequeñas ambos papeles los asume la misma persona; en las grandes hay equipos de DBA especializados (de sistemas, de desarrollo, de seguridad…).
8.2. Diseñadores
| Rol | Responsabilidades |
|---|---|
| Diseñador conceptual y lógico | Analiza los requisitos con los usuarios, elabora el esquema conceptual (E/R) y lo transforma en el esquema lógico (relacional normalizado). Es el protagonista de los bloques 2 y 3 del curso |
| Diseñador físico | Decide cómo implementar el esquema lógico en un SGBD concreto: índices, particiones, almacenamiento, desnormalizaciones justificadas. Suele ser un DBA |
8.3. Programadores de aplicaciones
Desarrollan los programas que usan la base de datos: escriben las consultas y modificaciones (SQL embebido, API, ORM) e implementan las transacciones. También se les llama desarrolladores o ingenieros de software.
8.4. Usuarios finales
| Tipo | Descripción | Ejemplo |
|---|---|---|
| Paramétricos (ingenuos, naive) | Usan la base de datos a través de aplicaciones con pantallas y opciones predefinidas, sin saber nada de SQL. Son la gran mayoría | Cajero de un banco, dependienta que registra ventas, cliente de una tienda online |
| Ocasionales (casual) | Acceden de vez en cuando, con necesidades de información diferentes cada vez, mediante herramientas de consulta o informes | Directivo que consulta un cuadro de mando |
| Sofisticados | Conocen el SGBD y su lenguaje de consulta, y formulan sus propias consultas complejas | Analista de datos, ingeniero que escribe consultas SQL |
| Autónomos (standalone) | Mantienen bases de datos personales con aplicaciones sencillas | Autónomo que gestiona su agenda de clientes en una aplicación de escritorio |
8.5. Otros perfiles
- Desarrolladores de herramientas: crean el propio SGBD o herramientas auxiliares (modelado, monitorización, migración).
- Operadores y personal de mantenimiento: se ocupan del hardware y del funcionamiento diario de los sistemas.
8.6. Relación con la arquitectura de tres niveles
| Nivel ANSI/SPARC | Perfiles que trabajan en él |
|---|---|
| Externo | Usuarios finales, programadores de aplicaciones |
| Conceptual | Diseñadores conceptuales y lógicos, DBA, administrador de datos |
| Interno | DBA, diseñadores físicos |
9. Transacciones y propiedades ACID
9.1. ¿Qué es una transacción?
📘 Concepto: Una transacción es una secuencia de operaciones sobre la base de datos que forman una unidad lógica de trabajo: o se ejecutan todas con éxito y sus cambios se hacen permanentes, o no se ejecuta ninguna y la base de datos queda como estaba.
El ejemplo clásico es una transferencia bancaria de 100 € de la cuenta A a la cuenta B. Desde el punto de vista del negocio es una sola operación, pero para la base de datos son al menos dos:
-- Ejemplo ilustrativo con una tabla cuentas (numero, titular, saldo)
-- Transferencia de 100 € de la cuenta 'ES01' a la cuenta 'ES02'
UPDATE cuentas SET saldo = saldo - 100 WHERE numero = 'ES01'; -- 1. retirar de A
UPDATE cuentas SET saldo = saldo + 100 WHERE numero = 'ES02'; -- 2. ingresar en B
COMMIT; -- 3. confirmar
Si el sistema falla entre el paso 1 y el paso 2, sin transacciones se habrían “evaporado” 100 €: retirados de A, pero nunca ingresados en B.
9.2. Las propiedades ACID
Para que las transacciones sean fiables, el SGBD debe garantizar cuatro propiedades, conocidas por sus iniciales en inglés: ACID.
| Propiedad | Significado | En la transferencia bancaria | Componente del SGBD responsable |
|---|---|---|---|
| Atomicidad (Atomicity) | La transacción es indivisible: se ejecuta entera o no se ejecuta. Si algo falla, se deshacen todos sus cambios | O se hacen los dos UPDATE, o ninguno. Si falla el segundo, se deshace el primero | Gestor de transacciones y de recuperación (undo) |
| Consistencia (Consistency) | La transacción lleva la base de datos de un estado válido a otro estado válido, respetando todas las restricciones | La suma de los saldos de A y B es la misma antes y después; ningún saldo queda negativo si hay una restricción que lo impide | Comprobación de restricciones de integridad (y la lógica correcta de la aplicación) |
| Aislamiento (Isolation) | Las transacciones concurrentes no interfieren entre sí: cada una se comporta como si se ejecutara sola | Si mientras tanto alguien consulta el saldo total del banco, no ve un estado intermedio con 100 € de menos | Control de concurrencia (bloqueos, versiones) |
| Durabilidad (Durability) | Una vez confirmada, los cambios de la transacción son permanentes, aunque el sistema falle justo después | Tras el COMMIT, aunque se vaya la luz, la transferencia no se pierde | Registro de transacciones (redo log) y gestor de recuperación |
💡 Consejo: Una forma de recordar quién garantiza qué: la A y la D las garantiza el log (deshacer y rehacer); la I, el control de concurrencia; la C es responsabilidad compartida entre el SGBD (restricciones) y el programador (que la transacción tenga sentido: no sirve de nada la atomicidad si el programa resta 100 € de A y suma 10 € a B).
9.3. Estados de una transacción
stateDiagram-v2
[*] --> Activa: comienza
Activa --> ParcialmenteConfirmada: última operación ejecutada
Activa --> Fallida: error
ParcialmenteConfirmada --> Confirmada: COMMIT completado
ParcialmenteConfirmada --> Fallida: error al confirmar
Fallida --> Abortada: ROLLBACK (se deshacen los cambios)
Confirmada --> [*]
Abortada --> [*]
| Estado | Descripción |
|---|---|
| Activa | Se están ejecutando sus operaciones |
| Parcialmente confirmada | Se ha ejecutado la última operación, pero aún no se ha garantizado que los cambios sean permanentes |
| Confirmada (committed) | Los cambios son permanentes |
| Fallida | Se ha producido un error y no puede continuar |
| Abortada (rolled back) | Se han deshecho todos sus cambios; la base de datos está como antes de empezar |
9.4. Transacciones en Oracle: una primera idea
En Oracle, una transacción empieza automáticamente con la primera sentencia DML (INSERT, UPDATE, DELETE, MERGE) y termina con:
COMMIT: confirma los cambios.ROLLBACK: los deshace.- Una sentencia DDL (
CREATE,ALTER,DROP…), que hace unCOMMITimplícito. - El fin de la sesión (normal: se confirma, en las herramientas habituales; anómala: se deshace).
⚠️ Importante: Mientras no hagas
COMMIT, los demás usuarios no ven tus cambios, y tú puedes deshacerlos conROLLBACK. Esto es lo que te permitirá experimentar conUPDATEyDELETEsobre el esquema EMPRESA sin miedo a estropearlo. Las transacciones, los bloqueos y los niveles de aislamiento se estudian a fondo en el módulo 35.
10. Arquitecturas de los sistemas de bases de datos
10.1. Arquitectura centralizada
En los años sesenta y setenta, todo (datos, SGBD, aplicaciones e interfaz) se ejecutaba en un único ordenador central (mainframe). Los usuarios se conectaban mediante terminales “tontos” que solo mostraban texto y enviaban lo que se tecleaba.
- Ventajas: administración sencilla, seguridad centralizada, coherencia.
- Inconvenientes: el ordenador central es un cuello de botella y un punto único de fallo; caro de ampliar.
10.2. Arquitectura cliente/servidor
Con la llegada de los ordenadores personales y las redes locales (años ochenta y noventa), el trabajo se reparte entre:
- El servidor: ejecuta el SGBD y guarda los datos.
- Los clientes: ejecutan las aplicaciones y la interfaz de usuario, y envían peticiones (SQL) al servidor por la red.
flowchart LR
C1["Cliente 1<br/>(aplicación)"] -->|"SQL"| S["Servidor<br/>SGBD"]
C2["Cliente 2<br/>(aplicación)"] -->|"SQL"| S
C3["Cliente 3<br/>(SQL Developer)"] -->|"SQL"| S
S -->|"resultados"| C1
S -->|"resultados"| C2
S -->|"resultados"| C3
S --- BD[("Base de<br/>datos")]
10.3. Arquitectura de dos capas
Es la forma más sencilla de cliente/servidor: la aplicación cliente contiene la interfaz y la lógica de negocio, y se conecta directamente al servidor de base de datos.
- Ventajas: sencilla de desarrollar.
- Inconvenientes: hay que instalar y actualizar la aplicación en cada cliente; cada cliente abre su conexión con la base de datos (escala mal con miles de usuarios); la lógica de negocio está repartida por todos los clientes; las credenciales de la base de datos están en cada equipo.
Ejemplo: una aplicación de escritorio de gestión de un pequeño comercio que se conecta directamente a un servidor MySQL de la tienda.
10.4. Arquitectura de tres capas (y n capas)
Se añade una capa intermedia entre el cliente y la base de datos:
| Capa | Función | Ejemplos |
|---|---|---|
| Presentación (cliente) | Interfaz de usuario | Navegador web, aplicación móvil |
| Lógica de negocio (aplicación, middleware) | Reglas del negocio, validaciones, orquestación; es la única que habla con la BD | Servidor de aplicaciones con Java, C#, PHP, Python, Node.js; servicios REST |
| Datos | Almacenamiento y gestión de los datos | Servidor Oracle, PostgreSQL… |
flowchart LR
subgraph P["Capa de presentación"]
N["Navegador"]
M["App móvil"]
end
subgraph L["Capa de lógica de negocio"]
AS["Servidor de aplicaciones<br/>(API REST)"]
end
subgraph D["Capa de datos"]
DB["SGBD"] --- BD[("BD")]
end
N -->|"HTTPS"| AS
M -->|"HTTPS"| AS
AS -->|"SQL<br/>(pool de conexiones)"| DB
- Ventajas: los clientes no necesitan instalar nada (basta un navegador); la lógica está centralizada; la capa intermedia reutiliza un conjunto de conexiones (connection pool) para miles de usuarios; mayor seguridad (la base de datos no está expuesta a internet); cada capa escala por separado.
- Inconvenientes: mayor complejidad de desarrollo y despliegue.
Cuando la capa intermedia se divide a su vez en varios servicios (autenticación, catálogo, pagos…), se habla de arquitectura de n capas o de microservicios.
💡 Consejo: La inmensa mayoría de las aplicaciones web actuales siguen una arquitectura de tres capas o más. Si estudias DAW, la verás en la práctica: el navegador (HTML, CSS, JavaScript) es la presentación, tu aplicación en PHP, Java o Node.js es la lógica, y la base de datos que diseñas en este curso es la capa de datos.
10.5. Arquitecturas centralizadas frente a distribuidas
Ya viste en el módulo 02 qué es una base de datos distribuida. Desde el punto de vista de la arquitectura del sistema:
| Aspecto | Centralizada | Distribuida |
|---|---|---|
| Ubicación de los datos | Un solo sitio (servidor o clúster local) | Varios nodos en distintas ubicaciones |
| Administración | Más sencilla | Más compleja |
| Disponibilidad | Depende de un único sitio | Mayor: si un nodo falla, los demás siguen |
| Rendimiento | Bueno en local; peor para usuarios lejanos | Datos cerca de quien los usa; las consultas que cruzan nodos son costosas |
| Escalabilidad | Vertical (servidor más grande) | Horizontal (más nodos) |
| Transacciones | Sencillas | Requieren protocolos especiales, como el commit en dos fases (2PC) |
| Ejemplo | La base de datos de un instituto en su servidor | Una base de datos bancaria con nodos en varios países |
Entre ambos extremos existen soluciones intermedias muy utilizadas:
- Replicación: una base de datos principal y una o varias copias sincronizadas (para lectura o para tomar el relevo si la principal falla). En Oracle: Data Guard y Active Data Guard.
- Clústeres: varios servidores que trabajan sobre la misma base de datos, compartiendo el almacenamiento (arquitectura shared-disk). En Oracle: RAC (Real Application Clusters).
- Fragmentación (sharding): cada servidor guarda una parte de los datos (arquitectura shared-nothing). En Oracle: Globally Distributed Database.
11. SGBD del mercado
11.1. Tabla comparativa
| SGBD | Fabricante / comunidad | Licencia | Modelo | Uso típico | Opción gratuita |
|---|---|---|---|---|---|
| Oracle AI Database | Oracle | Propietaria | Relacional, multimodelo (JSON, grafos, espacial, vectorial) | Grandes empresas, banca, administración, ERP, sistemas críticos | Edición Free; servicio FreeSQL; capa gratuita de Autonomous Database |
| Microsoft SQL Server | Microsoft | Propietaria | Relacional (con JSON, grafos, vectores) | Empresas con ecosistema Microsoft, aplicaciones .NET, BI | Ediciones Express y Developer |
| MySQL | Oracle (comunidad) | GPL (Community) + comercial (Enterprise) | Relacional | Aplicaciones web, CMS (WordPress, Drupal), startups | Community Edition |
| MariaDB | MariaDB Foundation y MariaDB plc | GPL | Relacional | Alternativa libre a MySQL; distribuciones Linux | Sí (libre) |
| PostgreSQL | PostgreSQL Global Development Group | Licencia PostgreSQL (permisiva) | Objeto-relacional, muy extensible (JSON, PostGIS, pgvector) | Aplicaciones web y empresariales, datos geográficos, alternativa libre a Oracle | Sí (libre) |
| SQLite | D. Richard Hipp y colaboradores | Dominio público | Relacional embebido | Móviles, navegadores, aplicaciones de escritorio, IoT, pruebas | Sí |
| IBM Db2 | IBM | Propietaria | Relacional | Mainframes, banca, grandes corporaciones | Edición Community |
| MongoDB | MongoDB Inc. | SSPL (Community) + comercial | Documental (NoSQL) | Aplicaciones web y móviles, catálogos, contenidos | Community Server; capa gratuita en MongoDB Atlas |
| Redis | Redis Ltd. | Ha cambiado varias veces (consulta la vigente); existe el fork libre Valkey | Clave-valor en memoria | Caché, sesiones, colas, tiempo real | Sí |
| Apache Cassandra | Apache Software Foundation | Apache 2.0 | Familias de columnas (NoSQL) | Escrituras masivas, IoT, mensajería | Sí (libre) |
| Neo4j | Neo4j Inc. | GPL (Community) + comercial (Enterprise) | Grafos | Redes sociales, fraude, recomendaciones | Community Edition |
11.2. ¿Por qué Oracle en este curso?
- Es uno de los SGBD más usados en la empresa y figura de forma estable entre los primeros de las clasificaciones de popularidad (como DB-Engines).
- Implementa un SQL muy completo, con extensiones potentes (funciones analíticas, consultas jerárquicas,
PIVOT,MERGE…). - Es el SGBD tradicional de referencia en muchos ciclos formativos y universidades españolas.
- Ofrece una edición gratuita (Free) completa para aprender, que se instala fácilmente con Docker, y servicios en línea gratuitos.
- Lo que aprendas es transferible: el SQL estándar que usarás funciona, con pocas diferencias, en PostgreSQL, SQL Server o MySQL.
12. Oracle Database: arquitectura conceptual
En este apartado conocerás, sin escribir todavía SQL, los conceptos de Oracle que necesitarás para entender la instalación (módulo 22) y la administración de usuarios (módulo 37).
12.1. Servidor Oracle = instancia + base de datos
📘 Concepto: En Oracle se distingue con precisión entre:
- Base de datos (database): el conjunto de ficheros físicos en disco que contienen los datos y la información necesaria para gestionarlos.
- Instancia (instance): el conjunto de estructuras de memoria y procesos en segundo plano que gestionan esa base de datos mientras está en funcionamiento.
Un servidor de base de datos Oracle está formado por, al menos, una instancia y una base de datos.
La analogía: la base de datos es el almacén con la mercancía (permanente); la instancia es el equipo de trabajadores y las carretillas que mueven la mercancía mientras el almacén está abierto. Cuando se “para” la base de datos, la instancia desaparece (se libera la memoria y terminan los procesos), pero los ficheros siguen en el disco.
💡 Consejo: Normalmente cada base de datos tiene una instancia. En una configuración RAC (Real Application Clusters), varias instancias, en servidores distintos, abren a la vez la misma base de datos, lo que aporta escalabilidad y alta disponibilidad.
12.2. La instancia: memoria y procesos
flowchart TB
subgraph INST["INSTANCIA (memoria y procesos)"]
subgraph SGA["SGA (System Global Area), compartida"]
BC["Database buffer cache<br/>(bloques de datos)"]
SP["Shared pool<br/>(SQL analizado, diccionario)"]
RB["Redo log buffer<br/>(cambios pendientes de log)"]
end
PGA["PGA (Program Global Area)<br/>memoria privada de cada proceso"]
DBW["DBWn<br/>(escribe bloques)"]
LGW["LGWR<br/>(escribe el redo log)"]
CKP["CKPT<br/>(puntos de control)"]
SMO["SMON / PMON<br/>(recuperación y limpieza)"]
ARC["ARCn<br/>(archiva el redo log)"]
end
subgraph BDF["BASE DE DATOS (ficheros)"]
DF[("Ficheros de datos")]
CF[("Ficheros de control")]
RL[("Ficheros de redo log")]
end
ARL[("Redo logs<br/>archivados")]
DBW --> DF
LGW --> RL
CKP --> CF
ARC --> ARL
| Elemento | Tipo | Función |
|---|---|---|
| SGA (System Global Area) | Memoria compartida | Zona de memoria común a todos los procesos de la instancia |
| Database buffer cache | Parte de la SGA | Caché de los bloques de datos leídos del disco (el gestor de buffer del apartado 6.4) |
| Shared pool | Parte de la SGA | Guarda las sentencias SQL ya analizadas y sus planes (para no repetir el análisis) y la caché del diccionario |
| Redo log buffer | Parte de la SGA | Guarda temporalmente los cambios antes de escribirlos en el redo log |
| PGA (Program Global Area) | Memoria privada | Memoria de cada proceso servidor (ordenaciones, variables de sesión) |
| DBWn (Database Writer) | Proceso | Escribe en los ficheros de datos los bloques modificados de la buffer cache |
| LGWR (Log Writer) | Proceso | Escribe en los ficheros de redo log el contenido del redo log buffer; en cada COMMIT se asegura de que el redo de la transacción está en disco |
| CKPT (Checkpoint) | Proceso | Registra los puntos de control en los ficheros de control y de datos |
| SMON (System Monitor) | Proceso | Realiza la recuperación al arrancar tras una caída |
| PMON (Process Monitor) | Proceso | Limpia los recursos de los procesos de usuario que terminan de forma anómala |
| ARCn (Archiver) | Proceso | Copia los redo logs llenos a ficheros archivados (necesarios para la recuperación completa) |
Además, por cada conexión de un usuario se crea (o se asigna) un proceso servidor que ejecuta sus sentencias SQL.
12.3. La base de datos: estructura física y lógica
Estructura física (ficheros en disco):
| Fichero | Contenido |
|---|---|
Ficheros de datos (datafiles, .dbf) | Los datos de las tablas, índices y demás objetos |
| Ficheros de control (control files) | Información sobre la estructura física de la BD: nombres y ubicación de los ficheros, estado, puntos de control. Son imprescindibles para abrir la base de datos, por lo que se guardan varias copias |
| Ficheros de redo log (online redo log files) | El registro de transacciones del apartado 6.6, organizado en grupos que se usan de forma circular |
| Redo logs archivados | Copias de los redo logs llenos, cuando la BD funciona en modo ARCHIVELOG |
Fichero de parámetros (spfile) | Configuración de la instancia (tamaño de la memoria, etc.) |
Estructura lógica (cómo organiza Oracle el espacio):
flowchart LR
TS["Tablespace<br/>(p. ej. USERS)"] -->|"se compone de"| SEG["Segmentos<br/>(una tabla, un índice)"]
SEG -->|"se componen de"| EXT["Extensiones<br/>(extents)"]
EXT -->|"se componen de"| BLK["Bloques de datos<br/>(p. ej. 8 KB)"]
TS -.->|"se almacena en uno<br/>o varios"| DF[("Ficheros<br/>de datos")]
| Estructura | Descripción |
|---|---|
| Tablespace | Unidad lógica de almacenamiento que agrupa objetos relacionados. Cada tablespace se guarda en uno o varios ficheros de datos. Algunos habituales: SYSTEM y SYSAUX (diccionario y componentes internos), UNDO (imágenes anteriores para deshacer), TEMP (operaciones temporales), USERS (datos de usuario) |
| Segmento | El espacio que ocupa un objeto concreto (la tabla EMPLEADOS, el índice de su clave primaria) |
| Extensión (extent) | Conjunto de bloques contiguos que se asigna a un segmento cuando necesita crecer |
| Bloque de datos | La unidad mínima de lectura y escritura de Oracle (8 KB por defecto). Es el “bloque” del módulo 01 |
📘 Concepto: Esta separación entre estructura lógica (tablespaces, segmentos) y física (ficheros) es un ejemplo práctico de la independencia física: el DBA puede añadir ficheros a un tablespace o moverlos de disco sin que las tablas ni las aplicaciones se enteren.
12.4. Usuarios y esquemas
📘 Concepto: En Oracle:
- Un usuario es una cuenta con la que es posible conectarse a la base de datos (si tiene el privilegio necesario) y a la que se asignan privilegios.
- Un esquema (schema) es el conjunto de objetos (tablas, vistas, índices, secuencias…) que pertenecen a un usuario. El esquema tiene el mismo nombre que el usuario y se crea automáticamente con él.
Por eso, en Oracle, “el esquema EMPRESA” significa “las tablas del esquema EMPRESA que pertenecen al usuario con el que las has creado”. Si te conectas como el usuario ALUMNO01 y ejecutas los scripts del curso, las nueve tablas se crean en el esquema ALUMNO01. Otro usuario, con los privilegios adecuados, se referiría a ellas con el prefijo del esquema: alumno01.empleados.
flowchart TB
subgraph PDB["Base de datos (PDB)"]
subgraph S1["Esquema ALUMNO01 (usuario ALUMNO01)"]
T1["EMPLEADOS"]
T2["DEPARTAMENTOS"]
T3["... (9 tablas)"]
end
subgraph S2["Esquema ALUMNO02 (usuario ALUMNO02)"]
T4["EMPLEADOS"]
T5["..."]
end
subgraph S3["Esquema SYS"]
T6["Diccionario de datos"]
end
end
Observa que dos usuarios pueden tener cada uno su propia tabla EMPLEADOS sin conflicto: son objetos distintos, en esquemas distintos.
Usuarios especiales que crea Oracle al instalarse:
| Usuario | Función |
|---|---|
| SYS | Propietario del diccionario de datos. Tiene todos los privilegios. Solo se usa para tareas de administración críticas |
| SYSTEM | Usuario administrativo para tareas habituales de administración |
| Otros usuarios internos | Propietarios de componentes concretos (normalmente bloqueados) |
⚠️ Importante: Nunca crees tus tablas de trabajo conectado como
SYSoSYSTEM. Crea un usuario propio (lo harás en el módulo 22) y trabaja con él. Un error comoDROPsobre un objeto deSYSpuede dejar inservible la base de datos.
12.5. Arquitectura multitenant: CDB y PDB
Desde Oracle 12c (2013), Oracle ofrece la arquitectura multitenant (multiinquilino), y desde Oracle 21c es la única admitida: ya no se pueden crear bases de datos con la arquitectura clásica (non-CDB).
📘 Concepto:
- Una CDB (Container Database, base de datos contenedora) es una base de datos que contiene a otras.
- Una PDB (Pluggable Database, base de datos conectable) es una base de datos completa e independiente (con sus usuarios, esquemas, tablas y datos) que vive dentro de una CDB. Para una aplicación o un usuario, una PDB es indistinguible de una base de datos tradicional.
Una CDB contiene:
| Contenedor | Descripción |
|---|---|
| CDB$ROOT (la raíz) | Guarda los metadatos y objetos comunes de Oracle y los usuarios comunes. No se usa para datos de aplicaciones |
| PDB$SEED (la semilla) | Plantilla de solo lectura para crear nuevas PDB rápidamente |
| PDB de usuario | Las bases de datos de las aplicaciones. Puede haber varias en la misma CDB |
flowchart TB
subgraph SRV["Servidor"]
subgraph INST2["Instancia (una sola SGA y procesos)"]
I2["Memoria y procesos<br/>compartidos por todas las PDB"]
end
subgraph CDB["CDB (base de datos contenedora)"]
ROOT["CDB$ROOT<br/>(raíz: diccionario común,<br/>usuarios comunes)"]
SEED["PDB$SEED<br/>(plantilla)"]
PDB1["PDB VENTAS<br/>(usuarios y esquemas<br/>de la app de ventas)"]
PDB2["PDB RRHH<br/>(usuarios y esquemas<br/>de la app de RR. HH.)"]
PDB3["FREEPDB1<br/>(en Oracle Free)"]
end
end
INST2 --- CDB
Ventajas de la arquitectura multitenant:
- Consolidación: muchas bases de datos comparten una sola instancia (memoria y procesos), lo que ahorra recursos.
- Administración simplificada: se aplica un parche o se hace una copia de seguridad una vez para toda la CDB.
- Aislamiento: cada PDB tiene sus propios usuarios y datos; un usuario de una PDB no ve las demás.
- Portabilidad: una PDB se puede desconectar de una CDB y conectar a otra (de ahí pluggable), o clonar en segundos para crear un entorno de pruebas.
Tipos de usuarios en una arquitectura multitenant:
| Tipo | Dónde existe | Nombre |
|---|---|---|
| Usuario común | En la raíz y en todas las PDB | Debe empezar por C## (por ejemplo, C##ADMIN), salvo los de Oracle (SYS, SYSTEM) |
| Usuario local | Solo en una PDB concreta | Nombre normal (por ejemplo, ALUMNO01) |
💡 Consejo: Cuando instales Oracle AI Database 26ai Free, tendrás una CDB llamada
FREEcon una PDB ya creada llamadaFREEPDB1. Trabajarás siempre conectado aFREEPDB1, con un usuario local. Un error muy común de los principiantes es conectarse a la raíz (CDB$ROOT) e intentar crear allí un usuario normal: Oracle lo rechaza porque en la raíz solo se pueden crear usuarios comunes (C##...). Lo verás paso a paso en el módulo 22.
12.6. Ediciones de Oracle Database
| Edición | Destinatarios | Características principales |
|---|---|---|
| Enterprise Edition (EE) | Grandes organizaciones y sistemas críticos | Todas las funciones, y opciones de pago adicionales (RAC, particionamiento, In-Memory, Active Data Guard, multitenant con más de 3 PDB de usuario…) |
| Standard Edition 2 (SE2) | Empresas medianas | Funciones básicas completas, con límites de hardware (servidores de hasta 2 zócalos de CPU y un número limitado de hilos por base de datos) y hasta 3 PDB de usuario por CDB |
| Free | Aprendizaje, desarrollo, pruebas y uso libre | Gratuita, con casi todas las funciones de la Enterprise Edition, pero limitada en recursos: hasta 2 hilos de CPU, 2 GB de RAM y 12 GB de datos de usuario. Sustituyó a la antigua Express Edition (XE) |
📘 Concepto: La edición Free es la que usarás en el curso. Sus límites no suponen ningún problema para aprender: el esquema EMPRESA ocupa una fracción minúscula de los 12 GB permitidos.
Oracle también se ofrece en la nube como servicio: Oracle Autonomous Database, Oracle Base Database Service, Exadata Database Service, y servicios en las nubes de otros proveedores (Oracle Database@Azure, @AWS, @Google Cloud).
12.7. Versiones actuales
Desde 2018, Oracle numera las versiones según el año y distingue dos tipos:
- Versiones de soporte a largo plazo (Long Term Release): pensadas para producción, con muchos años de soporte.
- Versiones de innovación (Innovation Release): introducen novedades entre dos versiones de largo plazo, con un periodo de soporte más corto.
| Versión | Año | Tipo | Situación (octubre de 2026) |
|---|---|---|---|
| 19c | 2019 | Largo plazo | Muy extendida en producción. Oracle ha anunciado soporte Premier hasta el 31/12/2029 y extendido hasta el 31/12/2032 |
| 21c | 2020 | Innovación | Primera versión solo multitenant. Su soporte termina en 2027 (sin soporte extendido) |
| 23ai | 2024 | Largo plazo | Llamada inicialmente 23c; se renombró a 23ai en 2024 por sus funciones de IA (AI Vector Search). Sustituida por 26ai |
| AI Database 26ai | 2025 | Largo plazo | Versión actual. Anunciada en octubre de 2025 como sustituta de 23ai; se pasa de 23ai a 26ai aplicando una actualización (release update), sin una migración completa |
⚠️ Importante: Las fechas de fin de soporte dependen de la política de Oracle, que se revisa con el tiempo. Para planificar un sistema real, consulta siempre la nota oficial de soporte de versiones de Oracle (Release Schedule of Current Database Releases).
💡 Consejo: En la práctica encontrarás en las empresas sobre todo 19c y, cada vez más, 23ai/26ai. Todo el SQL del curso funciona en 19c, 21c y 26ai; cuando algo solo existe desde 23ai (por ejemplo, el tipo
BOOLEANoDROP TABLE IF EXISTS), se indica expresamente.
13. Ejercicios
Ejercicios resueltos
Ejercicio 1: Niveles ANSI/SPARC
Indica a qué nivel de la arquitectura ANSI/SPARC (externo, conceptual o interno) pertenece cada elemento:
a) La tabla PRODUCTOS tiene una columna precio de tipo NUMBER(8,2) que no puede ser negativa. b) El departamento de marketing ve una lista de productos con su nombre y precio, pero no el stock. c) La tabla PEDIDOS se almacena en el tablespace DATOS_VENTAS, en dos ficheros de datos en discos SSD. d) Existe un índice B-tree sobre CLIENTES(nif). e) Un cliente está atendido como máximo por un comercial. f) La aplicación de los comerciales muestra, para cada cliente, el número total de pedidos que ha hecho.
Ver solución
| Elemento | Nivel | Justificación |
|---|---|---|
a) Tipo y restricción de precio | Conceptual | Describe los datos y sus restricciones para toda la organización |
| b) Lista de marketing sin stock | Externo | Es una vista parcial para un grupo de usuarios |
| c) Tablespace y ficheros | Interno | Describe el almacenamiento físico |
| d) Índice B-tree | Interno | Es una estructura de acceso físico; no cambia qué datos hay |
| e) Un comercial por cliente | Conceptual | Es una restricción del negocio sobre las relaciones entre datos |
| f) Total de pedidos por cliente | Externo | Es un dato derivado que solo existe en la vista de esa aplicación (se calcula a partir del nivel conceptual) |
Ejercicio 2: Independencia de datos
Para cada cambio, indica si es un cambio del esquema interno o del conceptual, qué tipo de independencia permite que las aplicaciones no se vean afectadas y si, en efecto, las aplicaciones podrían seguir funcionando sin cambios:
a) Se crea un índice sobre PEDIDOS(fecha_pedido). b) Se añade a CLIENTES la columna fecha_nacimiento. c) Se borra de EMPLEADOS la columna telefono, que usa la aplicación del directorio. d) Se particiona la tabla LINEAS_PEDIDO por años. e) Se divide la tabla CLIENTES en CLIENTES (datos básicos) y CLIENTES_CONTACTO (email y teléfono), y se crea una vista con el nombre y las columnas originales.
Ver solución
| Cambio | Esquema afectado | Independencia | ¿Las aplicaciones siguen igual? |
|---|---|---|---|
| a) Índice | Interno | Física | Sí: las consultas son las mismas, solo cambia su velocidad |
| b) Nueva columna | Conceptual | Lógica | Sí, siempre que las aplicaciones nombren las columnas que usan (por ejemplo, un INSERT sin lista de columnas sí fallaría) |
| c) Borrar columna usada | Conceptual | Lógica | No: la aplicación del directorio necesita un dato que ya no existe. La independencia lógica tiene límites |
| d) Particionar | Interno | Física | Sí: las particiones son transparentes para las consultas |
| e) Dividir la tabla con vista | Conceptual | Lógica | Sí para las consultas: la vista conserva la estructura antigua. Las modificaciones a través de la vista pueden requerir trabajo adicional |
Observa la advertencia del apartado b): usar INSERT INTO clientes VALUES (...) sin indicar las columnas hace que el programa dependa del número y orden exacto de columnas, y rompe la independencia lógica. Es una mala práctica que evitarás en el módulo 34.
Ejercicio 3: Esquema o ejemplar
Indica si cada afirmación se refiere al esquema o al ejemplar de la base de datos EMPRESA:
a) Hay 24 empleados. b) La tabla LINEAS_PEDIDO tiene una clave primaria formada por pedido_id y num_linea. c) El departamento 70 no tiene empleados. d) El estado de un pedido solo puede ser PENDIENTE, ENVIADO, ENTREGADO o CANCELADO. e) El pedido 5014 no tiene empleado asignado. f) La columna email de EMPLEADOS es obligatoria.
Ver solución
- a) Ejemplar: es el contenido actual; mañana puede haber 25.
- b) Esquema: es parte de la definición de la tabla.
- c) Ejemplar: es una situación de los datos actuales (el esquema permite que tenga empleados).
- d) Esquema: es una restricción (
ck_ped_estado). - e) Ejemplar: es un dato concreto (que el esquema permite porque
empleado_idadmite nulos). - f) Esquema: es una restricción
NOT NULL.
Ejercicio 4: Componentes del SGBD
Ordena los pasos que sigue el SGBD para ejecutar SELECT nombre FROM clientes WHERE ciudad = 'Valencia'; e indica qué componente realiza cada uno: (1) leer del disco los bloques que no están en memoria, (2) comprobar que la tabla CLIENTES existe y que el usuario tiene permiso, (3) elegir entre recorrer la tabla o usar un índice sobre ciudad, (4) comprobar que la sentencia está bien escrita, (5) buscar los bloques necesarios en la caché de memoria, (6) ejecutar el plan y filtrar las filas.
Ver solución
| Orden | Paso | Componente |
|---|---|---|
| 1.º | (4) Comprobar la sintaxis | Analizador sintáctico (procesador de consultas) |
| 2.º | (2) Comprobar tabla y permisos | Analizador semántico, consultando el diccionario de datos |
| 3.º | (3) Elegir el plan | Optimizador de consultas, con las estadísticas del diccionario |
| 4.º | (6) Ejecutar el plan | Motor de ejecución |
| 5.º | (5) Buscar bloques en memoria | Gestor de buffer (gestor de almacenamiento) |
| 6.º | (1) Leer bloques del disco | Gestor de ficheros (solo si hay fallos de caché) |
Los pasos 4.º, 5.º y 6.º se entrelazan: el motor de ejecución va pidiendo bloques mientras filtra filas.
Ejercicio 5: Clasificación de sentencias
Clasifica cada sentencia como DDL, DML, DCL o TCL:
a) CREATE TABLE proyectos (...); b) SELECT * FROM proyectos; c) GRANT SELECT ON proyectos TO alumno02; d) ROLLBACK; e) ALTER TABLE proyectos ADD (responsable NUMBER(6)); f) DELETE FROM asignaciones WHERE proyecto_id = 5; g) REVOKE SELECT ON proyectos FROM alumno02; h) TRUNCATE TABLE asignaciones; i) SAVEPOINT antes_de_borrar; j) MERGE INTO productos ...
Ver solución
| Sentencia | Tipo | Comentario |
|---|---|---|
a) CREATE TABLE | DDL | Crea un objeto |
b) SELECT | DML | Algunos autores lo llaman DQL |
c) GRANT | DCL | Concede un privilegio (Oracle lo clasifica como DDL en su documentación) |
d) ROLLBACK | TCL | Deshace la transacción |
e) ALTER TABLE | DDL | Modifica la estructura |
f) DELETE | DML | Borra filas (se puede deshacer con ROLLBACK) |
g) REVOKE | DCL | Retira un privilegio |
h) TRUNCATE | DDL | Aunque vacíe la tabla como un DELETE, es DDL: hace COMMIT implícito y no se puede deshacer con ROLLBACK |
i) SAVEPOINT | TCL | Marca un punto intermedio de la transacción |
j) MERGE | DML | Inserta o modifica según exista o no la fila |
La trampa está en TRUNCATE: es un error frecuente clasificarlo como DML. Lo estudiarás en el módulo 25.
Ejercicio 6: Propiedades ACID
Indica qué propiedad ACID se ve comprometida en cada situación (y que el SGBD debe impedir):
a) Se registra un pedido y sus líneas, pero el servidor falla después de insertar el pedido y antes de insertar las líneas. Al arrancar, el pedido aparece sin líneas. b) Un usuario confirma una venta con COMMIT, recibe el mensaje de “venta realizada”, y un minuto después un fallo de disco hace que la venta desaparezca. c) Mientras una transacción está cambiando los precios de todos los productos (un 10 % más), otro usuario calcula el valor del inventario y obtiene una cifra en la que la mitad de los productos tienen el precio antiguo y la otra mitad el nuevo. d) Una transacción deja un producto con stock negativo, aunque existe la restricción ck_pro_stock CHECK (stock >= 0).
Ver solución
- a) Atomicidad: el pedido y sus líneas son una unidad; tras el fallo, el SGBD debe deshacer la inserción del pedido (la transacción no se había confirmado).
- b) Durabilidad: lo confirmado debe sobrevivir a cualquier fallo; para eso existen el redo log (y, ante la pérdida de un disco, las copias de seguridad, los redo logs archivados y el RAID).
- c) Aislamiento: el segundo usuario no debería ver los cambios a medias de una transacción no confirmada. En Oracle, gracias a la consistencia de lectura, vería todos los precios antiguos hasta que la primera transacción hiciera
COMMIT. - d) Consistencia: la transacción debe llevar la BD de un estado válido a otro válido; el SGBD debe rechazar la operación que viola la restricción.
Ejercicio 7: Usuarios de la base de datos
En un hospital, identifica el tipo de usuario (según el apartado 8) de cada persona:
a) La enfermera que registra las constantes de los pacientes en una tableta, eligiendo opciones de un menú. b) La persona que decide que los datos clínicos se conservarán 15 años y quién puede verlos. c) El técnico que programa las copias de seguridad y crea los usuarios en Oracle. d) La investigadora que escribe consultas SQL para estudiar la evolución de los ingresos por gripe. e) El desarrollador que programa la aplicación de citas. f) El gerente que consulta un informe mensual de ocupación de camas.
Ver solución
| Persona | Tipo |
|---|---|
| a) Enfermera | Usuario final paramétrico |
| b) Política de conservación y acceso | Administrador de datos (DA) |
| c) Copias y usuarios | Administrador de la base de datos (DBA) |
| d) Investigadora con SQL | Usuario final sofisticado |
| e) Desarrollador | Programador de aplicaciones |
| f) Gerente con informe | Usuario final ocasional |
Ejercicio 8: Conceptos de Oracle
Responde brevemente:
a) Si se apaga el servidor, ¿qué desaparece: la instancia o la base de datos? b) Un alumno conectado a CDB$ROOT intenta crear el usuario ALUMNO05 y obtiene un error. ¿Por qué? ¿Qué debe hacer? c) Los usuarios ALUMNO01 y ALUMNO02 han creado cada uno una tabla EMPLEADOS en la misma PDB. ¿Hay conflicto? ¿Cómo se refiere ALUMNO02 a la tabla de ALUMNO01? d) ¿Qué proceso de la instancia garantiza que una transacción confirmada no se pierda? e) Una empresa necesita 5 PDB de aplicación en una misma CDB con Standard Edition 2. ¿Es posible?
Ver solución
a) Desaparece la instancia (la memoria SGA/PGA y los procesos). La base de datos (los ficheros) permanece en el disco y se vuelve a abrir al arrancar una nueva instancia.
b) En la raíz de una CDB solo se pueden crear usuarios comunes, cuyo nombre debe empezar por C##. Lo correcto es conectarse a la PDB (por ejemplo, FREEPDB1) y crear allí el usuario local ALUMNO05.
c) No hay conflicto: cada tabla pertenece a un esquema distinto (ALUMNO01.EMPLEADOS y ALUMNO02.EMPLEADOS). ALUMNO02 se refiere a la de su compañero como alumno01.empleados, siempre que tenga el privilegio de objeto correspondiente.
d) LGWR (Log Writer): en cada COMMIT escribe en los ficheros de redo log los cambios de la transacción. Si después hay una caída, la recuperación (SMON) usa ese redo para rehacer los cambios.
e) No: Standard Edition 2 admite hasta 3 PDB de usuario por CDB. Necesitaría dos CDB o la Enterprise Edition con la opción multitenant.
Ejercicios propuestos
Ejercicio 9: Arquitectura ANSI/SPARC de una biblioteca
Una biblioteca municipal tiene las tablas SOCIOS, LIBROS, EJEMPLARES y PRESTAMOS. Describe un esquema conceptual (en forma de lista de tablas y columnas), tres esquemas externos (para el personal del mostrador, para los socios desde la web y para la dirección) y tres decisiones del esquema interno. Explica qué correspondencias habría entre los niveles.
Ejercicio 10: Elección de arquitectura
Para cada caso, propón una arquitectura (dos capas, tres capas, centralizada, distribuida, con replicación…) y justifícala: (a) la aplicación de escritorio de una autoescuela con tres ordenadores; (b) una tienda online con clientes en toda Europa; (c) el sistema de reservas de una cadena hotelera con hoteles en cinco continentes; (d) la intranet de un instituto.
Ejercicio 11: Comparativa de SGBD
Elige tres SGBD de la tabla del apartado 11 y compáralos en profundidad (consulta su documentación oficial): última versión, sistemas operativos, tipos de datos destacados, herramientas de administración, opciones de alta disponibilidad, ediciones y condiciones de licencia. Termina con una recomendación razonada para una pyme que va a desarrollar un ERP propio.
Ejercicio 12: Mapa conceptual de Oracle
Elabora un mapa conceptual (puedes usar un diagrama Mermaid) que relacione: servidor, instancia, SGA, PGA, procesos de fondo, base de datos, ficheros de datos, de control y de redo log, CDB, CDB$ROOT, PDB$SEED, PDB, usuario común, usuario local, esquema y tablespace.
Resumen
| Concepto | Idea clave |
|---|---|
| SGBD | Software que permite definir, construir, manipular, controlar y compartir bases de datos |
| Funciones | Definición (DDL), manipulación (DML), control (integridad, seguridad, concurrencia, recuperación) y diccionario |
| Diccionario de datos | BD interna con los metadatos; la consultan todos los componentes |
| ANSI/SPARC | Tres niveles: externo (vistas de usuario), conceptual (toda la BD) e interno (almacenamiento físico) |
| Correspondencias | Externa/conceptual y conceptual/interna: traducen entre niveles |
| Independencia física | Cambiar el esquema interno sin afectar al conceptual ni a las aplicaciones |
| Independencia lógica | Cambiar el esquema conceptual sin afectar a los externos ni a las aplicaciones |
| Esquema / ejemplar | Estructura (intensión, estable) / datos en un momento (extensión, cambiante) |
| Procesador de consultas | Analizador, optimizador (planes de ejecución basados en costes) y motor de ejecución |
| Gestor de almacenamiento | Gestor de ficheros y de buffer (caché de bloques) |
| Gestor de transacciones | Concurrencia, bloqueos, COMMIT y ROLLBACK |
| Registro de transacciones | Log (redo en Oracle) con escritura anticipada; permite rehacer y deshacer |
| Lenguajes | DDL (estructura), DML (datos), DCL (permisos), TCL (transacciones) |
| DML procedimental / no procedimental | Cómo y registro a registro / qué y por conjuntos (SQL) |
| Lenguaje anfitrión | Lenguaje de programación desde el que se usa SQL (embebido, API, ORM) |
| Usuarios | Administrador de datos, DBA, diseñadores, programadores, usuarios finales (paramétricos, ocasionales, sofisticados, autónomos) |
| Transacción | Unidad lógica de trabajo: todo o nada |
| ACID | Atomicidad, Consistencia, aIslamiento, Durabilidad |
| Arquitecturas | Centralizada, cliente/servidor, dos capas, tres capas (presentación, lógica, datos), distribuida |
| Oracle: servidor | Instancia (SGA, PGA, procesos DBWn, LGWR, CKPT, SMON, PMON, ARCn) + base de datos (ficheros de datos, control y redo log) |
| Oracle: almacenamiento lógico | Tablespace → segmento → extensión → bloque |
| Oracle: usuario y esquema | El esquema es el conjunto de objetos de un usuario y tiene su mismo nombre |
| Oracle: multitenant | CDB (CDB$ROOT, PDB$SEED) que contiene PDB; usuarios comunes (C##) y locales |
| Oracle: ediciones | Enterprise, Standard Edition 2 y Free (2 hilos de CPU, 2 GB de RAM, 12 GB de datos) |
| Oracle: versiones | 19c (largo plazo), 21c (innovación), 23ai, 26ai (largo plazo, actual) |