Mostrando entradas con la etiqueta backup. Mostrar todas las entradas
Mostrando entradas con la etiqueta backup. Mostrar todas las entradas

miércoles, 20 de septiembre de 2023

Oracle 8 - Nuevo enfoque (5).Profundizando en los backups de Oracle con expdp.

 0. Introducción

Créditos: 
https://www.oracle.com/a/ocom/docs/oracle-data-pump-best-practices.pdf

Vamos a ver como crear backups de:

  1. La base de datos /FULL)
  2.  Un SCHEMA
  3. Varias tablas
  4. Un Tablespace
También vamos a ver como:
  1. Usar un fichero de parámetros de copia de seguridad
  2. Fraccionar los ficheros de coopia de seguridad en varios ficheros de tamaño limitado
  3. Comprimir las copias 
Pero no nos olvidemos que nuestra base de datos corre en un contenedor docker, y en el punto anterior hemos visto como crear volúmenes en docker para tener acceso directo  a dichos volumenes tanto por parte de los contenedores docker como del propio servidor. También hemos visto como se asignaban los volúmenes a los contenedores en el proceso de creación de los mismos a partir de una imágen

1. Pasos previos

Para cada uno de estos procesos hay una parte común que és:
  1. Ejecutar el contenedor docker en modo shell
  2. Crear una carpeta en el contenedor docker y a ser posible que esté en el volumen docker
  3. Entrar a sqlplus como usario sys y permisos sysdba
  4. Usar la BD en cuestión
  5. Si no tenemos creado un usuario lo creamos
  6. Mapear dicha carpeta con sqlplus (CREATE DIRECTORY)
  7. Otorgar permisos de read, write del directorio a un usuario
  8. Otorgar permisos DATAPUMP_EXP_FULL_DATABASE al ususario
Veamos estos 5 pasos previos:

#----------------------
# PRELIMINARES
#----------------------

#1. Ejecutar el contenedor docker en modo shell
#               <id contenedor> <programa a ejecutar>
docker exec -it 34a5f979d3de    /bin/bash

#2. Dentro del contenedor docker creamos la carpeta
#   Es conveniente que esta carpeta se encuentre en el volumen
#   asignado al crear el contenedor a partir de la imagen
mkdir /home/ximo/oracle-backup-server #3. Nos conectamos a sqlplus con el usuario sys y permisos sysdba sqlplus / as sysdba
#4. Una vez dentro de SQL plus, usar la BD (Contenedor) en cuestión
ALTER SESSION SET CONTAINER = XEPDB1;

#5. Si no tenemos creado un usuario lo creamos
CREATE USER backupuser IDENTIFIED BY myPassword; #6. Mapear la carpeta física a un directorio de SQL CREATE DIRECTORY oracle_backup_sql AS '/home/ximo/oracle-backup-server'; #7. Otorgamos permisos al usuario en ese directorio GRANT read, write ON DIRECTORY oracle_backup_sql TO backupuser;

#8. Otorgamos permisos al usuario de DATAPUMP_EXP_FULL_DATABASE
GRANT DATAPUMP_EXP_FULL_DATABASE TO backupuser;

#9. Ahora queda realizar la copia de la BS, SQCHEMA, TABLESPACE ...

2. Copia de seguridad de la BD entera

Hay que tener en cuenta que NO SE COPIAN:
  1. Los esquemas del sistema como SYS, ORDSYS, MDSYS
  2. Los Grants sobre los objetos propietarios de SYS.
  3. Hay que tener autorización para el REALM para exportar datos protegidos por REALM
La sentencia a ejecutar dentro de una ventana de comandos (shell) :

#     <usuario>  <password> <bd>             <directorio>               <dump-file>            <log-file>     <FULL copy>
expdp backupuser/myPassword@EXPDB1 DIRECTORY=oracle-backup-sql DUMPFILE=orclfull.dmp   LOGFILE=full_exp.log   FULL=YES;

