PR0301 — Exploració de SGBD amb Docker
Informació de la pràctica
| Camp | Valor |
|---|---|
| Codi | PR0301 |
| Mòdul | M0372 — Gestió de Bases de Dades |
| RA | RA1 — Sistemes d'emmagatzematge |
| Durada estimada | 5 hores |
| Modalitat | Individual |
| Lliurament | Fitxer PDF + fitxers SQL a Moodle |
| Qualificació | 10 punts (rúbrica adjunta) |
Objectius
- Posar en marxa contenidors Docker amb PostgreSQL, MySQL/MariaDB, Oracle XE i SQL Server.
- Connectar-s'hi amb DBeaver i amb el client de línia de comandes de cada motor.
- Explorar el catàleg del sistema i les metadades de la BD en cadascun dels motors.
- Crear la mateixa taula de prova als quatre motors i comparar les diferències sintàctiques.
- Documentar l'experiència amb captures de pantalla i reflexions comparatives.
Prerequisits
- Docker Desktop instal·lat i funcionant.
- DBeaver Community Edition instal·lat.
- Coneixements bàsics de terminal (
cd,ls,docker ps,docker exec).
Personalització obligatoria
Tot el que creeu ha de portar el vostre nom. Substituïu nom-cognom pel vostre nom real en minúscules sense accents (exemple: joan-garcia, maria-lopez). Això permet al professor identificar el treball de cada alumne i evita conflictes entre contenidors.
Apartat 1 — PostgreSQL amb Docker (2 punts)
1.1 Posada en marxa del contenidor
# Descarregueu la imatge
docker pull postgres:18
# Creeu i inicieu el contenidor
docker run -d \
--name postgres-nom-cognom \
-e POSTGRES_PASSWORD=gbd2025 \
-e POSTGRES_USER=gbd_user \
-e POSTGRES_DB=gbd_nom_cognom \
-p 5432:5432 \
postgres:18
# Verifiqueu que el contenidor està en marxa
docker ps
Tasca 1.1: Feu una captura de pantalla del resultat de docker ps que mostri el contenidor en execució.
1.2 Connexió i exploració del catàleg
-- Un cop dins de psql:
\l -- Llista de bases de dades
\du -- Llista d'usuaris/rols
\conninfo -- Informació de la connexió actual
-- Versió del servidor
SELECT version();
-- Bases de dades del servidor
SELECT datname, datcollate FROM pg_database;
-- Taules del catàleg (primeres 20)
SELECT tablename FROM pg_tables
WHERE schemaname = 'pg_catalog'
ORDER BY tablename LIMIT 20;
-- Connexions actuals
SELECT pid, usename, application_name, state FROM pg_stat_activity;
Tasca 1.2: Feu captures de pantalla dels resultats de les metaordes i consultes al catàleg.
1.3 Creació de taula de prova
CREATE TABLE alumnes (
id SERIAL PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
cognoms VARCHAR(200) NOT NULL,
email VARCHAR(150) UNIQUE,
data_alta DATE DEFAULT CURRENT_DATE
);
INSERT INTO alumnes (nom, cognoms, email) VALUES
('Joan', 'Garcia Puig', 'joan.garcia@iessapalomera.cat'),
('Maria', 'Lopez Serra', 'maria.lopez@iessapalomera.cat'),
('Pere', 'Bosch Vila', 'pere.bosch@iessapalomera.cat');
SELECT * FROM alumnes;
-- Metadades de la taula al catàleg
SELECT column_name, data_type, character_maximum_length, is_nullable, column_default
FROM information_schema.columns
WHERE table_name = 'alumnes'
ORDER BY ordinal_position;
Tasca 1.3: Feu captures de pantalla dels resultats de cada sentència.
Apartat 2 — MySQL/MariaDB amb Docker (2 punts)
2.1 Posada en marxa del contenidor
# Descarregueu la imatge
docker pull mysql:8.0
# Creeu i inicieu el contenidor
docker run -d \
--name mysql-nom-cognom \
-e MYSQL_ROOT_PASSWORD=root2025 \
-e MYSQL_DATABASE=gbd_nom_cognom \
-e MYSQL_USER=gbd_user \
-e MYSQL_PASSWORD=gbd2025 \
-p 3306:3306 \
mysql:8.0
# Verifiqueu que està en marxa
docker ps
2.2 Connexió i exploració del catàleg
# Connecteu-vos al contenidor
docker exec -it mysql-nom-cognom mysql -u gbd_user -pgbd2025 gbd_nom_cognom
-- Un cop dins de mysql:
SHOW DATABASES;
USE gbd_nom_cognom;
SELECT VERSION();
-- Usuaris del sistema
SELECT user, host, plugin FROM mysql.user;
-- Variables de sistema
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
SHOW VARIABLES LIKE 'max_connections';
Tasca 2.1-2.2: Documenteu els resultats de cada comanda amb captures de pantalla.
2.3 Creació de taula i metadades
CREATE TABLE alumnes (
id INT AUTO_INCREMENT PRIMARY KEY,
nom VARCHAR(100) NOT NULL,
cognoms VARCHAR(200) NOT NULL,
email VARCHAR(150) UNIQUE,
data_alta DATE DEFAULT (CURRENT_DATE)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO alumnes (nom, cognoms, email) VALUES
('Joan', 'Garcia Puig', 'joan.garcia@iessapalomera.cat'),
('Maria', 'Lopez Serra', 'maria.lopez@iessapalomera.cat'),
('Pere', 'Bosch Vila', 'pere.bosch@iessapalomera.cat');
SELECT * FROM alumnes;
-- Metadades al catàleg
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'gbd_nom_cognom' AND TABLE_NAME = 'alumnes';
SHOW TABLE STATUS LIKE 'alumnes';
Tasca 2.3: Documenteu els resultats.
Apartat 3 — Oracle XE amb Docker (2 punts)
3.1 Posada en marxa del contenidor
# Descarregueu la imatge (Oracle XE 21c, versió lleugera sense compte Oracle)
docker pull gvenzl/oracle-xe:21-slim
# Creeu i inicieu el contenidor
# Nota: el primer inici pot trigar 2-3 minuts mentre inicialitza la BD
docker run -d \
--name oracle-nom-cognom \
-e ORACLE_PASSWORD=oracle2025 \
-p 1521:1521 \
gvenzl/oracle-xe:21-slim
# Espereu fins que el contenidor estigui llest (health: healthy)
docker ps
docker logs oracle-nom-cognom --tail 20
Quan sabeu que Oracle està llest?
Espereu fins que docker logs mostri el missatge DATABASE IS READY TO USE!. Normalment triga entre 1 i 3 minuts.
Tasca 3.1: Feu una captura de pantalla de docker ps i del log que confirma que Oracle està llest.
3.2 Connexió i exploració del catàleg
# Connecteu-vos amb SQL*Plus com a SYSTEM al PDB (Pluggable Database)
docker exec -it oracle-nom-cognom sqlplus system/oracle2025@//localhost:1521/XEPDB1
-- Un cop dins de SQL*Plus:
-- Versió del servidor
SELECT * FROM v$version WHERE banner LIKE 'Oracle%';
-- Base de dades actual
SELECT name, open_mode, db_unique_name FROM v$database;
-- Contenidors disponibles (CDB/PDB)
SELECT con_id, name, open_mode FROM v$pdbs;
-- Taules de l'usuari actual
SELECT table_name FROM user_tables ORDER BY table_name;
-- Tots els usuaris del sistema
SELECT username, account_status, created FROM dba_users ORDER BY created;
-- Tablespaces disponibles
SELECT tablespace_name, status, contents FROM dba_tablespaces;
Tasca 3.2: Feu captures de pantalla dels resultats de les consultes al catàleg.
3.3 Creació d'usuari i taula de prova
A Oracle, cada usuari té el seu propi esquema. Crearem un usuari dedicat per a la pràctica:
-- Com a SYSTEM, creeu l'usuari (substituïu nom_cognom)
CREATE USER alumne_nom_cognom IDENTIFIED BY gbd2025;
GRANT CONNECT, RESOURCE TO alumne_nom_cognom;
ALTER USER alumne_nom_cognom QUOTA UNLIMITED ON USERS;
-- Connecteu-vos com al nou usuari
CONNECT alumne_nom_cognom/gbd2025@//localhost:1521/XEPDB1
-- Creeu la taula (sintaxi Oracle)
CREATE TABLE alumnes (
id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
nom VARCHAR2(100) NOT NULL,
cognoms VARCHAR2(200) NOT NULL,
email VARCHAR2(150) UNIQUE,
data_alta DATE DEFAULT SYSDATE
);
-- Inseriu dades (Oracle requereix COMMIT explícit)
INSERT INTO alumnes (nom, cognoms, email)
VALUES ('Joan', 'Garcia Puig', 'joan.garcia@iessapalomera.cat');
INSERT INTO alumnes (nom, cognoms, email)
VALUES ('Maria', 'Lopez Serra', 'maria.lopez@iessapalomera.cat');
INSERT INTO alumnes (nom, cognoms, email)
VALUES ('Pere', 'Bosch Vila', 'pere.bosch@iessapalomera.cat');
COMMIT;
SELECT * FROM alumnes;
-- Metadades de la taula
SELECT column_name, data_type, data_length, nullable, data_default
FROM user_tab_columns
WHERE table_name = 'ALUMNES'
ORDER BY column_id;
Tasca 3.3: Feu captures de pantalla de la creació de l'usuari, la taula i els resultats.
Apartat 4 — SQL Server amb Docker (2 punts)
4.1 Posada en marxa del contenidor
# Descarregueu la imatge (SQL Server 2025 Developer Edition, gratuïta)
docker pull mcr.microsoft.com/mssql/server:2025-latest
# Creeu i inicieu el contenidor
# Nota: la contrasenya SA ha de tenir majúscules, minúscules, xifres i símbols
docker run -d \
--name sqlserver-nom-cognom \
-e ACCEPT_EULA=Y \
-e MSSQL_SA_PASSWORD='Gbd@2025' \
-p 1433:1433 \
mcr.microsoft.com/mssql/server:2025-latest
# Verifiqueu que està en marxa
docker ps
Tasca 4.1: Feu una captura de pantalla de docker ps que mostri el contenidor en execució.
4.2 Connexió i exploració del catàleg
# Connecteu-vos amb sqlcmd des de dins del contenidor
docker exec -it sqlserver-nom-cognom \
/opt/mssql-tools18/bin/sqlcmd -S localhost -U SA -P 'Gbd@2025' -No
-- Un cop dins de sqlcmd (les sentències han d'anar seguides de GO):
-- Versió del servidor
SELECT @@VERSION;
GO
-- Llista de bases de dades
SELECT name, state_desc, create_date FROM sys.databases;
GO
-- Crear la base de dades de la pràctica
CREATE DATABASE gbd_nom_cognom;
GO
USE gbd_nom_cognom;
GO
-- Connexions actuals
SELECT session_id, login_name, status, program_name
FROM sys.dm_exec_sessions
WHERE is_user_process = 1;
GO
Tasca 4.2: Feu captures de pantalla dels resultats de les consultes al catàleg.
4.3 Creació de taula i metadades
USE gbd_nom_cognom;
GO
-- Creeu la taula (sintaxi SQL Server)
CREATE TABLE alumnes (
id INT IDENTITY(1,1) PRIMARY KEY,
nom NVARCHAR(100) NOT NULL,
cognoms NVARCHAR(200) NOT NULL,
email NVARCHAR(150) UNIQUE,
data_alta DATE DEFAULT GETDATE()
);
GO
-- Inseriu dades
INSERT INTO alumnes (nom, cognoms, email) VALUES
('Joan', 'Garcia Puig', 'joan.garcia@iessapalomera.cat'),
('Maria', 'Lopez Serra', 'maria.lopez@iessapalomera.cat'),
('Pere', 'Bosch Vila', 'pere.bosch@iessapalomera.cat');
GO
SELECT * FROM alumnes;
GO
-- Metadades de la taula
SELECT COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH, IS_NULLABLE, COLUMN_DEFAULT
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'alumnes';
GO
-- Objectes de la BD
SELECT name, type_desc, create_date FROM sys.objects WHERE type = 'U';
GO
Tasca 4.3: Feu captures de pantalla de la creació de la taula i els resultats.
Apartat 5 — Connexió amb DBeaver (1 punt)
Configureu les quatre connexions a DBeaver i feu captures de pantalla que demostrin que funcionen.
5.1 PostgreSQL
- Driver: PostgreSQL
- Host: localhost · Port: 5432
- Database: gbd_nom_cognom · Username: gbd_user · Password: gbd2025
5.2 MySQL
- Driver: MySQL
- Host: localhost · Port: 3306
- Database: gbd_nom_cognom · Username: gbd_user · Password: gbd2025
5.3 Oracle
- Driver: Oracle
- Connection type: Service name · Host: localhost · Port: 1521
- Service name: XEPDB1 · Username: alumne_nom_cognom · Password: gbd2025
5.4 SQL Server
- Driver: SQL Server
- Host: localhost · Port: 1433
- Database: gbd_nom_cognom · Username: SA · Password: Gbd@2025
Tasca 5: Feu una captura de pantalla de DBeaver amb les quatre connexions actives i, per a cadascuna, mostreu la taula alumnes amb les dades.
Apartat 6 — Comparació i reflexió (1 punt)
Responeu les preguntes següents al vostre informe (mínim 2-3 línies per pregunta):
-
Diferències de tipus de dades: Compareu com cada motor declara els camps de la taula
alumnes(enter autoincremental, text de longitud variable, data amb valor per defecte). Feu una taula resum. -
Catàleg del sistema: Cada motor té la seva manera d'exposar les metadades. Quines semblances i diferències trobeu entre
pg_catalog(PostgreSQL),information_schema(MySQL),user_tab_columns(Oracle) iINFORMATION_SCHEMA(SQL Server)? -
Posada en marxa: Quin motor us ha costat més de posar en marxa amb Docker i per qué? Quin ha sigut el més senzill?
-
COMMIT explícit: Oracle requereix
COMMITexplícit mentre que PostgreSQL i MySQL en mode autocommit no. Com afecta això a la fiabilitat de les dades? En quins escenaris és important controlar el commit manualment? -
Reflexió personal: Després d'explorar els quatre motors, en quin tipus de projecte escolliríeu cadascun? Argumenteu breument.
Entrega
L'entrega ha d'incloure:
- Informe en PDF amb totes les captures de pantalla i respostes demanades.
-
postgres_practica.sql— totes les sentències SQL executades a PostgreSQL. -
mysql_practica.sql— totes les sentències SQL executades a MySQL. -
oracle_practica.sql— totes les sentències SQL executades a Oracle. -
sqlserver_practica.sql— totes les sentències SQL executades a SQL Server. - Tots els fitxers pujats a la tasca de la plataforma Moodle abans de la data límit.
Termini
El lliurament fora de termini sense justificació prèvia implica una penalització de 2 punts per dia de retard, fins a un màxim de 0 punts.