miércoles, junio 13, 2012

Script de Backup de Oracle Database en Linux

Hola, aqui  os dejo un script para hacer una export de los datos de una base de datos en oracle. Lo unico que hay que cambiar serían las variables el numero de días que queremos guardar y la password del usuario system (estas dos cosas aparecen en rojo).

 Lo ideal sería crear un archivo .sh con este código. y luego un segundo donde ejecutamos el primer script y le damos ademas como $1 la ruta del log. Esto es sí metieramos este script en un archivo llamado "backup.sh"  y lo dejáramos en  /u01 y quisieramos crear el log llamado oracle.log tambien en /u01 creariamos un segundo script llamado "tarea.sh" quue llamara a este tal que así:

Este script genera un .dmp con los datos y guarda luego este archivo comprimido con un formato de nombre donde aparece la fecha. Además sólo mantiene sin borrar un numero de archivos igual al valor de la variable XHIST.

tarea.sh

#!/bin/bash
/u01/./backup.sh  >> /u01/oracle.log



backup.sh

#!/bin/bash
###########################################################
## Script para realizar backup Oracle
## ver 1.0
## RLS
###########################################################

XBACKUP="/u01/oracle/export"
XDIA=`date +'%d%m%Y-%H%M'`
XDIA_BACKUP=$XBACKUP/$XDIA
XDIA_F=`date +'%d-%m-%Y-%H%M'`
XHIST=7 #INDICA AQUI NUMERO DE DIAS a GUARDAR
LIMIT=$( expr $XHIST + 7)

echo "***Proceso de Backup iniciado: " $XDIA_F

o#Creamos el directorio para realizar el backup
mkdir $XDIA_BACKUP
echo "  -> Carpeta creada..."
chmod 777 $XDIA_BACKUP
chown -R oracle11g:oinstall $XDIA_BACKUP
echo "  -> Generando backup..."

##Seteamos variables de Entorno
ORACLE_HOME=/u01/oracle/product/11.2.0/dbhome_1
PATH=${PATH}:$ORACLE_HOME/bin
ORACLE_USER=oracle11g
ORACLE_SID=cti
ORACLE_BACKUP=$XDIA_BACKUP
export ORACLE_HOME PATH ORACLE_SID ORACLE_BACKUP
NLS_LANG=spanish_spain.we8mswin1252; export NLS_LANG

##Lanzamos exportacion de ORACLE
$ORACLE_HOME/bin/exp system/password full=y file=$ORACLE_BACKUP/spyro.dmp log=$ORACLE_BACKUP/spyro.log statistics=none BUFFER=1000000
echo "El import ha terminado con el siguiente estado:"
XRESULT=`tail -n 1 $ORACLE_BACKUP/spyro.log`
echo $XRESULT
echo "  -> Comprimiendo el Backup..."

##Comprimimos el archivo generado
gzip -8 $XDIA_BACKUP/spyro.dmp
echo "  -> Backup Generado en:" $XDIA_BACKUP
echo "  -> Borrando Backups antiguos de las siguientes fechas:"
DAYS=$(for d in $(seq $XHIST $LIMIT);do date --date="$d days ago" +"%d%m%Y"; done)
for d in $DAYS
do
rm -f -R $XBACKUP/$d*
echo $d

2 comentarios:

Anónimo dijo...

como puedo copiar el contenido de varios (4 o 5 o mas) archivos logs ( cuyo contenido se van modificando constantemente )en uno solo archivo log (que contenga el contenido de los archivos logs).....automaticamente en 5 minutos

Roberto Yazston dijo...

Son archivos log de base de datos o son del sistema u otro software?, en cualquier caso si sabes exactamente cuándo se modifican, podrías hacer justo después de la modificación una copia de esos fichero y entonces trabajar con esa copia para aunque sea con un cat guardar todo su contenido (si es legible) en ellos y después poner esto bien en conjunto con la tarea que modifique los logs para que se haga después o configurarlo en el cron.

No se sí esto te ayuda o no, si me das más datos igual te puedo ayudar más.