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í.