Cosa que nos creará una copia de la BD EXPDB1 entera (parametro FULL=YES) en el directorio oracle-backup-sql que está mapeado al volumen de docker, el cual tenenos acdeso desde el servidor físico. La copia de seguridad se descarga en los ficheros ".dump" y ".log" que hemos indicado (orclfull.dmp y full_exp.log) 

3. Copia de seguridad de un SCHEMA

La sentencia a ejecutar dentro de una ventana de comandos (shell) :

#     <usuario>  <password> <bd>             <directorio>               <dump-file>            <log-file>     <SCHEMAS to backup>
expdp backupuser/myPassword@EXPDB1 DIRECTORY=oracle-backup-sql DUMPFILE=orclschm.dmp   LOGFILE=schm_exp.log   SCHEMAS=SCHM01_XIMO;

Cosa que nos creará una copia del SCHEMA SCHM01_XIMO de la BD EXPDB1  (parametro SCHEMAS=SCHM01_XIMO) en el directorio en cuestion, generando el fichero "dump" y "log" indicados en los parametros .

4. Copia de seguridad de tablas

Lógicamente no se exportan relaciones entre tablas.

La sentencia a ejecutar dentro de una ventana de comandos (shell) :

#     <usuario>  <password> <bd>             <directorio>               <dump-file>           <log-file>          <TABLES to backup>
expdp backupuser/myPassword@EXPDB1 DIRECTORY=oracle-backup-sql DUMPFILE=orcltabls.dmp LOGFILE=tabls_exp.log TABLES=regions, products;

Cosa que nos creará una copia de llas tablas regions y products de la BD EXPDB1  (parametro TABLES=regions,products) en el directorio en cuestion, generando el fichero "dump" y "log" indicados en los parametros .

5. Copia de seguridad de TABLESPACE

Lógicamente no se exportan relaciones entre tablas.

La sentencia a ejecutar dentro de una ventana de comandos (shell) :

#     <usuario>  <password> <bd>             <directorio>               <dump-file>            <log-file>       <TABLESPACE to backup>
expdp backupuser/myPassword@EXPDB1 DIRECTORY=oracle-backup-sql DUMPFILE=orcltblspc.dmp LOGFILE=tblspc_exp.log   TABLESPACES=TBLSPC1, TBLSPC2;

Cosa que nos creará una copia de los  TABLESPACES TBLSPC1, TBLSPC2 de la BD EXPDB1  (parametro TABLESPCES=TBLSPC1, TBLSPC2) en el directorio en cuestion, generando el fichero "dump" y "log" indicados en los parametros .


6. Múltiples ficheros del mismo tamaño, compresión, archivo de configuración...

6.1 Partir la copia en varios ficheros

Para crear múltiples ficheros de  copia de seguridad del mismo tamaño , hay que modificar el parámetro DUMPFILE y añadir el parámetr FILESIZE quedando:

DUMPFILE=orcltblspc%U.dmp FILESIZE=1M  

Observar el parámetro %U de DUMPFILE que se sustituye por el número correlativo del fichero generado y el parámetro FILESIZE que admite un valor entero seguido de una de estas letras B:byte, K:Kbyte, M: Megabyte y G:Gigabyte. En el ejemplo hemos puesto un mega de tamaño

6.2 Comprimir la copia de seguridad

OJO: Para utilizar compresión hay que tener la licencia Enterprise!
Para crear las copias comprimidas utilizamos el parámetro COMPRESSION que puede tomar los valores:
ALL: lo comprime todo.or the entire export operation.
DATA_ONLY: Solo datos.
METADATA_ONLY: Solo metadatos.
NONE: No comprime.

6.3 Archivo de configuración

Se puede crear un archivo de configuración. En mi caso he creado el archivo /home/oracle/COPY.par con la siguiente información

DIRECTORY=oracle-backup-sql 
DUMPFILE=orclschm%U.dmp   
FILESIZE=1M
LOGFILE=schm_exp.log
SCHEMAS=SCHM01_XIMO
COMPRESSION=ALL NO USAR EN ORACLE EXPRESS, SOLO EN ENTERPRISE

Y la sentencia a ejecutar es:

expdp backupuser/myPassword@EXPDB1 PARFILE=/home/oracle/COPY.par






martes, 19 de septiembre de 2023

Oracle 7 - Nuevo enfoque (4).Preparando el sistema de archvos docker para hacer backups de Oracle.

 0. Introducción

Créditos 

https://www.tutorialspoint.com/how-to-copy-files-from-host-to-docker-container

https://www.baeldung.com/linux/docker-mount-host-filesystem#:~:text=To%20mount%20a%20filesystem%20within,container%20target%20directory%20path

https://www.baeldung.com/linux/docker-container-add-volume

http://www.rebellionrider.com/?s=expdp

http://www.rebellionrider.com/?s=impdp

http://www.rebellionrider.com/?s=rman

1. Eligiendo un destino de las copias de seguridad

Se pueden hacer copias de seguridad dentro del sistema de ficheros propios del contenedor o también el el propio servidor físico.

2. Backups dentro  del sistema de ficheros docker

Se pueden hacer copias de seguridad dentro del sistema de ficheros propios del contenedor o también el el propio servidor físico.

En el primer caso utilizaremos el comando docker cp para copiar los ficheros entre el servidor físico y el contenedor docker tal como vimos en la entrada anterior:

#1. Listar los contenedores activos para ver su nombre
docker ps

#2. Copiar un fichero del servidor al contenedor
docker cp <src-path> <container-name>:<dest-path> 

#3. Copiar un fichero desde el contenedor al servidor
docker cp <container>:<src-path> <local-dest-path> 

3. Backups en carpetas compartidas con el servidor

OJO: No se debe compartir directamente una carpeta con un contenedor existente. Se puede hacer de forma no recomendable segun Baeldung  modificando el fichero de configuración JSON de docker situado en /var/lib/docker en Ubuntu

Se puede compartir una carpeta entre el servidor y un NUEVO contenedor a crear mediante mapeo directo de una carpeta del servidor o mapeando un VOLUMEN previamente creado con docker.

4. Dos formas de compartir carpetas en el servidor: Montaje directo y volúmenes

Veamos como se pueden crear los dos tipos de contenedores y como arrancarlos. En este caso para simplificar las cosas usaremos la imagen del linux Alpine


# OJO: puede que se pida ejecutar docker con "sudo"!
#-------------------------------------------------------------
#1. Contenedor que comparte la carpeta
#   del servidor/home/ximo/prueba y mapeándola a /tmp_prueba
#   en dicho contenedor            
#--------------------------------------------------------------
#1.1 Crear el contenedor (alpine) 
#                             <nombre contenedor>       <carpeta server>  <carpeta container> <nombre imagen> <programa a ejecutar>
docker container create --name my-alpine-share   -it -v /home/ximo/prueba:/tmp_prueba         alpine:latest   /bin/sh

#1.2 Arrancar el contenedor (alpine) 
docker container start -i my-alpine-share

#--------------------------------------------------------------
#2. Proceso de crear un contendedor que comparta un volumen
#--------------------------------------------------------------
#2.1 Manejo de un volumen 
#2.1.1 Crear un volumen
docker volume create my-volume

#2.1.1 Ver los volumenes creados
docker volumen ls

#2.1.2 Mostrar informacion del volumen
docker volume inspect my-volume

# Y obtenemos la ruta de montaje
#[
#    {
#        "CreatedAt": "2023-09-20T09:12:31+02:00",
#        "Driver": "local",
#       "Labels": null,
#        "Mountpoint": "/var/lib/docker/volumes/my-volume/_data",
#        "Name": "my-volume",
#        "Options": null,
#        "Scope": "local"
#    }
#]

