Veeam Oracle RMAN Plugin

Veeam Oracle RMAN Plugin

Esta vez revisaremos la instalación, configuración y respaldo con scripts (y por supuesto consejos) para dejar completamente funcional Veeam Oracle RMAN Plugin ya que por lo general, siempre me preguntan sobre esta solución en distintos lugares, ya que es una solución simple, flexible y confiable para almacenar los respaldos de RMAN (Recovery Manager). Este post solo se enfoca en Oracle RAC en Linux con ASM y la recuperación de Bases de Datos con Veeam Explorer for Oracle. Este es un post 4 en 1, para que vayan pasando por paginas al final de cada post.

Introducción

Primero que todo debemos saber algo muy importante, Veeam Oracle RMAN Plugin es una herramienta que trabaja en conjunto con Recovery Manager (RMAN) que es la solución de respaldo nativa de Oracle y la cual permite realizar respaldos soportados por el fabricante.

Dicho lo anterior, vamos a explicar brevemente que es y que hace Veeam Oracle RMAN Plugin, ya que como sabemos, el respaldo lo hace RMAN trabajando en conjunto con el Plugin.

Por supuesto existen otras formas de respaldo de Bases de Datos de Oracle con Veeam, como por ejemplo con Veeam Agent for Linux o la integración nativa para Oracle en ambientes virtualizados, estas formas las veremos en otros posts.

Que es Veeam Oracle RMAN Plugin?

Este Plugin es una solución de Veeam Certificada por Oracle (Link de la Certificación) para realizar respaldos con RMAN y guardarlos en el repositorio de Veeam Backup & Replication. Así podrás almacenar los respaldos de tus bases de datos Oracle que se encuentren en Cluster, Oracle RAC, o sin cluster, standalone usando ASM y por supuesto realizar la recuperación a través de Veeam Explorer for Oracle RMAN

Técnicamente lo que realiza Veeam Oracle RMAN Plugin, es funcionar como una librería SBT para configurarse con RMAN y éste último utilice la librería para acceder a los repositorios de Veeam VBR y alojar los respaldos con la política de respaldo que se utilice con RMAN.

Instalación

Primero que todo y antes de instalar, se debe cumplir con los requerimientos de sistema y versiones soportadas de Veeam Oracle RMAN Plugin, que los puedes encontrar en el siguiente enlace:

https://helpcenter.veeam.com/docs/backup/plugins/system_requirements.html?ver=100

El Oracle RAC que tengo instalado en mi laboratorio consta de 2 nodos con los siguientes detalles:

Sistema OperativoOracle Linux 7.8
CPU8 vCPU
RAM16 GB
Disco S.O50 GB
Disco Oracle ISCSI8 x 20GB (Compartido)
Version Oracle19.3.0.0.0
Version Oracle Grid19.0.0.0.0
ASMSi
Bases de DatosBRAZIL
CHILE
RAC19C
Detalles Oracle RAC Lab 24xSiempre

Vista de la configuración del RAC con el comando:

/oracle/grid/19.3.0/grid_home/bin/crsctl status res -t

Luego de estar completamente seguros que tenemos las versiones soportadas, necesitamos descargar o montar la ISO de Veeam Backup & Replication para copiar el paquete de instalación de Veeam Oracle RMAN Plugin:

ISO Veeam Backup & Replication / Carpeta Plugins

En mi caso y a la fecha de este post, la última versión de Veeam Oracle RMAN Plugin es:

VeeamPluginforOracleRMAN-10.0.1.4854-1.x86_64.rpm

Donde utilizaremos la versión de 64bits y el paquete RPM para instalarlo en todos los nodos de Oracle RAC, que es la forma recomendada, ya que RMAN puede decidir por que nodo realizar el respaldo a través de una característica llamada RMAN Node Affinity Awareness.

Copiamos el archivo a los nodos, o como tu quieras, en mi caso lo haré con WinSCP:

Como se ve en la imagen anterior, he copiado con el usuario root el rpm a ambos nodos del RAC (20.20.20.91 y 20.20.20.92).

Algo muy importante y clave para la instalación de Veeam Oracle RMAN Plugin es que se debe instalar con el usuario “root” y luego configurar con el usuario de Oracle que generalmente es “oracle”. Esto utilízalo como regla general, ya que si configuras con “root” no tendrás acceso a las variables de entorno de Oracle y por tanto tendrás errores.

Ahora instalaremos el plugin en ambos nodos con el siguiente comando:

