Configurar script de backup con rman full

Oracle-logo

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 rman full, 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 rman_full.sh
##########################################################################
#                     Soy un DBA                                         #
# Nombre del script: rman_full.sh                                        #
# Descripcion: Generar backup full + backup de archive de la BD soyundba #
# Fecha creacion: Mayo 23 2022                                           #
# 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/19.0.0/dbhome_1
export ORACLE_SID=$1
export PATH=$PATH:$HOME/bin:$ORACLE_HOME/bin
export fecha=`date +%d%b%Y_%H%M`
export ruta=/backup/soyundba/rman
export logfull=$ruta'/RmanFull_'${ORACLE_SID}'_'${fecha}'.log'
export nas=/nas/backup/soyundba/rman

#####################################
# Backup Full    1 DIA DE RETENCION #
# Backup Archive 1 DIA DE RETENCION #
#####################################
find $ruta/ -name 'RmanSpfile_*' -exec rm {} \;
find $ruta/ -name 'RmanCtrl_*' -exec rm {} \;
find $ruta/ -name 'RmanFull_*' -exec rm {} \;
find $ruta/ -name 'RmanArch_*' -exec rm {} \;
find $ruta/ -name 'RmanCtrlStby_*' -exec rm {} \;

#############
# EJECUCION #
#############
$ORACLE_HOME/bin/rman target / msglog $logfull append << EOF
run
{
allocate channel ch1 type disk maxpiecesize 32G;
backup spfile format '$ruta/RmanSpfile_%d_%T_%s_%p.bck' tag BckpSpfile;
backup as compressed backupset database format '$ruta/RmanFull_%d_%T_%s_%p.bck' tag BckpFull;
backup current controlfile format '$ruta/RmanCtrl_%d_%T_%s_%p.bck' tag BckpCtrl;
backup current controlfile for standby format '$ruta/RmanCtrlStby_%d_%T_%s_%p.bck' tag BckpCtrlStby;
release channel ch1;
}
exit
EOF

##################################
# SETEO DE VARIABLES BCK ARCHIVE #
##################################
export fecha=`date +%d%b%Y_%H%M`
export logarch=$ruta'/RmanArch_'${ORACLE_SID}'_'${fecha}'.log'

#########################
# EJECUCION BCK ARCHIVE #
#########################
$ORACLE_HOME/bin/rman target / msglog $logarch append << EOF
run
{
allocate channel ch1 type disk maxpiecesize 10G;
sql 'alter system archive log current';
backup as compressed backupset archivelog all format '$ruta/RmanArch_%d_%T_%s_%p.bck' tag BckpArch;
delete noprompt archivelog all backed up 1 times to device type disk;
backup current controlfile format '$ruta/RmanCtrl_%d_%T_%s_%p.bck' tag BckpCtrlFile;
release channel ch1;
}
exit
EOF

#########################
# PASAR BACKUP A LA NAS #
#########################
cp $ruta/RmanSpfile_* $nas
cp $ruta/RmanCtrl_* $nas
cp $ruta/RmanFull_* $nas
cp $ruta/RmanArch_* $nas
cp $ruta/RmanCtrlStby_* $nas

Otorgamos los permisos necesarios, para que el usuario Oracle pueda ejecutar la tarea automáticamente desde el crontab

[oracle@soyundba bckps]$ chmod 755 rman_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 11:30 pm

[oracle@soyundba bckps]$ crontab -e
# BACKUP RMAN FULL + ARCHIVE DIARIO 8:10PM
30 11 * * * /home/oracle/scripts/bckps/rman_full.sh csoyundba

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/rman
  • Ubicación en lugar externo (NAS) -> /nas/backup/soyundba/rman
[oracle@soyundba bckps]$ cd /backup/
[oracle@soyundba backup]$ mkdir soyundba
[oracle@soyundba backup]$ cd soyundba/
[oracle@soyundba soyundba]$ mkdir rman
[oracle@soyundba soyundba]$ cd rman/

Debemos tener presente que para poder correr un bck en caliente, se debe configurar la base de datos en modo archive, aquí les dejo el articulo para realizarlo

Finalmente, podremos realizar la prueba del script, ejecutando este de manera manual

[oracle@soyundba rman]$ sh /home/oracle/scripts/bckps/rman_full.sh csoyundba
RMAN> 2> 3> 4> 5> 6> 7> 8> RMAN> RMAN> 2> 3> 4> 5> 6> 7> 8> 9> RMAN>

Podemos listar nuestros archivos físicos

[oracle@soyundba rman]$ ls -l
total 575584
-rw-r-----. 1 oracle oinstall   1678848 Aug 13 11:53 RmanArch_CSOYUNDB_20220813_37_1.bck
-rw-r--r--. 1 oracle oinstall      2616 Aug 13 11:53 RmanArch_csoyundba_13Aug2022_1153.log
-rw-r-----. 1 oracle oinstall  18808832 Aug 13 11:53 RmanCtrl_CSOYUNDB_20220813_34_1.bck
-rw-r-----. 1 oracle oinstall  18808832 Aug 13 11:53 RmanCtrl_CSOYUNDB_20220813_39_1.bck
-rw-r-----. 1 oracle oinstall  18808832 Aug 13 11:53 RmanCtrlStby_CSOYUNDB_20220813_35_1.bck
-rw-r-----. 1 oracle oinstall 304316416 Aug 13 11:52 RmanFull_CSOYUNDB_20220813_31_1.bck
-rw-r-----. 1 oracle oinstall 103669760 Aug 13 11:52 RmanFull_CSOYUNDB_20220813_32_1.bck
-rw-r-----. 1 oracle oinstall 123297792 Aug 13 11:53 RmanFull_CSOYUNDB_20220813_33_1.bck
-rw-r--r--. 1 oracle oinstall      3648 Aug 13 11:53 RmanFull_csoyundba_13Aug2022_1151.log

Con esto, ya tendremos nuestras bases de datos protegidas ante contingencias

Tambien puedes ver aquí la configuración con datapump

Te invito a seguir consultando más articulos relacionados a backups en Oracle dando clic aquí.

 

Acerca de JulianOrtiz0506

Soy administrador de bases de datos y desarrollador web, desde mis inicios en el mundo de la informática, he implementando proyectos personales y empresariales. Por consiguiente esto me ha permitido contar con una amplia calificación y destreza sobre mis áreas de conocimiento. Sobre todo suelo estar en constante aprendizaje, diariamente me estoy informando sobre nuevas tecnologías. Ya queme gusta estar actualizado en la tecnología de punta para todas las plataformas que me apasionan y con las cuales trabajo día a día.

Ver todas las entradas de JulianOrtiz0506 →

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *