Configurar script de backup con expdp

Oracle-logo

Siempre es necesario realizar un backup a nuestras bases de datos, así poder respaldar la información y almacenarla en un lugar seguro.

Por lo cual, les quiero enseñar el script que utilizo para generar un backup con expdp, de mis bases de datos.

Lo primero que debemos hacer, es crear un espacio para almacenar nuestros scripts, recomiendo usar el home del usuario y crear una carpeta

[oracle@soyundba ~]$ mkdir scripts
[oracle@soyundba ~]$ cd scripts/
[oracle@soyundba scripts]$ mkdir bckps
[oracle@soyundba scripts]$ cd bckps/

Después de crear nuestra carpeta de scripts, procedemos a acceder y crear nuestro archivo para el bck de la base de datos

[oracle@soyundba bckps]$ vi expdp_full.sh
#!/bin/bash

######################################################
#                     Soy un DBA                     #
# Nombre del script: expdp_full.sh                   #
# Descripcion: Generar backup full de la BD soyundba #
# Fecha creacion: Abril 10 2020                      #
# Creado por: Julian David Ortiz Idrobo              #
# Fecha modificacion:                                #
# Modificado por:                                    #
######################################################

######################
# SETEO DE VARIABLES #
######################
export ORACLE_BASE=/oracle/app/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db
export ORACLE_SID=$1
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin

export ruta=/backup/soyundba/dpump
export nas=/nas/backup/soyundba/dpump
export fecha=`date +%d%b%Y_%H%M`

#######################
# 5 DIAS DE RETENCION #
#######################
find $ruta/expdp_$ORACLE_SID* -type f -mtime +5 -exec rm -f {} \;

##############################
# EXPORT DE LA BASE DE DATOS #
##############################
expdp userid="'/ as sysdba'" directory=BCKP dumpfile=expdp_$ORACLE_SID'_'$fecha.dmp logfile=expdp_$ORACLE_SID'_'$fecha.log full=y exclude=statistics

####################
# COMPRIMIR BACKUP #
####################
gzip $ruta/expdp_$ORACLE_SID'_'$fecha.dmp

#########################
# PASAR BACKUP A LA NAS #
#########################
cp $ruta/expdp_$ORACLE_SID'_'$fecha.* $nas

Otorgamos los permisos necesarios, para que el usuario Oracle pueda ejecutar la tarea automáticamente desde el crontab

[oracle@soyundba bckps]$ chmod 755 expdp_full.sh

Asimismo modificamos nuestro contab para dejar nuestra tarea programada a una hora especifica. Tal como en el ejemplo, nuestro backup se ejecuta todos los días a las 10:00 pm

[oracle@soyundba bckps]$ crontab -e
# BACKUP DATAPUMP FULL DIARIO 8:10PM
00 10 * * * /home/oracle/scripts/bckps/expdp_full.sh soyundba

Además tendremos que crear también, la carpeta donde quedarán almacenados nuestros backups, en el script que les compartí, tenemos dos ubicaciones:

  • Ubicación dentro del servidor -> /backup/soyundba/dpump
  • Ubicación en lugar externo (NAS) -> /nas/backup/soyundba/dpump
[oracle@soyundba bckps]$ cd /backup/
[oracle@soyundba backup]$ mkdir soyundba
[oracle@soyundba backup]$ cd soyundba/
[oracle@soyundba soyundba]$ mkdir dpump
[oracle@soyundba soyundba]$ cd dpump/

Por ultimo, tendremos que crear el directorio dentro de la base de datos

[oracle@soyundba dpump]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Mon Nov 30 14:57:19 2020

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


Connected to:
Oracle Database 11g Release 11.2.0.4.0 - 64bit Production

SQL> CREATE OR REPLACE DIRECTORY BCKP AS '/backup/soyundba/dpump/';

Directory created.

SQL> exit

Finalmente, podremos realizar la prueba del script, ejecutando este de manera manual

El error que nos saldrá al iniciar la ejecución, se debe a que no encuentra archivos para eliminar, recordando que tenemos una retención de 5 días

