Movimientos de datos entre bases de datos

Índice

En esta entrada se muestran diferentes supuestos prácticos de movimientos de datos entre bases de datos diferentes. En algunos cosos, estos volcados se realizan entre bases de datos dentro del mismo sistema gestor de bases de datos. En otras ocasiones, se documenta el proceso para volcar la información desde un sistema gestor de bases de datos a otro.

Realiza una exportación del esquema de SCOTT usando Oracle Data Pump

Condiciones:

  • Exporta tanto la estructura de las tablas como los datos de las mismas.
  • Excluye la tabla BONUS y los departamentos con menos de dos empleados.
  • Realiza una estimación previa del tamaño necesario para el fichero de exportación.
  • Programa la operación para dentro de 2 minutos.
  • Genera un archivo de log en el directorio raíz.

Para exportar el esquema Scott usando Oracle Data Pump (expdp) hay que crear un directorio de exportación.

sudo mkdir /opt/exportado
sudo chown oracle:oinstall /opt/exportado/

A continuación, se apunta a este directorio desde la base de datos de Oracle.

SQL> CREATE OR REPLACE DIRECTORY EXPORTADO AS '/opt/exportado';

Directorio creado.

Además, el usuario debe tener permiso para realizar la exportación y escribir en el directorio.

GRANT EXP_FULL_DATABASE TO SCOTT;
GRANT READ, WRITE ON DIRECTORY EXPORTADO TO SCOTT;

Para estimar el tiempo que se tarda en realizar la exportación del esquema se usa el comando expdp de Oracle Data Pump.

debian@bbdd:~$ expdp scott/tiger SCHEMAS=scott DIRECTORY=EXPORTADO ESTIMATE_ONLY=YES

Export: Release 21.0.0.0.0 - Production on Lun Feb 24 18:16:46 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Conectado a: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

Advertencia: Las operaciones de Oracle Data Pump no se necesitan normalmente cuando se conecta a la raíz o al elemento inicial de una base de datos del contenedor.