#2.2 Manejo del contendor
#2.2.1 Crear un contenedor (alpine) compartiendo el volumen
#      del servidor/home/ximo/prueba y mapeándola a /tmp_prueba
#      en dicho contenedor                        

#                            <nombre contenedor>            <volumen>        <carpeta container>   <nombre imagen> <programa a ejecutar>
docker container create --name my-alpine-volume -it --mount source=my-volume,target=/opt/my-volume alpine:latest   /bin/sh

#2.2.2 Arrancar el contenedor (alpine) 
docker container start -i my-alpine-volume

Se recomienda crear un volumen pues es mas eficiente (la segunda opción)

5. Proceso de asignación de carpetas compartidas a un contenedor existente

En el apartado anterior hemos visto como crear contenedores nuevos a partir de imágenes y montando las carpetas compartidas o volumenes a compartir. Pero lo mas normal es que nos encontremos con contenedores previamente existentes que no se les ha montado una carpeta o volumen compartido.

Como no debemos asignar carpetas compartidas a un contenedor existente, lo mas cómodo es:

  1. Crear una nueva imagen a partir de un contenedor existente
  2. Crear un contenedor a partir de esta imagen al cual le añadiremos un VOLUMEN previamente creado o el mapeo de la carpeta del servidor (visto en el punto anterior
Para crear una imagen de un contenedor existente se puede hacer de dos maneras:
  1. docker container export y docker container import
  2. docker container commit
Vemos un ejemplo de cada uno de ellos

# OJO: puede que se pida ejecutar docker con "sudo"!
#-------------------------------------------------------------
#1. Contenedor que comparte la carpeta
#   del servidor/home/ximo/prueba y mapeándola a /tmp_prueba
#   en dicho contenedor            
#------------------------------------------------------------------
#1. Exportar el contenedor como imagen en un fichero "tar" (export)
#------------------------------------------------------------------
#1.1 Comando a utilizar para exportar
#                          <fichero.tar>    <nombre-contenedor>
docker container export -o my-alpine.tar     my-alpine

#1.2. Ver el contenido del fichero "tar"
tar -tvf myalpine-vol.tar

#

#1.3. Crear una imagen a partir de este fichero "tar"
#                   <fichero tar> <-nombre nueva imagen>
docker image import my-alpine.tar my-alpine-imported
#------------------------------------------------------------- #2. Exportar el contenedor como imagen directamente (commit) #------------------------------------------------------------- # <nombre-contenedor> <nombre nueva imagen> docker container commit my-alpine my-alpine-committed
#----------------------------------------------------------------------- #3. Ahora solo falta crear los contenedores a partir de las imagenes #----------------------------------------------------------------------- #3.1 Listamos imagenes docker images

6. Proceso completo de asignación de  volumen al contenedor docker existente de Oracle

Vamos a :
  1. Crear una imagen del contenedor de la BD Oracle con un commit
  2. Crear un volumen
  3. Crear un contenedor a partir de la imagen montando el volumen. Hay que advertir que al crear el contenedor SI hace falta dar puertos ni contraseñas.
<
#-------------------------------------------------------------
#1. Exportar el contenedor como imagen directamente (commit)
#    y listamos las imagenes para comprobar
#-------------------------------------------------------------
#                       <nombre-contenedor>  <nombre nueva imagen>
docker container commit ximo-oracle-db       oracle-db-image-committed

docker images

#REPOSITORY                                       TAG             IMAGE ID       CREATED         SIZE
#oracle-db-image-committed                        latest          036d3ff6a2cf   9 minutes ago   16.5GB
#container-registry.oracle.com/database/express   latest          8da8cedb7fbf   6 weeks ago     11.4GB


#-----------------------------------------------
#3. Creamos un volumen y listamos para combrobar
#-----------------------------------------------
docker volume create ximo-oracle-volume

docker volume ls

#DRIVER    VOLUME NAME
#local     ximo-oracle-volume


#------------------------------------------------------------
#4. Creamos un nuevo contenedor a partir de la imagen y 
#   le montamos el volumen
#   OJO: SI hace falta dar pawssword y puertos 
#------------------------------------------------------------
#                             <nombre-contenedor>      <mapeo puerto1> <mapeo puerto2>                                         <volumen a montar>        <punto montaje>  <nombre imagen>
docker container create --name ximo-oracle-db-new -it -p 1111:1521 -p 2222:5500 -e ORACLE_PWD=myPassword --mount source=ximo-oracle-volume,target=/opt/ximo-volume oracle-db-image-committed #-------------------------------- 5. Arrancamos el contenedor #--------------------------------
#                         <nombre-contenedor>
docker container start -i ximo-oracle-db-new


Y vemos que podemos conectar mediante DBeaver.







lunes, 18 de septiembre de 2023

Oracle 6 - Nuevo enfoque (3).Entender Oracle Express con Docker. Copias de seguridad de un esquema de Oracle. Crear y restaurar

0. Introducción

Ahora que tenemos instalado Oracle con docker, vamos a ver si somos capaces de ver el sistema de ficheros  y entender como funciona el sistema. A continuación, con sqlplus intentaremos hacer la copia de seguridad, y finalmente copiaremos los ficheros de copia de seguridad desde docker a una ubicación fuera de docker.

Créditos:

https://www.ajpdsoft.com/modules.php?name=News&file=print&sid=560#copiaseguridadlogicaoracle

https://www.baeldung.com/ops/docker-container-filesystem

http://www.rebellionrider.com/data-pump-expdp-how-to-export-schema-oracle/

https://arvindasdba.blogspot.com/2016/05/restore-database-schema-from-full-expdp.html

1. Entender Docker

1.0. Ver los contenedores docker en marcha (NO los contenedores internos  de Oracle)

docker ps

Y nos sale: (Tomar nota del ID del contenedor y del nombre que está al final)

CONTAINER ID   IMAGE                                            COMMAND                  CREATED      STATUS                PORTS                                                                                  NAMES
34a5f979d3de   container-registry.oracle.com/database/express   "/bin/bash -c $ORACL…"   4 days ago   Up 4 days (healthy)   0.0.0.0:1111->1521/tcp, :::1111->1521/tcp, 0.0.0.0:2222->5500/tcp, :::2222->5500/tcp   ximo-oracle-db

1.1 Copiar ficheros entre un contenedor docker y el servidor físico

Para copiar ficheros desde el servidor físico a un contenedor docker:

docker cp <src-path> <container-name>:<dest-path>    por ejemplo:
docker cp /home/ximo/myFile.txt ximo-oracle-db:/home/oracle

Y para copiar desde el contenedor al servidor

docker cp <container>:<src-path> <local-dest-path>    por ejemplo:
docker cp ximo-oracle-db:/home/oracle/myFile.txt /home/ximo


1.2. Abrir una consola de comandos en dicho contenedor y crear una carpeta donde guardar las copias de seguridad

docker exec -it 34a5f979d3de /bin/bash

Y nos sale una consola de comandos

bash-4.2$

Si ejecutamos pwd para ver donde estmos nos sale /home/oracle  

Podemos crear la carpeta /home/oracle/BACKUP_XIMO para descargar las copias de seguridad ahí (es evidente que estamos en el servidor) y por si acaso le damos permiso a 777

mkdir BACKUP_XIMO

chmod 777 BACKUP_XIMO

2. Introducción a las copias de seguridad en Oracle

2.1. Entrar en sqlplus como sys y mapear el directorio físico a uno de la BD

Tenemos 3 opciones para entrar en sqlplus como sysdba.

La primera opción es desde la consola de comandos ejecutar:

sqlplus / as sysdba

Y la segunda es salirse de la consola de comandos con el comando 

exit

y entramos en sqlplus con docker  

docker exec -it ximo-oracle-db  sqlplus / as sysdba

La tercera opción es hace click derecho sobre la BD XEPDB1 de la pestaña Database Navigator de DBeaver ->SQL Editor -> New SQL Script

Una vez dentro de sqlplus nos vamos al contenedor XEPDB1, (no hace falta en DBeaver pues ya estamos en dicho contenedor)

OJO: Seleccionar el contenedor XEPDB1 interno de Oracle (solo en sqlplus)  en 1ª y 2ª opciones):

