miércoles, 18 de agosto de 2010

Script - Backup_caliente_local.sh

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