Iniciando "SCOTT"."SYS_EXPORT_SCHEMA_01":  scott/******** SCHEMAS=scott DIRECTORY=EXPORTADO ESTIMATE_ONLY=YES 
Estimación en curso mediante el método BLOCKS...
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE_DATA
.  estimado "SCOTT"."DEPT"                                 64 KB
.  estimado "SCOTT"."DEPTBACKUP"                           64 KB
.  estimado "SCOTT"."EMP"                                  64 KB
.  estimado "SCOTT"."EMPBACKUP"                            64 KB
Estimación total mediante el método BLOCKS: 256 KB
El trabajo "SCOTT"."SYS_EXPORT_SCHEMA_01" ha terminado correctamente en Lun Feb 24 18:17:01 2025 elapsed 0 00:00:10

Para indicar las condiciones requeridas para exportar el esquema de Scott se puede usar un fichero de parámetros. Con el parámetro SCHEMAS se indica el esquema que se exporta, con el parámetro DIRECTORY se indica el directorio de exportación, con DUMPFILE se indica el nombre del fichero en el que se vuelca la exportación, con LOGFILE se indica el fichero en el que almacenan los logs del proceso de exportación precedido del nombre del directorio, en este caso, con EXCLUDE se indica la tabla que se excluye de la exportación y con QUERY se indica una consulta para filtrar los datos que se exportan.

SCHEMAS=scott
DIRECTORY=EXPORTADO
DUMPFILE=esquema_scott.dmp
LOGFILE=esquema_scott.log
EXCLUDE=TABLE:"= 'BONUS'"
QUERY=EMP:"WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPTNO HAVING COUNT(*) >= 2)"

Como este comando se ejecuta desde fuera de la base de datos, las herramientas de programación que se deben usar para programar la ejecución de la tarea son las del sistema operativo. Por ejemplo, se puede usar el comando at. La información del fichero de parámetros se puede pasar al comando con el parámetro PARFILE.

debian@bbdd:~$ at now + 2 minutes
warning: commands will be executed using /bin/sh
at Mon Feb 24 18:20:00 2025
at> expdp scott/tiger PARFILE=parametros.txt
at> <EOT>
job 1 at Mon Feb 24 18:20:00 2025

Pasado este tiempo, en el directorio de exportación se generan dos ficheros: un fichero binario que contiene el volcado de los datos del esquema Scott y un fichero de texto plano con el log de la operación:

debian@bbdd:/opt/exportado$ cat esquema_scott.log 
;;; 
Export: Release 21.0.0.0.0 - Production on Lun Feb 24 18:20:00 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
;;; 
Conectado a: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
;;; **************************************************************************
;;; Parfile values:
;;;  parfile:  query=EMP:"WHERE DEPTNO IN (SELECT DEPTNO FROM EMP GROUP BY DEPT
;;;  _parfile: NO HAVING COUNT(*) >= 2)"
;;;  parfile:  exclude=TABLE:"= 'BONUS'"
;;;  parfile:  logfile=esquema_scott.log
;;;  parfile:  dumpfile=esquema_scott.dmp
;;;  parfile:  directory=EXPORTADO
;;;  parfile:  schemas=scott
;;; **************************************************************************
Iniciando "SCOTT"."SYS_EXPORT_SCHEMA_03":  scott/******** PARFILE=parametros.txt 
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE_DATA
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Procesando el tipo de objeto SCHEMA_EXPORT/STATISTICS/MARKER
Procesando el tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Procesando el tipo de objeto SCHEMA_EXPORT/CLUSTER/CLUSTER
Procesando el tipo de objeto SCHEMA_EXPORT/CLUSTER/INDEX
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/COMMENT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/INDEX
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
. . "SCOTT"."EMP"                               8.843 KB      16 filas exportadas
. . "SCOTT"."EMPBACKUP"                         8.781 KB      14 filas exportadas
. . "SCOTT"."DEPT"                              6.039 KB       4 filas exportadas
. . "SCOTT"."DEPTBACKUP"                        6.031 KB       4 filas exportadas
. . "SCOTT"."SYS_EXPORT_SCHEMA_01"              54.12 KB       6 filas exportadas
. . "SCOTT"."SYS_EXPORT_SCHEMA_02"              54.12 KB       6 filas exportadas
La tabla maestra "SCOTT"."SYS_EXPORT_SCHEMA_03" se ha cargado/descargado correctamente
******************************************************************************
El juego de archivos de volcado para SCOTT.SYS_EXPORT_SCHEMA_03 es:
  /opt/exportado/esquema_scott.dmp
El trabajo "SCOTT"."SYS_EXPORT_SCHEMA_03" ha terminado correctamente en Lun Feb 24 18:20:52 2025 elapsed 0 00:00:52

Importa el fichero obtenido anteriormente usando Oracle Data Pump pero en un usuario distinto de la misma base de datos

Para importar el esquema scott con otro usuario hay que usar la herramienta Oracle Data Pump Import (impdp). Es importante definir correctamente el parámetro SCHEMAS, que debe indicar el esquema original del que se realizó la exportación y el parámetro REMAP_SCHEMA, que debe indicar a qué nuevo usuario se remapea el esquema.

debian@bbdd:/opt/exportado$ impdp ADMIN/ADMIN SCHEMAS=scott DIRECTORY=EXPORTADO DUMPFILE=esquema_scott.dmp REMAP_SCHEMA=scott:usrpractica

Import: Release 21.0.0.0.0 - Production on Lun Feb 24 19:11:27 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Conectado a: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

Advertencia: Las operaciones de Oracle Data Pump no se necesitan normalmente cuando se conecta a la raíz o al elemento inicial de una base de datos del contenedor.

La tabla maestra "ADMIN"."SYS_IMPORT_SCHEMA_01" se ha cargado/descargado correctamente
Iniciando "ADMIN"."SYS_IMPORT_SCHEMA_01":  ADMIN/******** SCHEMAS=scott DIRECTORY=EXPORTADO DUMPFILE=esquema_scott.dmp REMAP_SCHEMA=scott:usrpractica 
Procesando el tipo de objeto SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Procesando el tipo de objeto SCHEMA_EXPORT/CLUSTER/CLUSTER
Procesando el tipo de objeto SCHEMA_EXPORT/CLUSTER/INDEX
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE
ORA-39171: El trabajo se mantiene en espera reanudable.
Resumable error: ORA-01536: cuota de espacio excedida para tablespace 'USERS'
Resumable stmt: 
Resumable stmt status: SUSPENDED
Resumable stmt start: 02/24/25 19:11:34 stmt suspend: 02/24/25 19:11:34
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/TABLE_DATA
. . "USRPRACTICA"."EMP"                         8.843 KB      16 filas importadas
. . "USRPRACTICA"."EMPBACKUP"                   8.781 KB      14 filas importadas
. . "USRPRACTICA"."DEPT"                        6.039 KB       4 filas importadas
. . "USRPRACTICA"."DEPTBACKUP"                  6.031 KB       4 filas importadas
. . "USRPRACTICA"."SYS_EXPORT_SCHEMA_01"        54.12 KB       6 filas importadas
. . "USRPRACTICA"."SYS_EXPORT_SCHEMA_02"        54.12 KB       6 filas importadas
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/COMMENT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Procesando el tipo de objeto SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Procesando el tipo de objeto SCHEMA_EXPORT/STATISTICS/MARKER
El trabajo "ADMIN"."SYS_IMPORT_SCHEMA_01" ha terminado con 1 error(es) en Lun Feb 24 19:19:17 2025 elapsed 0 00:07:49

Durante la importación, el usuario usrpractica se ha quedado sin espacio en el tablespace USERS para seguir creando el esquema SCOTT. Para solucionar esto, se le ha dado espacio ilimitado en este tablespace mientras el proceso estaba suspendido.

ALTER USER USRPRACTICA QUOTA UNLIMITED ON USERS;

Después, el proceso de importación ha continuado y terminado sin más errores.

Realiza una exportación de la estructura de todas las tablas de la base de datos usando el comando expdp de Oracle Data Pump probando al menos cinco de las posibles opciones que ofrece dicho comando y documentándolas adecuadamente

Oracle Data Pump es la herramienta de Oracle para importar y exportar tanto los datos de una base de datos como los metadatos y estructura de la misma. Esta herramienta permite el uso de diferentes comandos como expdp o impdp para exportar e importar la información de la base de datos. Oracle Data Pump se usa en servidores Oracle para mover grandes volúmenes de información entre bases de datos diferentes, así como para realizar copias de seguridad o migrar esquemas. Esta utilidad se puede emplear incluso para replicar bases de datos de Oracle completas.

Para exportar esquemas y estructuras de la base de datos, Oracle Data Pump ofrece el comando expdp, que vuelca el contenido de la base de datos a un fichero binario de tipo dump. Este comando permite varias opciones de filtrado para exportar un esquema específico, tablas concretas de un esquema, la estructura completa de una base de datos o la totalidad de la base de datos incluyendo estructura y objetos. Este comando cuenta con una gran variedad de opciones que permiten configurar y filtrar las partes de la base de datos que se vuelcan al fichero exportado.

La ejecución de expdp puede generar un comando muy largo, que concatene una gran variedad de opciones con parámetros que dificulten su legibilidad. Para hacer que este comando sea más comprensible, se puede facilitar su legibilidad usando un fichero de parámetros y pasando al comando la opción PARFILE, que indica la ruta a este fichero.

Para exportar la estructura de todas las tablas de la base de datos con el comando expdp hay que usar varias opciones. La primera de ellas es FULL, que especifica que en vez de exportar los contenidos de un esquema concreto exporte los de toda la base de datos. También hay que usar la opción INCLUDE, que indica los objetos que se incluyen en el volcado de la base de datos. Como en este caso se debe volcar la estructura de todas las tablas de la base de datos, el valor de este parámetro tiene que ser TABLE.

Otra opción imprescindible para cumplir el propósito de exportar las estructura de todas las tablas de la base de datos es CONTENT. Cuando esta opción toma el valor METADATA_ONLY se exporta la estructura de los objetos de la base de datos pero no su contenido.

Como en el resto de ejemplos de uso del comando expdp, se usan también las opciones necesarias para indicar el nombre y la ruta al fichero de exportación: DIRECTROY, DUMPFILE y LOGFILE.

FULL=YES
INCLUDE=TABLE
CONTENT=METADATA_ONLY
DIRECTORY=EXPORTADO
DUMPFILE=estructura.dmp
LOGFILE=estructura.log

A estas opciones básicas se pueden añadir más opciones para personalizar aún más la exportación de la estructura de tablas de la base de datos.

Por ejemplo, se puede indicar a la herramienta Oracle Data Pump que comprima los datos durante la exportación con la opción COMPRESSION. Con la opción FILESIZE se puede limitar el tamaño de los ficheros de volcado. Cuando se usa este parámetro, es recomendable indicar un nombre dinámico al fichero de exportación. Con el parámetro %U en la opción DUMPFILE, cuando un fichero se llena, se crea un nuevo fichero con un nombre diferenciado del anterior con un número autoincremental. Otra opción que permite el comando expdp es VERSION, que permite indicar la versión específica de Oracle para la que se realiza la exportación.

Por otra parte, la opción FLASHBACK_TIME permite volcar al fichero de tipo dump la estructura de la base de datos en una fecha y hora específica indicada. Esta opción puede ser muy útil para hacer copias de seguridad o revertir la base de datos a un estado previo cuando se produzca algún fallo en ella que impida su correcto funcionamiento. Otra opción de este comando es METRICS que muestra métricas del proceso de exportación en tiempo real.

FULL=YES
INCLUDE=TABLE
CONTENT=METADATA_ONLY
DIRECTORY=EXPORTADO
DUMPFILE=estructura_%U.dmp
LOGFILE=estructura.log
COMPRESSION=ALL
FILESIZE=100M
VERSION=21.3
FLASHBACK_TIME="TO_TIMESTAMP('20-02-2025 23:00:00', 'DD-MM-YYYY HH24:MI:SS')"
METRICS=YES

Estas opciones se pueden configurar en un fichero de parámetros que después se pasa al comando en su ejecución.

debian@bbdd:/opt/exportado$ expdp ADMIN/ADMIN PARFILE=param_estructura

Export: Release 21.0.0.0.0 - Production on Mar Feb 25 17:58:35 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Conectado a: Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production

Advertencia: Las operaciones de Oracle Data Pump no se necesitan normalmente cuando se conecta a la raíz o al elemento inicial de una base de datos del contenedor.

Iniciando "ADMIN"."SYS_EXPORT_FULL_01":  ADMIN/******** PARFILE=param_estructura 
W-1 El inicio en la instancia 1 ha tardado 1 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
W-1      Se han terminado 16 INDEX_STATISTICS objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/STATISTICS/TABLE_STATISTICS
W-1      Se han terminado 19 TABLE_STATISTICS objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/EARLY_OPTIONS/VIEWS_AS_TABLES/TABLE
W-1      Se han terminado 1 TABLE objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/NORMAL_OPTIONS/TABLE
W-1      Se han terminado 63 TABLE objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/NORMAL_OPTIONS/VIEWS_AS_TABLES/TABLE
W-1      Se han terminado 19 TABLE objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/TABLE
W-1      Se han terminado 19 TABLE objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
W-1      Se han terminado 1 OBJECT_GRANT objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/COMMENT
W-1      Se han terminado 4 COMMENT objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/FGA_POLICY
W-1      Se han terminado 1 FGA_POLICY objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/INDEX/INDEX
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/CONSTRAINT
W-1      Se han terminado 19 CONSTRAINT objetos en 0 segundos
W-1 Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/CONSTRAINT/REF_CONSTRAINT
W-1      Se han terminado 4 REF_CONSTRAINT objetos en 0 segundos
W-1 La tabla maestra "ADMIN"."SYS_EXPORT_FULL_01" se ha cargado/descargado correctamente
******************************************************************************
El juego de archivos de volcado para ADMIN.SYS_EXPORT_FULL_01 es:
  /opt/exportado/estructura_01.dmp
El trabajo "ADMIN"."SYS_EXPORT_FULL_01" ha terminado correctamente en Mar Feb 25 18:00:49 2025 elapsed 0 00:02:12

La ejecución de este comando genera en el directorio de exportación un fichero binario de tipo dump que contiene los metadatos de la estructura de la base de datos y un fichero de log en texto plano que contiene la información de los pasos que se han seguido durante el proceso de volcado y otra información métrica relevante.

debian@bbdd:/opt/exportado$ ls -l
total 1644
...
-rw-r--r-- 1 oracle oinstall   3029 Feb 25 18:00 estructura.log
-rw-r----- 1 oracle oinstall 741376 Feb 25 18:00 estructura_01.dmp
...

Intenta realizar operaciones similares de importación y exportación con las herramientas proporcionadas con MySQL desde línea de comandos, documentando el proceso

Para exportar e importar tanto la estructura como el contenido de la base de datos MariaDB y MySQL cuentan con una herramienta similar a Oracle Data Pump: mysqldump. MariaDB y MySQL permiten crear diferentes bases de datos en el mismo servidor, a diferencia de Oracle. Esto hace que el funcionamiento de mysqldump no sea idéntico al de Oracle Data Pump. Con esta herramienta se puede exportar una base de datos de MariaDB o MySQL a un fichero para importar la estructura de tablas y los datos posteriormente a otra base de datos.

A diferencia de lo que ocurre en Oracle, que cuenta con una herramienta que exporta los datos de su base de datos en formato binario, mysqldump crea un fichero sql a partir del contenido de una base de datos del servidor. Ese fichero sql se puede importar posteriormente en otra base de datos ejecutándolo como un script sql.

Así, para exportar una base de datos se usa el comando mysqldump.

debian@debian12:/opt/exportado$ mysqldump -u scott -p scott > scott.sql
Enter password: 

Este comando genera un fichero con extensión sql que contiene en texto plano tanto la estructura de tablas como el contenido de la base de datos de Scott.

debian@debian12:/opt/exportado$ cat scott.sql 
-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: scott
-- ------------------------------------------------------
-- Server version	10.11.6-MariaDB-0+deb12u1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=
0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `auditoria`
--

DROP TABLE IF EXISTS `auditoria`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `auditoria` (
  `fecha_hora` datetime NOT NULL,
  `operacion` varchar(10) DEFAULT NULL,
  `usuario` varchar(50) DEFAULT NULL,
  `empno` int(11) DEFAULT NULL,
  `comm` int(11) DEFAULT NULL,
  PRIMARY KEY (`fecha_hora`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `auditoria`
--

LOCK TABLES `auditoria` WRITE;
/*!40000 ALTER TABLE `auditoria` DISABLE KEYS */;
INSERT INTO `auditoria` VALUES
('2025-02-19 17:45:05','INSERT','root@localhost',7901,20),
('2025-02-19 17:45:32','UPDATE','root@localhost',7698,300),
('2025-02-19 17:47:23','UPDATE','root@localhost',7698,200);
/*!40000 ALTER TABLE `auditoria` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `dept`
--

DROP TABLE IF EXISTS `dept`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dept` (
  `DEPTNO` int(11) DEFAULT NULL,
  `DNAME` varchar(14) DEFAULT NULL,
  `LOC` varchar(13) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `dept`
--

LOCK TABLES `dept` WRITE;
/*!40000 ALTER TABLE `dept` DISABLE KEYS */;
INSERT INTO `dept` VALUES
(10,'ACCOUNTING','NEW YORK'),
(20,'RESEARCH','DALLAS'),
(30,'SALES','CHICAGO'),
(40,'OPERATIONS','BOSTON');
/*!40000 ALTER TABLE `dept` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Table structure for table `emp`
--

DROP TABLE IF EXISTS `emp`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `emp` (
  `EMPNO` int(11) NOT NULL,
  `ENAME` varchar(10) DEFAULT NULL,
  `JOB` varchar(9) DEFAULT NULL,
  `MGR` int(11) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` int(11) DEFAULT NULL,
  `COMM` int(11) DEFAULT NULL,
  `DEPTNO` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `emp`
--

LOCK TABLES `emp` WRITE;
/*!40000 ALTER TABLE `emp` DISABLE KEYS */;
INSERT INTO `emp` VALUES
(7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20),
(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30),
(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30),
(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20),
(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30),
(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,200,30),
(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10),
(7788,'SCOTT','ANALYST',7566,'1982-12-09',3000,NULL,20),
(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10),
(7844,'TURNER','SALESMAN',7698,'1980-09-08',1500,0,30),
(7876,'ADAMS','CLERK',7788,'1983-01-12',1100,NULL,20),
(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30),
(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20),
(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10),
(7901,'LOLI','SALESMAN',7698,'1981-09-08',1200,20,30),
(7903,'JUAN','CLERK',7698,'1981-09-03',1050,NULL,30);
/*!40000 ALTER TABLE `emp` ENABLE KEYS */;
UNLOCK TABLES;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb3 */ ;
/*!50003 SET character_set_results = utf8mb3 */ ;
/*!50003 SET collation_connection  = utf8mb3_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trigger_auditoria_emp_insert
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria 
        VALUES (NOW(),'INSERT',CURRENT_USER(),NEW.empno,NEW.comm);
    END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb3 */ ;