SQL> ALTER SESSION SET CONTAINER = XEPDB1;

Ahora mapeamos el directorio creado, y le asignamos el nombre exp_schema_ximo. No nos olvidemos de colocar un ";" al final de las sentencias SQL sinó NO SE EJECUTARÁN !!

SQL> CREATE DIRECTORY exp_schema_ximo as '/home/oracle/BACKUP_XIMO';

y nos dice "Directory created"

Si queremos listar todos directorios, o solo el que nos interesa:

SQL> SELECT * FROM ALL_DIRECTORIES;

SQL> SELECT * FROM ALL_DIRECTORIES WHERE DIRECTORY_PATH LIKE '%XIMO%';

 Y nos devuelve:


OWNER|DIRECTORY_NAME |DIRECTORY_PATH          |ORIGIN_CON_ID|
-----+---------------+------------------------+-------------+
SYS  |EXP_SCHEMA_XIMO|/home/oracle/BACKUP_XIMO|            3|

2.2. Otorgar permisios de lectura y escritura del directorio mapeado al usuario

Sabemos que cuando se crea un SCHEMA también se crea un USUARIO con el mismo nombre asociado a dicho SCHEMA. Ahora hay que asignar permisos a dicho usuario al directorio.

SQL> GRANT read, write ON DIRECTORY EXP_SCHEMA_XIMO TO SCHM01_XIMO;

