El script backup_caliente_local.sh se ha de llamar con los parámetros:
backup_caliente_local.sh system/"password_system" SID_BBDD DIR_DESTINO
Donde
SID_BBDD es el SID de la base de datos Oracle a copiar (debe estar en modo Archivelog)
DIR_DESTINO es el directorio destino del backup (ej. /u01/backups) donde se almacenará el backup sin comprimir de la base de datos.
Este script corresponde a lo que Oracle denomina "user-managed" backups.
#!/bin/ksh
. $HOME/.bash_profile
# COGEMOS EL PARAMETRO DE LA CONEXION (US_PW (usuario/password)), EL SID (SID) Y EL DESTINO DE LA COPIA EN CALIENTE (DEST)
US_PW=$1
SID=$2
DEST=$3
MES=`date +%m`; export MES
DIA=`date +%d`; export DIA
ANO=`date +%Y`; export ANO
FECHA=$ANO$MES$DIA
#BORRAMOS LOS FICHEROS ARCHS COPIADOS ANTERIORMENTE
rm $DEST/arch*.arc
rm $DEST/*.gz
#GENERAMOS LA LISTA DE TABLESPACE QUE TENEMOS QUE HACER COPIA EN CALIENTE
$ORACLE_HOME/bin/sqlplus -s $US_PW@$SID << EOF
alter system switch logfile;
set heading off;
set trimspool on;
set feedback off;
spool /home/oracle/scripts/COPIACALIENTE/logs/TB-$SID-$FECHA.txt
select tablespace_name from dba_tablespaces where contents not in ('TEMPORARY') order by 1;
spool off;
spool /home/oracle/scripts/COPIACALIENTE/logs/TB-DF-$SID-$FECHA.txt
select tablespace_name||','||file_name from dba_data_files order by 1;
spool off;
exit
EOF
#AHORA FILTRAMOS POR TB COPIANDO LOS DATAFILES CORRESPONDIENTES
for j in `cat /home/oracle/scripts/COPIACALIENTE/logs/TB-$SID-$FECHA.txt`
do
echo 'ALTER TABLESPACE '$j' BEGIN BACKUP;' > /home/oracle/scripts/COPIACALIENTE/logs/TB-BEGIN.txt
echo 'ALTER TABLESPACE '$j' END BACKUP;' > /home/oracle/scripts/COPIACALIENTE/logs/TB-END.txt
#GENERAMOS LA LISTA DE DATAFILES A COPIAR A PARTIR DE UN TABLESPACE DETERMINADO
cat /home/oracle/scripts/COPIACALIENTE/logs/TB-DF-$SID-$FECHA.txt|grep $j|cut -f 2 -d ',' > /home/oracle/scripts/COPIACALIENTE/logs/DF-COP.txt
#Ahora lanzamos el begin backup
$ORACLE_HOME/bin/sqlplus -s $US_PW@$SID << EOF
@/home/oracle/scripts/COPIACALIENTE/logs/TB-BEGIN.txt
exit
EOF
#Ahora lanzamos la copia de los ficheros al directorio especificado
for i in `cat /home/oracle/scripts/COPIACALIENTE/logs/DF-COP.txt`
do
cp $i $DEST
done
#Ahora lanzamos el end backup
$ORACLE_HOME/bin/sqlplus -s $US_PW@$SID << EOF
@/home/oracle/scripts/COPIACALIENTE/logs/TB-END.txt
exit
EOF
done
#Ahora listamos los ficheros archs a copiar, generando antes el ultimo arch
$ORACLE_HOME/bin/sqlplus -s $US_PW@$SID << EOF
alter system switch logfile;
set heading off;
set trimspool on;
set feedback off;
spool /home/oracle/scripts/COPIACALIENTE/logs/ARCHS-$SID-$FECHA.txt
select t2.value||'/'||(replace(replace(t3.value,'%s',t1.sequence#),'%t',t1.thread#)) from v$loghist t1, v$parameter t2, v$parameter t3 where t1.first_time > sysdate-1 and t2.name = 'log_archive_dest' and t3.name = 'log_archive_format' order by sequence#;
spool off;
exit
EOF
#Ahora lanzamos la copia de los ficheros ARCHS al directorio especificado (con 1 dia de antiguedad)
for i in `cat /home/oracle/scripts/COPIACALIENTE/logs/ARCHS-$SID-$FECHA.txt`
do
if [ -f $i ];
then
cp $i $DEST;
fi
done
No hay comentarios:
Publicar un comentario