/*!50003 SET character_set_results = utf8mb3 */ ;
/*!50003 SET collation_connection  = utf8mb3_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trigger_auditoria_emp_update
AFTER UPDATE ON emp
FOR EACH ROW
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria 
        VALUES (NOW(),'UPDATE',CURRENT_USER(),NEW.empno,NEW.comm);
    END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2025-02-25 18:33:58

Para importar esta base de datos a una nueva se puede usar una redirección en bash.

debian@debian12:/opt/exportado$ mysql -u usuario -p importado < scott.sql
Enter password: 

Así, la base de datos importado del usuario usuario es una réplica de la base de datos scott del usuario scott.

MariaDB [importado]> select * from dept;
+--------+------------+----------+
| DEPTNO | DNAME      | LOC      |
+--------+------------+----------+
|     10 | ACCOUNTING | NEW YORK |
|     20 | RESEARCH   | DALLAS   |
|     30 | SALES      | CHICAGO  |
|     40 | OPERATIONS | BOSTON   |
+--------+------------+----------+
4 rows in set (0.001 sec)

Además, mysqldump también se puede usar para exportar la estructura de una base de datos sin el contenido de las tablas.

debian@debian12:/opt/exportado$ mysqldump -u scott -p --no-data scott > scott_estructura.sql
Enter password: 

Este comando también genera un fichero de texto plano que, cuando se importa, crea en la base de datos la estructura de tablas exportada previamente sin hacer ninguna operación de inserción de datos en ella.

debian@debian12:/opt/exportado$ cat scott_estructura.sql 
-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: scott
-- ------------------------------------------------------
-- Server version	10.11.6-MariaDB-0+deb12u1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `auditoria`
--

DROP TABLE IF EXISTS `auditoria`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `auditoria` (
  `fecha_hora` datetime NOT NULL,
  `operacion` varchar(10) DEFAULT NULL,
  `usuario` varchar(50) DEFAULT NULL,
  `empno` int(11) DEFAULT NULL,
  `comm` int(11) DEFAULT NULL,
  PRIMARY KEY (`fecha_hora`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `dept`
--

DROP TABLE IF EXISTS `dept`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `dept` (
  `DEPTNO` int(11) DEFAULT NULL,
  `DNAME` varchar(14) DEFAULT NULL,
  `LOC` varchar(13) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Table structure for table `emp`
--

DROP TABLE IF EXISTS `emp`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `emp` (
  `EMPNO` int(11) NOT NULL,
  `ENAME` varchar(10) DEFAULT NULL,
  `JOB` varchar(9) DEFAULT NULL,
  `MGR` int(11) DEFAULT NULL,
  `HIREDATE` date DEFAULT NULL,
  `SAL` int(11) DEFAULT NULL,
  `COMM` int(11) DEFAULT NULL,
  `DEPTNO` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb3 */ ;
/*!50003 SET character_set_results = utf8mb3 */ ;
/*!50003 SET collation_connection  = utf8mb3_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trigger_auditoria_emp_insert
AFTER INSERT ON emp
FOR EACH ROW
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria 
        VALUES (NOW(),'INSERT',CURRENT_USER(),NEW.empno,NEW.comm);
    END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;
/*!50003 SET @saved_cs_client      = @@character_set_client */ ;
/*!50003 SET @saved_cs_results     = @@character_set_results */ ;
/*!50003 SET @saved_col_connection = @@collation_connection */ ;
/*!50003 SET character_set_client  = utf8mb3 */ ;
/*!50003 SET character_set_results = utf8mb3 */ ;
/*!50003 SET collation_connection  = utf8mb3_general_ci */ ;
/*!50003 SET @saved_sql_mode       = @@sql_mode */ ;
/*!50003 SET sql_mode              = 'STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`localhost`*/ /*!50003 TRIGGER trigger_auditoria_emp_update
AFTER UPDATE ON emp
FOR EACH ROW
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria 
        VALUES (NOW(),'UPDATE',CURRENT_USER(),NEW.empno,NEW.comm);
    END IF;
END */;;
DELIMITER ;
/*!50003 SET sql_mode              = @saved_sql_mode */ ;
/*!50003 SET character_set_client  = @saved_cs_client */ ;
/*!50003 SET character_set_results = @saved_cs_results */ ;
/*!50003 SET collation_connection  = @saved_col_connection */ ;
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2025-02-25 19:08:05

Intenta realizar operaciones similares de importación y exportación con las herramientas proporcionadas con Postgres desde línea de comandos, documentando el proceso

En Postgres también existen herramientas que permiten exportar tanto el contenido de una base de datos como su estructura. Esta herramienta es pg_dump, que, como Oracle Data Pump, también se usa desde la línea de comandos del sistema operativo, fuera de la base de datos. Al igual que MariaDB y MySQL, en Postgres también se dividen los datos entre varias bases de datos diferentes dentro del mismo servidor. Así, pg_dump cuenta con particularidades en su funcionamiento que lo hacen más parecido a mysqldump que a Oracle Data Pump. En definitiva, con esta utilidad de Postgres se puede exporta una base de datos creada en este sistema gestor a un fichero sql desde el que se puede importar después esta información a una nueva base de datos.

Al igual que en MariaDB y MySQL, pg_dump vuelca el contenido o la estructura de la base de datos a un fichero sql en texto plano. Esto supone una diferencia importante con la herramienta Data Pump de Oracle, que exporta esta información a un fichero en formato binario. El fichero generado por pg_dump se puede importar a una nueva base de datos ejecutándolo como un script con la opción -f del comando psql o con la herramienta específica pg_restore.

Una particularidad llamativa de pg_dump es que permite un nivel de personalización mayor que Oracle Data Pump y mysqldump al exportar los datos. Con la opción -Fc del comando, se puede indicar un formato personalizado para la exportación de los datos o el esquema de una base de datos. Cuando la exportación se hace con este formato personalizado, la importanción siempre se debe hacer usando la herramienta pg_restore.

Por tanto, para exportar tanto el contenido como la estructura de la base de datos de Scott en Postgres se puede usar el siguiente comando:

pg_dump -U postgres -d scott -f pg_scott.sql

Este comando genera un fichero sql en texto plano que contiene tanto al estrcutura de tablas como el contenido de la base de datos de Scott.

postgres@debian12:/opt/exportado$ cat pg_scott.sql 
--
-- PostgreSQL database dump
--

-- Dumped from database version 15.10 (Debian 15.10-0+deb12u1)
-- Dumped by pg_dump version 15.10 (Debian 15.10-0+deb12u1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: auditoria_emp(); Type: FUNCTION; Schema: public; Owner: postgres
--

CREATE FUNCTION public.auditoria_emp() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria
        VALUES (TG_OP, CURRENT_USER, NOW(), NEW.empno, NEW.comm);
    END IF;
    RETURN NEW;
END;
$$;


ALTER FUNCTION public.auditoria_emp() OWNER TO postgres;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: auditoria; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE public.auditoria (
    operacion character varying(10),
    usuario character varying(50),
    fecha_hora timestamp without time zone NOT NULL,
    empno integer,
    comm integer
);


ALTER TABLE public.auditoria OWNER TO postgres;

--
-- Name: dept; Type: TABLE; Schema: public; Owner: scott
--

CREATE TABLE public.dept (
    deptno integer NOT NULL,
    dname text,
    loc text
);


ALTER TABLE public.dept OWNER TO scott;

--
-- Name: emp; Type: TABLE; Schema: public; Owner: scott
--

CREATE TABLE public.emp (
    empno integer NOT NULL,
    ename text,
    job text,
    mgr integer,
    hiredate date,
    sal integer,
    comm integer,
    deptno integer
);


ALTER TABLE public.emp OWNER TO scott;

--
-- Data for Name: auditoria; Type: TABLE DATA; Schema: public; Owner: postgres
--

COPY public.auditoria (operacion, usuario, fecha_hora, empno, comm) FROM stdin;
INSERT	postgres	2025-02-19 13:15:10.095491	7901	20
UPDATE	postgres	2025-02-19 13:17:15.674375	7698	300
\.


--
-- Data for Name: dept; Type: TABLE DATA; Schema: public; Owner: scott
--

COPY public.dept (deptno, dname, loc) FROM stdin;
10	ACCOUNTING	NEW YORK
20	RESEARCH	DALLAS
30	SALES	CHICAGO
40	OPERATIONS	BOSTON
\.


--
-- Data for Name: emp; Type: TABLE DATA; Schema: public; Owner: scott
--

COPY public.emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) FROM stdin;
7369	SMITH	CLERK	7902	1980-12-17	800	\N	20
7499	ALLEN	SALESMAN	7698	1981-02-20	1600	300	30
7521	WARD	SALESMAN	7698	1981-02-22	1250	500	30
7566	JONES	MANAGER	7839	1981-04-02	2975	\N	20
7654	MARTIN	SALESMAN	7698	1981-09-28	1250	1400	30
7782	CLARK	MANAGER	7839	1981-06-09	2450	\N	10
7788	SCOTT	ANALYST	7566	1982-12-09	3000	\N	20
7839	KING	PRESIDENT	\N	1981-11-17	5000	\N	10
7844	TURNER	SALESMAN	7698	1981-09-08	1500	0	30
7876	ADAMS	CLERK	7788	1983-01-12	1100	\N	20
7900	JAMES	CLERK	7698	1981-12-03	950	\N	30
7902	FORD	ANALYST	7566	1981-12-03	3000	\N	20
7934	MILLER	CLERK	7782	1982-01-23	1300	\N	10
7901	LOLI	SALESMAN	7698	1981-09-08	1200	20	30
7903	JUAN	CLERK	7698	1981-09-03	1050	\N	30
7698	BLAKE	MANAGER	7839	1981-05-01	2850	300	30
\.