Linux 
rpm -ivh VeeamPluginforOracleRMAN-10.0.1.4854-1.x86_64.rpm
Solaris SPARC
pkgadd -d /VeeamPluginforOracleRMAN-10.0.1.4854-1.SPARC.pkg

Ya que mi Oracle RAC esta en Oracle Linux utilizare el comando para Linux, en caso de que tengas un Oracle RAC sobre SPARC, debes usar el comando para ese sistema operativo. Al ejecutar en cada nodo, obtendrás como resultado:

Nodo 1:
[[email protected] ~]# rpm -ivh VeeamPluginforOracleRMAN-10.0.1.4854-1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:VeeamPluginforOracleRMAN-10.0.1.4################################# [100%]
Run "OracleRMANConfigTool --wizard" to configure the Veeam Plug-in for Oracle RMAN
[[email protected] ~]#

Nodo 2:

[[email protected] ~]# rpm -ivh VeeamPluginforOracleRMAN-10.0.1.4854-1.x86_64.rpm
Preparing...                          ################################# [100%]
Updating / installing...
   1:VeeamPluginforOracleRMAN-10.0.1.4################################# [100%]
Run "OracleRMANConfigTool --wizard" to configure the Veeam Plug-in for Oracle RMAN
[[email protected] ~]#


Y como explique anteriormente, para la configuración, utilizaremos el usuario de Oracle que en este caso es “oracle”.

Configuración

Ahora debemos conectarnos vía SSH con el usuario “oracle” o el que pertenezca a la instalación de Oracle para ejecutar la configuración del Plugin para Oracle RMAN de Veeam. Algo muy importante es que el usuario se encuentre cargando las variables de entorno de oracle, si no, cargar el perfil.

Muchas veces distintos administradores de bases de datos o DBA’s prefieren mantener archivos de perfiles por cada instancia de Oracle u otros configuran directamente las variables en el perfil del usuario por defecto. Cuando realicen la configuración, primero validen como se carga el perfil y sus respectiva configuraciones.

Como nos indico el mensaje cuando instalamos el plugin,debemos ejecutar el comando “OracleRMANConfigTool –wizard” con el usuario oracle y nos arrojará lo siguiente:

[[email protected] ~]$ OracleRMANConfigTool --wizard
Enter backup server name or IP address: veeam24xs.24xsiempre.cl
Enter backup server port [10006]:
Enter username: 24xsiempre\veeam
Enter password for 24xsiempre\veeam:
Veeam repositories:
1. Default Backup Repository
Specify up to 4 Veeam repositories to use as target using whitespace as a separator: 1
Enter the number of data streams (From 1 to 254) to send to each repository concurrently(RMAN DEVICE PARALLELISM value). Channel count per device [1]: 4
Enable Veeam compression? (Y/n): n

Cannot find any Oracle instances.

Please apply the following RMAN settings manually:
CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE;
CONFIGURE CHANNEL DEVICE TYPE SBT_TAPE
PARMS 'SBT_LIBRARY=/opt/veeam/VeeamPluginforOracleRMAN/libOracleRMANPlugin.so'
FORMAT '88788f9e-d8f5-4eb4-bc4f-9b3f5403bcec/RMAN_%I_%d_%T_%U.vab';
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1;
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F_RMAN_AUTOBACKUP.vab';

Channel definition for RMAN scripts:
ALLOCATE CHANNEL VeeamAgentChannel1 DEVICE TYPE SBT_TAPE
PARMS 'SBT_LIBRARY=/opt/veeam/VeeamPluginforOracleRMAN/libOracleRMANPlugin.so'
FORMAT '88788f9e-d8f5-4eb4-bc4f-9b3f5403bcec/RMAN_%I_%d_%T_%U.vab';

Save configuration?
1. Apply configuration to the Oracle environment
2. Export configuration into a file for manual setup
3. Cancel without saving
Enter:3
*** No Oracle database instances were configured ***

Como se puede observar en el log anterior, existen dos lineas marcadas la 7 y la 12, como también, que no se pudo configurar el Plugin.

En relación a la linea 7, esto solo muestra los repositorio donde el usuario haya permitido acceso, es decir, en la configuración de Repositorios de Veeam Backup & Replication, en la parte de “Access Permissions” por defecto, siempre esta permitido el acceso al Default Backup Repository y cuando configuramos por primera vez el Plugin, siempre veremos este repositorio, por ejemplo:

Permisos de Acceso al Repositorio

Para dar acceso a otros Repositorios, recomiendo dejar “Deny to Everyone” el “Default Backup Repository” o solo permitir a los usuarios que accederán vía Veeam Oracle RMAN Plugin, en mi caso, bloquearé el acceso al Default Repository y permitiré el Acceso a un Scale-Out Backup Repository (SOBR) para guardar los respaldos:

De acuerdo al punto 12, éste, tiene directa relación a la versión de Oracle que se este ejecutando en un RAC ya que a partir de la versión 12.2.0.1.171017 GI RU/PSU (patch 26737266) y 12.2.0.1.171017 OCW RU/PSU (patch 26729536). MOS Note Doc ID 2329359.1, ha cambiado la forma de actualizar las instancias en el archivo /etc/oratab, es decir, el archivo mencionado ya no se actualiza con los nombres de instancias ejecutándose en el Oracle RAC.

Cuando se configura Veeam Oracle RMAN Plugin, lee el archivo /etc/oratab para detectar los nombres de instancias, pero si en este archivo no se encuentran las instancias, lamentablemente no será posible configurar el plugin.

Existen dos soluciones, la primera es que se agregue manualmente el nombre de cada instancia que se ejecuta en Oracle RAC (la cual no me gusta) y la segunda opción es ejecutar un script para que lea las instacias del RAC y actualice el archivo /etc/oratab, para ello, aquí realizaremos la implementación del script para automatizar la actualización de ese archivo.

** En la versión 11 de Veeam Backup & Replication Ya no sera necesario utilizar este workaround**

Como recomendación, se debe ejecutar en todos los nodos del Oracle RAC (RMAN Node Affinity Awareness):

original="#\n\n\n\n# This file is used by ORACLE utilities.  It is created by root.sh\n# and updated by either Database Configuration Assistant while creating\n# a database or ASM Configuration Assistant while creating ASM instance.\n\n# A colon, ':', is used as the field terminator.  A new line terminates\n# the entry.  Lines beginning with a pound sign, '#', are comments.\n#\n# Entries are of the form:\n#   $ORACLE_SID:$ORACLE_HOME:<N|Y>:\n#\n# The first and second fields are the system identifier and home\n# directory of the database respectively.  The third field indicates\n# to the dbstart utility that the database should , "Y", or should not,\n# "N", be brought up at system boot time.\n#\n# Multiple entries with the same $ORACLE_SID are not allowed.\n# \n# \n"
path="/oracle/grid/19.3.0/grid_home/bin/crsctl"
cat /dev/null > /etc/oratab
printf "$original" >> /etc/oratab

for resource in $($path status resource -w "((TYPE = ora.database.type) AND (LAST_SERVER = $(hostname -s)))" | grep ^NAME | sed 's/.*=//'); do
    full_resource=$($path status resource -w "((NAME = $resource) AND (LAST_SERVER = $(hostname -s)))" -f)
    db_name=$(echo "$full_resource" | grep ^DB_UNIQUE_NAME | awk -F= '{ print $2 }')
    ora_home=$(echo "$full_resource" | grep ^ORACLE_HOME= | awk -F= '{ print $2 }')
    instance="1" #Cambiar numero de acuerdo al numero de nodo e instancia
    oracle="$db_name$instance:$ora_home:N \n"
    printf "$oracle" &>> /etc/oratab
done

#Reconfiguro Oracle Plugin
echo=""
no="n" #cambiar por "y" si necesitas habilitar compresion de Veeam
uno="1" #aplica cambios
exec >> /home/oracle/veeam.log 2>&1 #log en ruta
OracleRMANConfigTool --wizard <<EOF
$echo
$echo
$echo
$echo
$echo
$echo
$no
$uno
EOF

Copiar el archivo a los nodos, con el nombre addoratab.sh y asignarle permisos de ejecución con chmod +x addoratab.sh. Algo clave como se ve en la linea 10, el numero se debe cambiar de acuerdo al nodo de RAC ya que por ejemplo en el nodo 1 el nombre de la instancia seria “CHILE1” y en el nodo 2 seria “CHILE2”. Y por supuesto ejecutar el script con sh addoratad.sh o ./addoratab.sh con el usuario “oracle”. Y podrás observar el archivo actualizado con el comando cat /etc/oratab.

Luego de la configuración de permisos del repositorio de Veeam Backup & Replication, la actualización del archivo /etc/oratab a través del script, volvemos a ejecutar el wizard del plugin, lo que nos mostrará lo siguiente:

