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.






No hay comentarios :

Publicar un comentario