Backup del OCR periódico a filesystem

Llevaba algún tiempo dándole vueltas a realizar un backup del OCR fuera de ASM en RAC “por lo que pueda pasar“ (alguna ya me he encontrado en mi vida como dba). En este caso lo realizamos a un volumen compartido por NFS.

Siempre tenemos que estar seguros con backup y más cuando tenemos presente un RAC.

¿Qué pasa si se corrompe el fichero o el disco? ¿Reconfiguramos perdiendo tiempo? ¿Garantizamos una recuperación rápida? “Más agilidad más éxito

Encontré un blog muy interesante en la comunidad ACE de Marcus Vinicius Miguel Pedro, os dejo el Link:

Shell Script to create copy of OCR Backup to a filesystem

Despues de comentar con él (gracias Vinicius!) y agradeciendo la aportación quise darle una vuelta añadiendo:

  • Gestión de los históricos de backup (30 días)

  • Generación de logs y gestión de sus históricos (30 días)

  • Comunicación por email de los resultados de forma diaria

Y aquí lo teneis. Cargo las variables sin importar el HOME de la grid atendiendo al oratab ya que realizamos los parcheos Out of place (el home cambia) y no busco nunca mantener los scripts como un paso más.

Interesante, se planificará en el cron en ambos nodos, realizándolo solo desde el master. No hay que preocuparse que colisionen :)

cat /u01/xxxxxx/xxxxxx/backup_ocr.sh
#!/bin/bash
export PATH=$PATH:/usr/local/bin:/bin:/usr/bin

# Configuración de entorno Oracle
export ORAENV_ASK=NO
export ORACLE_SID=+ASM1
. oraenv

# Variables de configuración
export COPY_LOCATION=/backup/backup_ocr_XXX
export LOG_DIR=/u01/xxxxxx/xxxxxxx/logs
export MASTER_NODE=$(oclumon manage -get master | grep Master | awk '{print $3}' | cut -d "." -f1 | sed -e 's/\(.*\)/\U\1/')
export HOST=$(echo $HOSTNAME | cut -d "." -f1 | sed -e 's/\(.*\)/\U\1/')
EMAIL="xxxxxx@xxxxxxxx.xxxxx"
FECHA_LOG=$(date +'%Y%m%d_%H%M%S')
LOGFILE="$LOG_DIR/backup_ocr_$FECHA_LOG.log"

# Función para enviar correo
send_email() {
    local subject="$1"
    local message="$2"
    echo "$message" | mutt -s "$subject" "$EMAIL"
}

# Función para limpiar backups antiguos (más de 30 días)
clean_old_backups() {
    find "$COPY_LOCATION" -type f -name "ocr_backup_*" -mtime +30 -exec rm -f {} \;
}

# Función para limpiar logs antiguos (más de 30 días)
clean_old_logs() {
    find "$LOG_DIR" -type f -name "backup_ocr_*.log" -mtime +30 -exec rm -f {} \;
}

# Comprobar si estamos en el nodo maestro
if [ "$HOST" == "$MASTER_NODE" ]; then
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] Iniciando backup del OCR" >> "$LOGFILE"

    OCR_BACKUP_DATE=$(ocrconfig -showbackup | awk '{print $2"_" $3}' | grep "/" | head -1 | sed -r 's/\///g' | sed -r 's/\://g')
    OCR_BACKUP=$(ocrconfig -showbackup | awk '{print $4}' | grep "+" | head -1)

    # Realizar el backup
    if ocrconfig -copy "$OCR_BACKUP" "$COPY_LOCATION/ocr_backup_$OCR_BACKUP_DATE"; then
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup completado exitosamente en $COPY_LOCATION/ocr_backup_$OCR_BACKUP_DATE" >> "$LOGFILE"

        # Limpiar backups antiguos
        clean_old_backups
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backups antiguos eliminados" >> "$LOGFILE"

        # Limpiar logs antiguos
        clean_old_logs
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] Logs antiguos eliminados" >> "$LOGFILE"

        # Enviar correo OK
        message="Backup guardado en: $COPY_LOCATION/ocr_backup_$OCR_BACKUP_DATE"
        send_email "Backup OCR exitoso" "$message"
    else
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] Error al realizar el backup del OCR" >> "$LOGFILE"

        # Enviar correo de fallo
        message="Error al realizar el backup del OCR. Por favor, revisa los logs para más detalles $LOGFILE."
        send_email "Backup OCR fallido" "$message"
    fi
else
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] Nodo actual no es el nodo maestro, no se realizará backup" >> "$LOGFILE"
    exit
fi

Recuerda planificarlo en el cron en ambos nodos

[root@rac-xxx-001 ~]# crontab -l
#backup OCR
0 1 * * * /u01/xxxxxxx/xxxxx/backup_ocr.sh >> /dev/null 2>&1

Un salvavidas que nunca está de más porque puede ser necesario cuando menos te lo esperes… :)

0
Subscribe to my newsletter

Read articles from Carla Muñoz López directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Carla Muñoz López
Carla Muñoz López

Mi nombre es Carla y me defino como una apasionada de conocer, compartir ideas, divertirme y aprender todo lo relacionado con Oracle. Alegre y creativa, con un alto grado de autoexigencia, que busca, incluso sin querer, una forma diferente de ver un mismo problema o solución. Defensora del trabajo en equipo en todas las facetas de la vida y de disfrutar todo lo que haces, siempre con humildad. Actualmente cuento con más de 15 años de experiencia como administradora de Oracle, habiendo ocupado previamente posiciones como desarrolladora en la rama de Inteligencia de Negocios. Fue en ese momento que me di cuenta de que no quería centrarme en el desarrollo, sino participar en todas las capas que involucraban los datos, desde el despliegue de la base de datos hasta su explotación final. Siempre estoy dispuesta a ayudar y compartir conocimientos. Creo firmemente que con la tecnología hay que divertirse y no verla como una competencia. La persona con la que tienes que ser el mejor es contigo mismo.