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í.
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.
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.
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.
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
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.
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.
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.