Movimientos de datos entre bases de datos
- Francisco Javier Huete
- Administracion bbdd
- March 3, 2025
Í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
Comandos para la programación de tareas
6.5.4 mysqldump — A Database Backup Program
8 SQL*Loader Command-Line Reference