[oracle@soyundba dpump]$ sh /home/oracle/scripts/bckps/expdp_full.sh soyundba
find: `/backup/soyundba/dpump/expdp_soyundba*.*': No such file or directory

Export: Release 11.2.0.4.0 - Production on Mon Nov 30 15:02:37 2020

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

Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
Starting "SYS"."SYS_EXPORT_FULL_01":  userid="/******** AS SYSDBA" directory=BCKP dumpfile=expdp_soyundba_30Nov2020_1502.dmp logfile=expdp_soyundba_30Nov2020_1502.log full=y exclude=statistics
Estimate in progress using BLOCKS method...
Processing object type DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 80.37 MB
...
...
...
Master table "SYS"."SYS_EXPORT_FULL_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYS.SYS_EXPORT_FULL_01 is:
  /backup/soyundba/dpump/expdp_soyundba_30Nov2020_1502.dmp
Job "SYS"."SYS_EXPORT_FULL_01" successfully completed at Mon Nov 30 15:04:49 2020 elapsed 0 00:02:12

Podemos listar nuestros archivos físicos

[oracle@soyundba dpump]$ l
total 29M
-rw-r-----. 1 oracle oinstall  29M Nov 30 15:04 expdp_soyundba_30Nov2020_1502.dmp.gz
-rw-r--r--. 1 oracle oinstall 100K Nov 30 15:04 expdp_soyundba_30Nov2020_1502.log

Con esto, ya tendremos nuestras bases de datos protegidas ante contingencias

Te invito a seguir consultando más articulos relacionados a backups en Oracle dando clic aquí.

 

Acerca de JulianOrtiz0506

Soy administrador de bases de datos y desarrollador web, desde mis inicios en el mundo de la informática, he implementando proyectos personales y empresariales. Por consiguiente esto me ha permitido contar con una amplia calificación y destreza sobre mis áreas de conocimiento. Sobre todo suelo estar en constante aprendizaje, diariamente me estoy informando sobre nuevas tecnologías. Ya queme gusta estar actualizado en la tecnología de punta para todas las plataformas que me apasionan y con las cuales trabajo día a día.

Ver todas las entradas de JulianOrtiz0506 →

7 comentarios en «Configurar script de backup con expdp»

  1. Saludos Julián.

    Cuando uso tu script me genera un mensaje «LRM-00112: multiple values not allowed for parameter ‘logfile'»

    Cuando ajusto expdp userid=»‘/ as sysdba'» directory=BKP dumpfile=expdp_$ORACLE_SID’_’$fecha.dmp logfile=expdp_$ORACLE_SID’_’$fecha.log full=y exclude=statistics por expdp userid=»‘/ as sysdba'» directory=BKP dumpfile=expdp_$ORACLE_SID’_’$fecha.dmp logfile=expdp_$ORACLE_SID.log full=y exclude=statistics el proceso de export funciona correctamente para mí, ¿Qué puede estar sucediendo?

    Mi sistema Operativo es Oracle Linux 7.9 y mi Motor es Oracle 12.1.0.1.0

    Muchas gracias por tu respuesta, quedaré atento.

     
    1. Holas Victor,

      Este mensaje generalmente se origina por error de sintaxis, te sugiero validar bien el script y sus comillas.

      expdp userid=»‘/ as sysdba'» directory=BKP dumpfile=expdp_$ORACLE_SID’_’$fecha.dmp logfile=expdp_$ORACLE_SID’_’$fecha.log full=y exclude=statistics

      Donde:
      userid=->(Comilla doble)»->(Comilla simple)’/ as sysdba->(Comilla simple)’->(Comilla doble)»
      _$ORACLE_SID->(Comilla simple)’_->(Comilla simple)’$fecha

      Me avisas cómo te va.

       
      1. Hola Julián, muchas gracias por responder.

        Al parecer no me notificó el correo tu respuesta.

        Lo intenté nuevamente pero por alguna razón no está tomando la variable $fecha, en lugar de ello puse el valor de la variable directamente en la lista de parámetros y funciona, de esta forma lo ajusté:
        expdp userid=\’/ as sysdba\’ directory=BACKUP dumpfile=expdp_pruebas_`date +%d%b%Y`.dmp logfile=expdp_pruebas_`date +%d%b%Y`.log full=y reuse_dumpfiles=y exclude=statistics

        También tuve que incluir el parámetro reuse_dumpfiles=y ya que en el directorio donde se almacena el dumpfile se crea un archivo oculto «.dmp» el cual no tiene nombre y cada que realizaba un export usando el script me indicaba que no podía crear el archivo «/ruta/.dmp» porque ya existía, en fin cosas que se va encontrando en la marcha, ahora voy a verificar por qué no realiza la compresión del archivo.

        Muchas gracias por tu respuesta.

         
  2. Hola Julian:

    Muy bueno tu proceso y me funcionó enseguida. Pero me gustaría también conocer como hacer lo mismo pero con sólo algunos esquemas de la base de datos.

    Saludos y felicitaciones

     
    1. Holas Marco,

      Datapump tiene una opción para sacar un backup a solamente los esquemas, sería cambiar la opción del expdp (full=y), por (schemas=schema1,schema2,schema3), separando por coma los diferentes esquemas a los que le quieras sacar el export.

       
  3. Hola Julián, muy bueno el aporte, me funciono bien, solo tengo una consulta, la variable PATH es la misma en todas las instalaciones o puede cambiar, como podría validar cual es mi variable path.
    Yo use la misma que tienes en el ejemplo y me funciono, pero si me queda esa curiosidad.

    Saludos.

     
    1. Holas Josué,

      La variable PATH no siempre será la misma, pues dependerá de diferentes configuraciones que se tengan que añadir. Sin embargo, por parte base de datos es la más general, aunque también le puedes añadir la ubicación del OPatch del Oracle.

      export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch

      Cuando especificas al exportar sobre la variable lo siguiente -> $PATH, lo que quiere decir es que lo que ya tiene configurado la variable PATH le añada lo siguiente que para este caso es $HOME/bin, $ORACLE_HOME/bin y $ORACLE_HOME/OPatch.

      Por otro lado, para validar lo que tienes en la variable, lo puedes realizar validando el environment de tu usuario, únicamente utilizar el comando en linux env

      Ejemplo:
      [oracle@soyundba OPatch]$ env
      PATH=/oracle/app/oracle/product/11.2.0/db/bin:/home/oracle/.local/bin:/home/oracle/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/oracle/.local/bin:/home/oracle/bin
      [oracle@soyundba OPatch]$

      Entre muchos otros datos que nos devuelve.

       

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *