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






No hay comentarios :

Publicar un comentario