Está en la página 1de 4

Export script (linux) con verificacin, compresin, split y md5sum

El siguiente script (bash) realiza un export de un esquema, verifica que halla terminado de forma exitosa y en tal caso procede a comprimirlo con gzip, luego corta el dump en partes y registra el hash md5 de cada una de las partes generadas. Por ultimo copia los trozos o partes del dump, el log correspondiente del export y el archivo con los hash md5 a servidores auxiliares. Entre algunas cosas que se puede corregir o mejorar estan que el renombrado del log no es necesario, si se incluye la especificacin correspondiente en el comando expdp, tambin, para las operaciones con los servidores auxiliares se puede emplear una lista/array.
#!/bin/bash # # 1. Export del esquema CMS # 2. Verificacion export successfull / notificacion por mail # 3. Compresion y split del archivo dump # 4. Generar archivo con hashmd5 de cada archivo del backup # 5. Copia de los archivos del backup en servidores # # update: 25-MAR-2010 # export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 export ORACLE_SID=orcl ORACLE_OWNER=oracle DATE=`date +%Y-%m-%d` BACKUP_DIR=/home/backup/backups/$DATE DUMP_DIR=/u01/app/oracle/admin/orcl/dpdump LOG_FILE=/home/backup/backups/$DATE/export_$DATE.log BACKUP_FILE=/home/backup/backups/$DATE/export_oracle_$DATE.dmp.gz echo "`date "+%Y-%m-%d %k:%M:%S"`" # export schema CMS $ORACLE_HOME/bin/expdp system/password schemas=ejemplo flashback_time="'`date "+%Y-%m-%d %k:%M:%S"`'" dumpfile=export_oracle_`date +%Y-%m-%d`.dmp # otorgar permisos chmod 777 $DUMP_DIR/export_oracle_`date +%Y-%m-%d`.dmp chmod 777 $DUMP_DIR/export.log # renombrar log mv $DUMP_DIR/export.log $DUMP_DIR/export_`date +%Y-%m-%d`.log # mover archivos a la carpeta backup mv $DUMP_DIR/export_oracle_`date +%Y-%m-%d`.dmp /home/backup/backups/`date +%Y-%m-%d`

mv $DUMP_DIR/export_`date +%Y-%m-%d`.log /home/backup/backups/`date +%Y%m-%d` # verificar si se realiz correctamente el backup CADENA=`cat /home/backup/backups/$DATE/export_$DATE.log | egrep "successfully completed"` ERROR=${#CADENA} if [ $ERROR = 0 ]; then MENSAJE="FAIL !" # si fallo, se borra el dump para recuperar espacio: rm -f /home/backup/backups/`date +%Y-%m-%d`/export_oracle_`date +%Y-%m%d`.dmp else MENSAJE="OK" fi echo $MENSAJE > /home/oracle/mail_body.txt # Notificacion por mail mutt -s "CMS Dump "$DATE email@company.com < /home/oracle/mail_body.txt

# SI EL DUMP SE HIZO CORRECTAMENTE SE REALIZAN LOS SIGUIENTES PASOS if [ $ERROR != 0 ]; then # comprimir dump gzip /home/backup/backups/`date +%Y-%m-%d`/export_oracle_`date +%Y-%m%d`.dmp # cortar el dump comprimido en partes de 1100 MB cd /home/backup/backups/`date +%Y-%m-%d` split --bytes=1100m --numeric-suffixes export_oracle_`date +%Y-%m%d`.dmp.gz export_oracle_`date +%Y-%m-%d`.dmp.gz # borrar dump original (dejar solo las partes) rm -f /home/backup/backups/`date +%Y-%m-%d`/export_oracle_`date +%Y-%m%d`.dmp.gz # contar los archivos del archivo.dmp.gz CONT=`find $BACKUP_DIR -type f -name '*.dmp.gz*' | wc -l` echo "Partes del backup: "$CONT # por cada archivo: generar el hash md5 y registrarlo en un archivo, luego copiar el archivo a los servidores for i in `seq 0 $((CONT-1))`; do # obtener el nombre del archivo a procesar if [ $i -le 9 ]; then FILE_PART=$BACKUP_FILE"0"$i else FILE_PART=$BACKUP_FILE$i fi echo $FILE_PART # registrar el hash md5 de cada archivo md5sum $FILE_PART >> $BACKUP_DIR/md5sum_$DATE.txt # copiar el archivo a otros servidores

lftp mput lftp mput lftp mput done

-c "open sftp://backup@server1.company.local $FILE_PART -O $BACKUP_DIR" -c "open sftp://backup@server2.company.local $FILE_PART -O $BACKUP_DIR" -c "open sftp://backup@server3.company.local $FILE_PART -O $BACKUP_DIR"

-u backup,password; -u backup,password; -u backup,password;

# Copiar el archivo con los hash md5 y el log del export a todos los demas servidores MD5=$BACKUP_DIR/md5sum_$DATE.txt lftp -c "open sftp://backup@server1.company.local -u backup,password; mput $MD5 -O $BACKUP_DIR; mput $LOG_FILE -O $BACKUP_DIR" lftp -c "open sftp://backup@server2.company.local -u backup,password; mput $MD5 -O $BACKUP_DIR; mput $LOG_FILE -O $BACKUP_DIR" lftp -c "open sftp://backup@server3.company.local -u backup,password; mput $MD5 -O $BACKUP_DIR; mput $LOG_FILE -O $BACKUP_DIR" fi

expdp: Exportar datos desde una Base de Datos Remota


Se puede exportar los datos de una instancia remota (empleando un dblink), almacenandose localmente el archivo dump correspondiente.

El parmetro a tener en cuenta en el expdp es NETWORK_LINK, el cual recibe el nombre del database link definido previamente. Para el ejemplo anterior, se indica una ubicacin especifica mediante DIRECTORY usando un directorio definido en la base de datos.

También podría gustarte