2.3. Otorgar el rol DATAPUMP_EXP_FULL_DATABASE al usuario

El rol DATAPUMP_EXP_FULL_DATABASE permite:

  1. Especificar un esquema cualquiera que no sea el tuyo o una lista de esquemas
  2. Exportar objetos de información adicional de cada esquema especificado, tales como contraseñs etc de manera que se pueden volver a crear los esquemas en la importación a otra BD.
Por tanto los usuarios que no tengan ese rol solo pueden exportar su esquema.

Para asignar dicho rol :

SQL> GRANT DATAPUMP_EXP_FULL_DATABASE TO SCHM01_XIMO;

2.4. BACKUP: Ejecutar el comando expdp (fuera de sqlplus) en una shell.


expdp es una sentnecia que se ejecuta en una ventana de comandos y no dentro sqlplus, por taqnto si estamos dentro de sqlplus hay que salir. Si estamos en docker ejecutamos

SQL> exit 

Si después de ejecutar este comando todavía estamos en docker entonces perfecto, pero si se hemos salido de docker hay que ejecutar el contenedor docker de  oracle en modo shell

docker exec -it 34a5f979d3de /bin/bash

siendo 34a5f979d3de el id del contenedor tal como vimos en el primer punto

Y nos sale una consola de comandos

bash-4.2$


Ahora ejecutamos el comando


expdp SCHM01_XIMO/myPassword@XEPDB1  DIRECTORY = EXP_SCHEMA_XIMO DUMPFILE =exp_schm_ximo.dmp LOGFILE=ximo_lg.log SCHEMAS = SCHM01_XIMO

Siendo
  • SCHM01_XIMO/myPassword@XEPDB1 : nombre esquema/contraseña esquema@contenedor interno de la base de datos
  • DIRECTORY = EXP_SCHEMA_XIMO : el directorio creado con CREATE DIRECTORY de sqlplus
  • DUMPFILE y LOGFILE son los nombres de los ficheros a generar y pueden ser cualquiera que queramos y a ser posible sin cambiar las extensiones
  • SCHEMAS = SCHM01_XIMO es el esquema a guardar. Si se quisiese guardar mas esquemas, se seararían por comas (ejemplo SCHEMAS= SCHM01_XIMO, miesquema1, otro_esquema )