--
-- Name: auditoria pk_auditoria; Type: CONSTRAINT; Schema: public; Owner: postgres
--

ALTER TABLE ONLY public.auditoria
    ADD CONSTRAINT pk_auditoria PRIMARY KEY (fecha_hora);


--
-- Name: dept pk_dept; Type: CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.dept
    ADD CONSTRAINT pk_dept PRIMARY KEY (deptno);


--
-- Name: emp pk_emp; Type: CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT pk_emp PRIMARY KEY (empno);


--
-- Name: emp trigger_auditoria_emp; Type: TRIGGER; Schema: public; Owner: scott
--

CREATE TRIGGER trigger_auditoria_emp AFTER INSERT OR UPDATE ON public.emp FOR 
EACH ROW EXECUTE FUNCTION public.auditoria_emp();


--
-- Name: emp fk_deptno; Type: FK CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES public.dept(deptno);


--
-- Name: emp fk_mgr; Type: FK CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT fk_mgr FOREIGN KEY (mgr) REFERENCES public.emp(empno);


--
-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
--

GRANT ALL ON SCHEMA public TO scott;


--
-- PostgreSQL database dump complete
--

Para importar el fichero a una nueva base de datos se usa el comando psql y se pasa el fichero con el parámetro -f para importar tanto la estructura de la base de datos como su contenido.

postgres@debian12:/opt/exportado$ psql -U postgres -d importado -f pg_scott.sql
SET
SET
SET
SET
SET
 set_config 
------------
 
(1 row)

SET
SET
SET
SET
CREATE FUNCTION
ALTER FUNCTION
SET
SET
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
CREATE TABLE
ALTER TABLE
COPY 2
COPY 4
COPY 16
ALTER TABLE
ALTER TABLE
ALTER TABLE
CREATE TRIGGER
ALTER TABLE
ALTER TABLE
GRANT

Tras importar el volcado, la información está accesible en la nueva base de datos importado del usuario usuario.

postgres@debian12:/opt/exportado$ psql -U usuario -d importado
Password for user usuario: 
psql (15.10 (Debian 15.10-0+deb12u1))
Type "help" for help.

importado=> select * from dept;
 deptno |   dname    |   loc    
--------+------------+----------
     10 | ACCOUNTING | NEW YORK
     20 | RESEARCH   | DALLAS
     30 | SALES      | CHICAGO
     40 | OPERATIONS | BOSTON
(4 rows)

Como en Oracle y en MariaDB, en Postgres también existe la opción de exportar sólo la estructura de una base de datos. Esto se consigue usando el parámetro --schema-only de la herramienta pg_dump.

pg_dump -U postgres -d scott --schema-only -f pg_esctructura_scott.sql

Este comando crea un fichero sql de texto plano similar al anterior pero con la diferencia de que, en este caso, no copian los datos del contenido de las tablas a la nueva base de datos.

postgres@debian12:/opt/exportado$ cat pg_esctructura_scott.sql 
--
-- PostgreSQL database dump
--

-- Dumped from database version 15.10 (Debian 15.10-0+deb12u1)
-- Dumped by pg_dump version 15.10 (Debian 15.10-0+deb12u1)

SET statement_timeout = 0;
SET lock_timeout = 0;
SET idle_in_transaction_session_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SELECT pg_catalog.set_config('search_path', '', false);
SET check_function_bodies = false;
SET xmloption = content;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: auditoria_emp(); Type: FUNCTION; Schema: public; Owner: postgres
--

CREATE FUNCTION public.auditoria_emp() RETURNS trigger
    LANGUAGE plpgsql
    AS $$
BEGIN
    IF NEW.comm IS NOT NULL THEN
        INSERT INTO auditoria
        VALUES (TG_OP, CURRENT_USER, NOW(), NEW.empno, NEW.comm);
    END IF;
    RETURN NEW;
END;
$$;


ALTER FUNCTION public.auditoria_emp() OWNER TO postgres;

SET default_tablespace = '';

SET default_table_access_method = heap;

--
-- Name: auditoria; Type: TABLE; Schema: public; Owner: postgres
--

CREATE TABLE public.auditoria (
    operacion character varying(10),
    usuario character varying(50),
    fecha_hora timestamp without time zone NOT NULL,
    empno integer,
    comm integer
);


ALTER TABLE public.auditoria OWNER TO postgres;

--
-- Name: dept; Type: TABLE; Schema: public; Owner: scott
--

CREATE TABLE public.dept (
    deptno integer NOT NULL,
    dname text,
    loc text
);


ALTER TABLE public.dept OWNER TO scott;

--
-- Name: emp; Type: TABLE; Schema: public; Owner: scott
--

CREATE TABLE public.emp (
    empno integer NOT NULL,
    ename text,
    job text,
    mgr integer,
    hiredate date,
    sal integer,
    comm integer,
    deptno integer
);


ALTER TABLE public.emp OWNER TO scott;

--
-- Name: auditoria pk_auditoria; Type: CONSTRAINT; Schema: public; Owner: postgres
--

ALTER TABLE ONLY public.auditoria
    ADD CONSTRAINT pk_auditoria PRIMARY KEY (fecha_hora);


--
-- Name: dept pk_dept; Type: CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.dept
    ADD CONSTRAINT pk_dept PRIMARY KEY (deptno);


--
-- Name: emp pk_emp; Type: CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT pk_emp PRIMARY KEY (empno);


--
-- Name: emp trigger_auditoria_emp; Type: TRIGGER; Schema: public; Owner: scott
--

CREATE TRIGGER trigger_auditoria_emp AFTER INSERT OR UPDATE ON public.emp FOR EACH ROW EXECUTE FUNCTION public.auditoria_emp();


--
-- Name: emp fk_deptno; Type: FK CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT fk_deptno FOREIGN KEY (deptno) REFERENCES public.dept(deptno);


--
-- Name: emp fk_mgr; Type: FK CONSTRAINT; Schema: public; Owner: scott
--

ALTER TABLE ONLY public.emp
    ADD CONSTRAINT fk_mgr FOREIGN KEY (mgr) REFERENCES public.emp(empno);


--
-- Name: SCHEMA public; Type: ACL; Schema: -; Owner: pg_database_owner
--

GRANT ALL ON SCHEMA public TO scott;


--
-- PostgreSQL database dump complete
--

Exporta los documentos de una colección de MongoDB que cumplan una determinada condición e impórtalos en otra base de datos

MongoDB también cuenta con herramientas específicas para la exportación e importación de datos desde la línea de comandos como mongoexport y mongoimport. Además, desde la propia shell de mongo, mongosh o desde las aplicaciones que se conectan a la base de datos se puede usar la etapa $merge de un aggregation pipeline para trasladar la información de un colección de una base de datos a otra. Combinada con la etapa $match, este método se puede usar para exportar los documentos de una colección que cumplan una condición e importarlos a otra base de datos.

Para exportar los documentos de una colección que cumplancon una determinada condición se puede usar el comando mongoexport.

debian@debian12:~$ mongoexport --uri="mongodb+srv://proyectomongodb.fpedozi.mongodb.net/" --username=usuario --db=proyecto --collection=eurovision --query='{ "year": 2024 }' --out=eurovision_2024.json
Enter password for mongo user:

2025-02-26T16:34:08.482+0000	connected to: mongodb+srv://proyectomongodb.fpedozi.mongodb.net/
2025-02-26T16:34:08.745+0000	exported 1 record