[[email protected] ~]$ OracleRMANConfigTool --wizard
Enter backup server name or IP address: veeam24xs.24xsiempre.cl
Enter backup server port [10006]:
Enter username: 24xsiempre\veeam
Enter password for 24xsiempre\veeam:
Veeam repositories:
1. SOBR
Specify up to 4 Veeam repositories to use as target using whitespace as a separator: 1
Enter the number of data streams (From 1 to 254) to send to each repository concurrently(RMAN DEVICE PARALLELISM value). Channel count per device [1]: 4
Enable Veeam compression? (Y/n): n

RMAN settings will be applied automatically to the following databases:
ORACLE_SID=BRAZIL1 ORACLE_HOME=/oracle/db/19.3.0/db_home
ORACLE_SID=CHILE1 ORACLE_HOME=/oracle/db/19.3.0/db_home
ORACLE_SID=RAC19C1 ORACLE_HOME=/oracle/db/19.3.0/db_home

RMAN settings:
CONFIGURE DEFAULT DEVICE TYPE TO SBT_TAPE;
CONFIGURE CHANNEL DEVICE TYPE SBT_TAPE
PARMS 'SBT_LIBRARY=/opt/veeam/VeeamPluginforOracleRMAN/libOracleRMANPlugin.so'
FORMAT '60fc82ee-cedc-458f-beda-346323f93c1e/RMAN_%I_%d_%T_%U.vab';
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1;
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1;
CONFIGURE DEVICE TYPE SBT_TAPE PARALLELISM 4;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F_RMAN_AUTOBACKUP.vab';

Channel definition for RMAN scripts:
ALLOCATE CHANNEL VeeamAgentChannel1 DEVICE TYPE SBT_TAPE
PARMS 'SBT_LIBRARY=/opt/veeam/VeeamPluginforOracleRMAN/libOracleRMANPlugin.so'
FORMAT '60fc82ee-cedc-458f-beda-346323f93c1e/RMAN_%I_%d_%T_%U.vab';

Save configuration?
1. Apply configuration to the Oracle environment
2. Export configuration into a file for manual setup
3. Cancel without saving
Enter: 1

*** Database instance BRAZIL1 is configured ***

*** Database instance CHILE1 is configured ***

*** Database instance RAC19C1 is configured ***
[[email protected] ~]$

Como vemos, en la linea 7 ya solo muestra el SOBR que se asigno para los respaldo de Oracle con Veeam Oracle RMAN Plugin y en las lineas 13,14,15, se observa que reconoce las instancias de RAC para que RMAN quede configurado para proceder al respaldo.

Algo muy importante, ¿que pasa si después agrego otra instancia al Oracle RAC?. Simple, si no agregas nuevamente la instancia al archivo /etc/oratab, Veeam Oracle RMAN Plugin no lo procesará, es por ello, que aqui viene una solución o un consejo muy bueno. El script addoratab.sh ya esta preconfigurado para que cuando se agende la ejecucion diaria del script addoratab.sh, éste automaticamente agregue la nueva instancia y reconfigure el Veeam Oracle RMAN Plugin, sin la necesidad de intervencion manual.

Solo debes agendarlos en crontab con el usuario “oracle”, como por ejemplo:

[[email protected] ~]$ crontab -e

y luego agregar:

0 0 1 ? * * * /home/oracle/addoratab.sh

Cerrar con esc:wq
Se ejecuta todos los dias a las 1 AM

Respaldo

Para respaldar las bases de datos del RAC, literalmente es a gusto del consumidor o en este caso, de los DBA’s ya que generalmente los DBA’s mantienen sus hermosos scripts para respaldar las bases de datos.

Que pasa si no tengo Script y necesito respaldar mi Oracle RAC? aquí dejaré un script para hacer respaldo de todas las instancias que se encuentren en el Oracle RAC, utilizando el usuario “oracle”, logueando todos los comandos, buscando errores en caso de existir alguno y por supuesto enviar alertas por correo. (Debes configurar mailx)

#!/bin/bash
 . /home/oracle/.bash_profile                                                #Carga variables de Entorno del Perfil y usuario Oracle