y tras ejecutar el comando sale:

Export: Release 21.0.0.0.0 - Production on Tue Sep 19 12:50:50 2023
Version 21.3.0.0.0

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

Connected to: Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Starting "SCHM01_XIMO"."SYS_EXPORT_SCHEMA_01":  SCHM01_XIMO/********@XEPDB1 DIRECTORY=EXP_SCHEMA_XIMO DUMPFILE=exp_schm_ximo.dmp LOGFILE=ximo_lg.log SCHEMAS=SCHM01_XIMO 
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
Processing object type SCHEMA_EXPORT/USER
Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
Processing object type SCHEMA_EXPORT/ROLE_GRANT
Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/IDENTITY_COLUMN
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
. . exported "SCHM01_XIMO"."INVENTORIES"                 21.41 KB    1112 rows
. . exported "SCHM01_XIMO"."REGIONS"                     5.562 KB       4 rows
. . exported "SCHM01_XIMO"."CONTACTS"                    28.72 KB     319 rows
. . exported "SCHM01_XIMO"."COUNTRIES"                   6.382 KB      25 rows
. . exported "SCHM01_XIMO"."CUSTOMERS"                   32.28 KB     319 rows
. . exported "SCHM01_XIMO"."EMPLOYEES"                   17.35 KB     107 rows
. . exported "SCHM01_XIMO"."LOCATIONS"                   8.390 KB      23 rows
. . exported "SCHM01_XIMO"."ORDERS"                      9.781 KB     105 rows
. . exported "SCHM01_XIMO"."ORDER_ITEMS"                 21.21 KB     665 rows
. . exported "SCHM01_XIMO"."PRODUCTS"                    33.68 KB     288 rows
. . exported "SCHM01_XIMO"."PRODUCT_CATEGORIES"          5.585 KB       5 rows
. . exported "SCHM01_XIMO"."WAREHOUSES"                  6.171 KB       9 rows
Master table "SCHM01_XIMO"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCHM01_XIMO.SYS_EXPORT_SCHEMA_01 is:
  /home/oracle/BACKUP_XIMO/exp_schm_ximo.dmp
Job "SCHM01_XIMO"."SYS_EXPORT_SCHEMA_01" successfully completed at Tue Sep 19 12:51:48 2023 elapsed 0 00:00:56

Y si vamos al directorio /home/oracle/BACKUP_XIMO y hacemos "ls -al" sale

total 956
drwxrwxrwx 2 oracle oinstall   4096 Sep 19 12:50 .
drwxr-xr-x 1 oracle oinstall   4096 Sep 19 06:04 ..
-rw-r----- 1 oracle oinstall 962560 Sep 19 12:51 exp_schm_ximo.dmp
-rw-r--r-- 1 oracle oinstall   2603 Sep 19 12:51 ximo_lg.log

2.5. RESTORE Ejecutar el comando impdp (fuera de sqlplus) en una shell.


impdp es una sentnecia que se ejecuta en una ventana de comandos y no dentro sqlplus, por taqnto si estamos dentro de sqlplus hay que salir. 

Si queremos restaurar el  backup anterior en un nuevo SCHEMA por ejemplo SCHM01_XIMO_COP añadiremos  REMAP_SCHEMA=SCHM01_XIMO:SCHM01_XIMO_COP

La senterncia ejecutar es:

impdp SCHM01_XIMO/myPassword@XEPDB1 DIRECTORY = EXP_SCHEMA_XIMO DUMPFILE =exp_schm_ximo.dmp LOGFILE=ximo_lg.log SCHEMAS = SCHM01_XIMO REMAP_SCHEMA=SCHM01_XIMO:SCHM01_XIMO_COP


Y si observamos, se ha creado el nuevo esquema.