Este comando genera un fichero JSON con la información de los documentos que cumplen con el criterio indicado en la cadena de búsqueda usada en el comando de exportación.

{"_id": {"$oid":"662e7b61eab35e276f536f5e"},
"year":2024,
"arena":"Malmö Arena",
"city":"Malmö",
"country":"SE",
"rounds":[]}

Este fichero se puede usar para importar estos documentos a una nueva colección en una nueva base de datos.

debian@debian12:~$ mongoimport --uri="mongodb+srv://proyectomongodb.fpedozi.mongodb.net/" --username=usuario --db=importado --collection=eurovision_filtrado --file=eurovision_2024.json
Enter password for mongo user:

2025-02-26T16:36:44.830+0000	connected to: mongodb+srv://proyectomongodb.fpedozi.mongodb.net/
2025-02-26T16:36:44.961+0000	1 document(s) imported successfully. 0 document(s) failed to import.

Tras importar este fichero a la nueva colección en la nueva base de datos, esta información se almacena en esta nueva colección.

Atlas atlas-pk6i6y-shard-0 [primary] importado> db.eurovision_filtrado.find()
[
  {
    _id: ObjectId('662e7b61eab35e276f536f5e'),
    year: 2024,
    arena: 'Malmö Arena',
    city: 'Malmö',
    country: 'SE',
    rounds: '[]'
  }
]

Otra forma de exportar los documentos que cumplan una condición específica dentro de una colección a otra colección de otra base de datos es usar un aggregation pipeline. Esta herramienta es un mecanismo para realizar consultas a las bases de datos de MongoDB que está formado por varias etapas. Para conseguir este objetivo hay que filtrar, en primer lugar, la colección de origen para quedarse con los documentos que cumplen con la condición y, a continuación, con la etapa $merge se pueden trasladar estos ficheros a otra colección en otra base de datos.

db.eurovision.aggregate([
  { $match: { country: 'SE' } },
  { $merge: { into: { db: "importado", coll: "eurovision_filtrado" } } }
]);

Al realizar esta operación sobre una base de datos, el contenido de los documentos que coinciden con el criterio de búsqueda en la etapa $match se vuelcan a la nueva colección eurovision_filtrado en la nueva base de datos importado.

Atlas atlas-pk6i6y-shard-0 [primary] importado> db.eurovision_filtrado.find({},{_id:0,year:1})
[
  { year: 2024 },
  { year: 1975 },
  { year: 1985 },
  { year: 1992 },
  { year: 2013 },
  { year: 2016 },
  { year: 2000 }
]

SQL*Loader es una herramienta que sirve para cargar grandes volúmenes de datos en una instancia de ORACLE. Exportad los datos de una base de datos completa desde MariaDB a texto plano con delimitadores y emplead SQL*Loader para realizar el proceso de carga de dichos datos a una instancia ORACLE. Debéis documentar todo el proceso, explicando los distintos ficheros de configuración y de log que tiene SQL*Loader.

Para importar una base de datos completa desde MariaDB a Oracle usando SQL*Loader se necesitan tres tipos de ficheros: el fichero sql con la estructura de la base de datos de MariaDB, un fichero CSV con el contenido de las tablas de la base de datos y un fichero de control de SQL*Loader que le indica a la herramienta cómo tratar estos datos.

Para conseguir los ficheros necesarios a partir de una base de datos de MariaDB se usa la herramienta mysqldump.

mysqldump -u usuario -p --tab=/opt/exportado --fields-terminated-by=',' --fields-enclosed-by='"' --lines-terminated-by='\n' examen

Este comando genera dos ficheros para cada tabla de la base de datos: el fichero sql con la estructura de la tabla y un fichero txt de texto plano con formato csv, en el que los valores de la tabla están separados por comas.

debian@bbdd:/opt/exportado$ ls -l
total 1660
-rw-r--r-- 1 debian debian     1739 Feb 27 11:41 COFRADIAS.sql
-rw-r--r-- 1 debian debian     2861 Feb 27 11:41 COFRADIAS.txt
-rw-r--r-- 1 debian debian     1636 Feb 27 11:41 PASOS.sql
-rw-r--r-- 1 debian debian     1288 Feb 27 11:41 PASOS.txt
...

Por ejemplo, la estructura de la tabla COFRADIAS es la siguiente:

-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: examen
-- ------------------------------------------------------
-- Server version	10.11.6-MariaDB-0+deb12u1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `COFRADIAS`
--