MAQUINA=`hostname`                                                          #Seteo Variable Nombre de Maquina
LOG=/home/oracle/                                                           #Carpeta donde alojar logs
HORA=`date +%H%M_%d%m%Y`                                                    #Sintaxys Hora
FECHA=`date +%d%m%Y`                                                        #Sintaxys Fecha
[email protected]
Append=1 #numero de nodo donde se ejecuta
#Comienzo Script
for ORACLE_SID in $($ORACLE_HOME/bin/srvctl config database)   #Loop para extraer nombre de SID en archivo
do
export ORACLE_SID=$ORACLE_SID$Append
LOGFILE=${LOG}/${ORACLE_SID}_${FECHA}_${HORA}.log                           #Construye Nombre de Arhivo Log
exec >> ${LOGFILE} 2>&1                                                     #Escribe Log
#Ejecucion RMAN, aqui puede ir el script de RMAN del Cliente
${ORACLE_HOME}/bin/rman <<EOF
connect target /
run {
backup database plus archivelog;
}
LIST BACKUP SUMMARY;
EOF
echo  Base de Datos: "${ORACLE_SID}" >> ${LOG}/mail         #Escribe el SID en log mail para envia el nombre
cat ${LOGFILE} >> ${LOG}/mail                               #Lee el Archivo log y lo inserta al mail
done                                                        # Fin del Loop
grep RMAN-06273 ${LOG}/mail >>/dev/null                     #Busca error RMAN en caso de falla.
if [ $? -eq 0 ]                                             # Si es distinto a 0 pasa a la sigueinte instruccion si es igual a 0 envia correo con alerta
then
ASUNTO='ALERTA!: Respaldo de '${MAQUINA}' ha fallado'       #Configuracion Asunto Alerta 1
else
grep -i error ${LOGFILE} >>/dev/null                        #Busca la palabra error
if [ $? -eq 0 ]                                             #Si es distinto a 0 pasa a la sigueinte instruccion si es igual a 0 envia correo con alerta
then
ASUNTO='ALERTA!: Respaldo de '${MAQUINA}' ha fallado'       #Configuracion Asunto Alerta 2
else
ASUNTO='Respaldo '${MAQUINA}' Correcto'                     #Sitodo esta OK, enviara correo con Asunto correcto.
fi
fi
## Mail ##
cat ${LOG}/mail | /usr/bin/mailx -s "${ASUNTO}" "${CORREO}"     #Lee el archivo Mail para enviarlo como cuerpo del correo.
rm -rf ${LOG}/mail                                              #elimino log utilizado
echo $exit 0

En las lineas 17 a la 21, en donde van las instrucciones de RMAN para realizar el respaldo, puedes editar el script como quieras, solo no olvides cambiar el correo y algunos parámetros que se observan, como el numero de nodo donde se ejecuta por ejemplo. Este script hace un respaldo full de las bases de datos incluyendo los ArchiveLogs.

Para los mas ñoños, el script recorre las instancias a través de un “for” utilizando el comando srvctl config database y le agrega el numero de nodo a la instancia para ingresar a RMAN y ejecutar el respaldo, cuando termina con una instancia, seguirá respaldando la siguiente hasta terminar todas las instancias.

Al ejecutar el script de respaldo, se obtendrá lo siguiente:

Logs Ejecución

Podrán ver los logs de ejecución de RMAN de cada una de las instancias y si tienen configurado el mailx les llegara la notificación de respaldo exitoso. Ademas, podrán ver el respaldo exitoso en Veeam Backup & Replication:

Job Respaldo Veeam Oracle RMAN Plugin

Con esto ya tenemos nuestros respaldos de las instancias de Oracle RAC funcionando fácilmente, por ejemplo, si deseas agendar el respaldo solo debes agregar el script backup.sh a crontab en los días que estimes convenientes y editar la parte de RMAN para hacer el respaldo como estimes necesario, o ejecutarlo con tu gestor preferente o con Veeam Agent for Linux si lo tienes instalado y haces respaldo de algunos archivos.

Recuperación

Ya que tenemos respaldos, nos aparecerán en el menú de la consola de Veeam Backup & Replication, después de Backup en Disks:

Y podremos seleccionar el respaldo para restaurarlo en caso de algún problema:

Y podremos ver Veeam Explorer para Oracle RMAN:

Seleccionar la base de datos a recuperar y configurar los requerimientos:

Como siempre importante leer informacion especifica del manual de Veeam:

https://helpcenter.veeam.com/docs/backup/explorers/veor_considerations.html?ver=100

O también lo puedes recuperar directamente desde RMAN con sus respectivos comandos.

Logs

Los archivos de logs, en caso de problemas tanto de instalación o de configuración se encuentran en la ruta: /tmp/veeam_plugin_logs donde podrás buscar los errores o enviarlos a soporte de Veeam en caso de algún problema, como también los logs que generan los scripts addoratab.sh y backup.sh que los guarda en /home/oracle/.

Con lo ultimo finalizamos este primer post del blog 🙂 Que te parece para ser el primero? Deja tus comentarios o valoralo.