DROP TABLE IF EXISTS `COFRADIAS`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `COFRADIAS` (
  `codigo` varchar(2) NOT NULL,
  `nombrecorto` varchar(40) DEFAULT NULL,
  `nombrereal` varchar(200) DEFAULT NULL,
  `sedesocial` varchar(30) DEFAULT NULL,
  `sedecanonica` varchar(200) DEFAULT NULL,
  `anyofundacion` int(4) DEFAULT NULL,
  `diaprocesion` varchar(25) DEFAULT NULL,
  `numhermanos` int(4) DEFAULT NULL,
  `hermanomayor` varchar(40) DEFAULT NULL,
  PRIMARY KEY (`codigo`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2025-02-27 11:36:59

Y su contenido se guarda en el fichero COFRADIAS.txt con el siguiente formato:

"01","La Borriquita","REAL HERMANDAD DE NUESTRO PADRE JESUS EN SU SAGRADA ENTRADA EN JERUSALEM Y MARIA STMA. DE LA ESTRELLA","c/ Melliza, 12","Parroquia Santa María Magdalena","1953","Domingo de Ramos","1050","D. Alejandro Jurado Mejías"
"02","El Cautivo","REAL HERMANDAD DEL SANTISIMO SACRAMENTO, NUESTRO PADRE JESUS CAUTIVO Y MARIA SANTISIMA DE LA ESPERANZA","c/ Hispalis, 7","Parroquia Ntra. Sra. del Rocío","1939","Domingo de Ramos","1370","D. Miguel Angel Jiménez Bar bero"
"03","Amor Y Sacrificio","HERMANDAD DE LA SANTA CRUZ DE NUESTRO SEÑOR JESUCRISTO Y COFRADIA DE NAZARENOS DE NUESTRO PADRE JESUS EN LA PRESENTACION AL PUEBLO, NUESTRA SEÑORA DEL AMOR Y SACRIFICIO Y SAN JOSE","c/ Gustavo Bacarisas, 10","Capilla de la Santa Cruz","1980","Lunes Santo","1385","D. Juan José Rodriguez Rubio"
"04","Pasion","REAL E ILUSTRE HERMANDAD Y COFRADIA DE NAZARENOS DE NTRO. PADRE JESUS DE LA PASION Y NTRA. MADRE Y SE�ORA DEL AMPARO","Plaza de las Carmelita s, s/n","Parroquia Ntro. Padre Jesús de la Pasión","1980","Martes Santo","984 ","D. Jose Manuel Zamora Ruiz"
"05","Oracion En El Huerto","ANTIGUA HERMANDAD DE MARIA STMA. DEL ROSARIO Y COFRADIA DE NAZARENOS DE LA SAGRADA ORACION DE NTRO. SE�OR JESUCRISTO EN EL HUERTO Y NTRA. MADRE Y SRA. DE LOS DOLORES","c/ Anibal González, 12","Parroquia Santa María Magdalena","1575","Miércoles Santo","1255","D. Francisco José Doval Olmedo"
"06","Sagrada Cena","HERMANDAD SACRAMENTAL DE LA SAGRADA CENA, JESUS HUMILLADO Y NTRA. SRA. DEL AMPARO Y ESPERANZA","c/ La Hacendita, 36","Parroquia Ntra. Sra. del Amparo","1988","JuevesSanto","375","D. Francisco Moreno Aldea"
"07","Vera Cruz","ANTIGUA Y REAL HERMANDAD SACRAMENTAL Y COFRADIA DE NAZARENOS DEL SANTO CRISTO DE LA VERA CRUZ, MARIA SANTISIMA EN SUS MISTERIOS DEL MAYOR DOLOR Y ASUNCION A LOS CIELOS Y SAN SEBASTIAN MARTIR","c/ Tarancón, 25","Parr oquia Ave María y San Luis","1544","Jueves Santo","1087","D. Jose Cardona Jim énez"
"08","Gran Poder","FERVOROSA HERMANDAD Y COFRADIA DE NAZARENOS DE NUESTRO PADRE JESUS DEL GRAN PODER, MARIA SANTISIMA DEL MAYOR DOLOR Y TRASPASO Y SAN JUAN EVANGELISTA","c/ Real Utrera, 31","Parroquia Santa María Magdalena","1899","Viernes Santo (Madrugada)","1435","D. Mariano Sánchez Moreno"
"09","Amargura","FERVOROSA E ILUSTRE HERMANDAD Y COFRADIA DE NAZARENOS DE NUESTRO PADRE JESUS DESCENDIDO DE LA CRUZ Y NUESTRA MADRE Y SE�ORA DE LA AMARGURA Y SANTA ANGELA DE LA CRUZ","c/ Torremolinos, 18","Parroquia del Divino Salvador","1952","Viernes Santo","1100","D. Antonio Díaz Moreno"
"10","Santo Entierro","ANTIGUA Y FERVOROSA HERMANDAD Y COFRADIA DEL TRIUNFO DE LA SANTA CRUZ SOBRE LA MUERTE, SANTO ENTIERRO Y RESURRECCION DE NUESTRO SE�OR JESUCRISTO Y NUESTRA SE�ORA DE LA SOLEDAD","c/ Ntra. Sra. de Valme, 17","Parroquia Santa María Magdalena",\N,"Sabado Santo","685","D. Guillermo López Rodróguez"

Este fichro toma el formato que se ha indicado durante la exportación en con el comando mysqldump: cada fila representa una entrada de la tabla, cada campo está separado por el carácter coma y el contenido de cada campo se encierra entre comillas dobles.

Como se puede ver, las órdenes sql del fichero exportado por MariaDB están en adaptadas al lenguaje sql que usa este sistema gestor de bases de datos. Para poder importar esta estructura de tablas a Oracle es necesario modificar el script para adaptar estas órdenes sql al lenguaje propio de Oracle. Por ejemplo, hay que cambiar todos los tipos de datos VARCHAR por VARCHAR2 o todos los tipos de datos INT por NUMBER. También hay que elimintar las sentencias relativas al motor de almacenamiento de MariaDB, o el carácter comilla con el que mysqldump encirra cada una de los nombres de tablas o campos en el script etc.

-- MariaDB dump 10.19  Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost    Database: examen
-- ------------------------------------------------------
-- Server version	10.11.6-MariaDB-0+deb12u1

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table COFRADIAS
--

DROP TABLE IF EXISTS COFRADIAS;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE COFRADIAS (
  codigo VARCHAR2(2) NOT NULL,
  nombrecorto VARCHAR2(40) DEFAULT NULL,
  nombrereal VARCHAR2(200) DEFAULT NULL,
  sedesocial VARCHAR2(30) DEFAULT NULL,
  sedecanonica VARCHAR2(200) DEFAULT NULL,
  anyofundacion NUMBER(4) DEFAULT NULL,
  diaprocesion VARCHAR2(25) DEFAULT NULL,
  numhermanos NUMBER(4) DEFAULT NULL,
  hermanomayor VARCHAR2(40) DEFAULT NULL,
  PRIMARY KEY (codigo)
);
/*!40101 SET character_set_client = @saved_cs_client */;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2025-02-27 11:36:59

Después de adaptar los scripts para la estructura de las hay que crearlas pasando estos scipts al sistema gestor de bases de datos de Oracle.

debian@bbdd:/opt/exportado$ sqlplus USRPRACTICA/USRPRACTICA @COFRADIAS.sql

SQL*Plus: Release 21.0.0.0.0 - Production on Jue Feb 27 12:13:13 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Hora de Última Conexión Correcta: Jue Feb 27 2025 12:12:46 +00:00

Conectado a:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.

Tabla creada.

  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )
  1  CREATE TABLE COFRADIAS (
  2    codigo VARCHAR2(2) NOT NULL,
  3    nombrecorto VARCHAR2(40) DEFAULT NULL,
  4    nombrereal VARCHAR2(200) DEFAULT NULL,
  5    sedesocial VARCHAR2(30) DEFAULT NULL,
  6    sedecanonica VARCHAR2(200) DEFAULT NULL,
  7    anyofundacion NUMBER(4) DEFAULT NULL,
  8    diaprocesion VARCHAR2(25) DEFAULT NULL,
  9    numhermanos NUMBER(4) DEFAULT NULL,
 10    hermanomayor VARCHAR2(40) DEFAULT NULL,
 11    PRIMARY KEY (codigo)
 12* )

La misma operación se repite para todas las tablas de la base de datos.

debian@bbdd:/opt/exportado$ sqlplus USRPRACTICA/USRPRACTICA @PASOS.sql

SQL*Plus: Release 21.0.0.0.0 - Production on Jue Feb 27 12:14:57 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.

Hora de Última Conexión Correcta: Jue Feb 27 2025 12:13:13 +00:00

Conectado a:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
SP2-0223: Ninguna línea en el buffer SQL.
DROP TABLE IF EXISTS PASOS
              *
ERROR en línea 1:
ORA-00933: comando SQL no terminado correctamente


  1* DROP TABLE IF EXISTS PASOS
  1* DROP TABLE IF EXISTS PASOS

Tabla creada.

  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )
  1  CREATE TABLE PASOS (
  2    nombre VARCHAR2(35) NOT NULL,
  3    tipo VARCHAR2(10) DEFAULT NULL,
  4    numcostaleros NUMBER(3) DEFAULT NULL,
  5    numnazarenos NUMBER(4) DEFAULT NULL,
  6    colorcapa VARCHAR2(10) DEFAULT NULL,
  7    colorantifaz VARCHAR2(10) DEFAULT NULL,
  8    codigocofradia VARCHAR2(2) DEFAULT NULL,
  9    PRIMARY KEY (nombre)
 10* )

Para volcar los datos a Oracle a partir del fichero CSV devuelto por mysqldump usando la herramienta SQL*Loader, esta herramienta necesita un fichero de control. Este fichero indica cómo tiene que tratar los datos de cada fichero CSV, a qué tabla los tiene que cargar y con qué carácter están delimitados.

Este fichero arranca con la orden LOAD DATA, que indica que se deben cargar los datos en una tabla de la base de datos. A continuación, el parámetro INFILE indica el archivo de datos desde el que se debencargar los valores a la tabla, la orden INTO TABLE especifica el nombre de la tabla a la que se deben cargar los datos del fichero, el parámetro FIELDS TERMINATED BY indica el carácter que delimita cada campo en las entradas de la tabla, la orden TRAILING NULLCOLS indica a la herramienta cómo actuar cuando la última columan de una entrada de la tabla tiene un valor nulo y, por último, se indica una lista de los campos de la tabla a los que corresponde cada dato del fichero CSV.

LOAD DATA
INFILE 'COFRADIAS.txt'
INTO TABLE COFRADIAS
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' AND ESCAPED BY '"'
TRAILING NULLCOLS
(
  codigo,
  nombrecorto,
  nombrereal,
  sedesocial,
  sedecanonica,
  anyofundacion,
  diaprocesion,
  numhermanos,
  hermanomayor
)

La herramienta SQL*loader necesita uno de estos ficheros de control para cada tabla de la base de datos.

LOAD DATA
INFILE 'COFRADIAS.txt'
INTO TABLE COFRADIAS
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' AND ESCAPED BY '"'
TRAILING NULLCOLS
(
  nombre,
  tipo,
  numcostaleros,
  numnazarenos,
  colorcapa,
  colorantifaz,
  codigocofradia
)

Usando estos ficheros se pueden cargar los datos a la base de datos.

debian@bbdd:/opt/exportado$ sqlldr userid=USRPRACTICA/USRPRACTICA control=COFRADIAS.ctl log=COFRADIAS.log

SQL*Loader: Release 21.0.0.0.0 - Production on Jue Feb 27 12:31:04 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Ruta de acceso utilizada:      Convencional
Punto de confirmación alcanzado - recuento de registros lógicos 10

Tabla COFRADIAS:
  9 Filas cargadas correctamente.

Consulte el archivo log:
  COFRADIAS.log
para obtener más información sobre la carga.
debian@bbdd:/opt/exportado$ sqlldr userid=USRPRACTICA/USRPRACTICA control=PASOS.ctl log=PASOS.log

SQL*Loader: Release 21.0.0.0.0 - Production on Jue Feb 27 12:34:18 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Ruta de acceso utilizada:      Convencional
Punto de confirmación alcanzado - recuento de registros lógicos 18

Tabla PASOS:
  16 Filas cargadas correctamente.

Consulte el archivo log:
  PASOS.log
para obtener más información sobre la carga.

En el fichero de log, se muestra información relevante sobre el volcado de datos como, por ejemplo los detalles de los errores en las filas en las que hay datos que no se han podido insertar, el número de filas cargadas correctamente, el número de filas que no se han cargado, el tiempo que ha durado el proceso o el tiempo de CPU que ha empleado.

debian@bbdd:/opt/exportado$ cat PASOS.log 

SQL*Loader: Release 21.0.0.0.0 - Production on Jue Feb 27 12:34:18 2025
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.

Archivo de Control:   PASOS.ctl
Archivo de Datos:      PASOS.txt
  Archivo de Errores:     PASOS.bad
  Desechar Archivo:  ninguno especificado
 
 (Permitir todos los registros desechados)

Número a cargar: ALL
Número que omitir: 0
Errores permitidos: 50
Matriz de enlace:     250 filas, máximo de 1048576 bytes
Continuación:    ninguno especificado
Ruta de acceso utilizada:      Convencional

Tabla PASOS, cargada de cada registro lógico.
Opción INSERT activa para esta tabla: INSERT
Opción TRAILING NULLCOLS activada

   Nombre Columna                  Posición   Long  Term Entorno Tipo de Dato
------------------------------ ---------- ----- ---- ---- ---------------------
NOMBRE                              FIRST     *   ,  O(") CHARACTER            
TIPO                                 NEXT     *   ,  O(") CHARACTER            
NUMCOSTALEROS                        NEXT     *   ,  O(") CHARACTER            
NUMNAZARENOS                         NEXT     *   ,  O(") CHARACTER            
COLORCAPA                            NEXT     *   ,  O(") CHARACTER            
COLORANTIFAZ                         NEXT     *   ,  O(") CHARACTER            
CODIGOCOFRADIA                       NEXT     *   ,  O(") CHARACTER            

Registro 4: Rechazado - Error en tabla PASOS, columna NUMNAZARENOS.
ORA-01722: número no válido

Registro 17: Rechazado - Error en tabla PASOS, columna NUMNAZARENOS.
ORA-01722: número no válido


Tabla PASOS:
  16 Filas cargadas correctamente.
  2 Filas no cargadas debido a errores de datos.
  0 Filas no cargadas porque todas las cláusulas WHEN han fallado.
  0 Filas no cargadas porque todos los campos eran nulos.


Espacio asignado a matriz de enlace:           451500 bytes (250 filas)
Bytes de buffer de lectura: 1048576

Total de registros lógicos omitidos:          0
Total de registros lógicos leídos:          18
Total de registros lógicos rechazados:         2
Total de registros lógicos desechados:        0

La ejecución empezó en Jue Feb 27 12:34:18 2025
La ejecución terminó en Jue Feb 27 12:34:19 2025

Tiempo transcurrido:     00:00:00.76
Tiempo de CPU:         00:00:00.04

Al terminar este proceso, tanto la estructura de tablas como la información que contienen estas tablas en la base de datos MariaDB ya está volcada a la base de datos de Oracle.

SQL> SELECT * FROM PASOS;

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Cristo de la Vera Cruz
Misterio				  29	      210
Negro			       Morado			      07

Entrada en Jerusalen
Misterio				  90	      210
Blanco			       Blanco			      01

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------

Jesús Descendido de la Cruz
Misterio				 110	      430
Blanco			       Negro			      09

Maria Santísima de la Esperanza
Palio					  60	      210

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Blanco			       Verde			      02

María Santísima del Mayor Dolor
Palio					  30	      100
Morado			       Morado			      08

Ntra. Sra. de la Estrella

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Palio					  60	      200
Blanco			       Rojo			      01

Ntra. Sra. de los Dolores
Palio					  35	      240
Blanco			       Morado			      05


NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Ntra. Sra. del Amor y Sacrificio
Palio					  80	      250
Blanco			       Azul			      03

Ntra. Sra. del Amparo
Palio					  70	      100
Blanco			       Negro			      04

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------

Ntro. Padre Jesús Cautivo
Misterio				  60	      240
Blanco			       Burdeos			      02

Ntro. Padre Jesús de la Pasión
Misterio				  80	      130

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Blanco			       Negro			      04

Ntro. Padre Jesús del Gran Poder
Misterio				  35	      175
Morado			       Morado			      08

Presentación al Pueblo

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Misterio				 130	      200
Blanco			       Azul			      03

Sagrada Cena
Misterio				  54	      130
Marfil			       Burdeos			      06


NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------
Sagrada Oración en el Huerto
Misterio				  40	      210
Blanco			       Morado			      05

Virgen del Mayor Dolor
Palio					  30	      100
Negro			       Morado			      07

NOMBRE
--------------------------------------------------------------------------------
TIPO			       NUMCOSTALEROS NUMNAZARENOS
------------------------------ ------------- ------------
COLORCAPA		       COLORANTIFAZ		      CODIGO
------------------------------ ------------------------------ ------


16 filas seleccionadas.

Fuentes

2 Oracle Data Pump Export

Comandos para la programación de tareas

3 Oracle Data Pump Import

6.5.4 mysqldump — A Database Backup Program

pg_dump

mongoexport

mongoimport

$merge (aggregation)

Part II SQL*Loader

8 SQL*Loader Command-Line Reference

9 SQL*Loader Control File Reference

10 SQL*Loader Field List Reference

Relacionados

Recolección centralizada de logs de sistema mediante jouranld

Para configurar un servidor de journald en la red local es necesario que todos los equipos de la red cuenten con el componente systemd-journal-remote instalado. Este componente de systemd permite a los diferentes nodos de la red interactuar entre sí y trasladar la información relativa a los logs del sistema desde los clientes al servidor de logs.

Leer

Implantación de aplicaciones web PHP en Docker

Para implantar una aplicación PHP en Docker se genera un entorno LAMP usando varios contenedores a través de un fichero docker-compose como se muestra en este post

Leer

Empaquetadores y compresores/descompresores en Debian

Los empaquetadores y compresores/descompresores son paquetes fundamentales en cualquier distribución de un sistema operativo. En este post se analizan varios de estos paquetes disponibles para Debian y otras distribuciones GNU/Linux

Leer