#!/bin/bash
# Developer: Alejandro Andino
#+-----------------------------+
#| Backup en frio de DataFiles |
#+-----------------------------+
export ORACLE_SID="test"
export ORACLE_BASE="/u01/app/oracle"
export ORACLE_HOME="/u01/app/oracle/product/10.2.0/test"
export NLS_LANG=AMERICAN_AMERICA.WE8MSWIN1252
export NLS_DATE_FORMAT="DD-MON-YYYY HH24:MI:SS"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export SQLPATH=/u01/app/oracle/product/10.2.0/test/sqlplus/admin
backup="/u01/app/oracle/backup/datafiles"
arc="/u01/app/oracle/backup/arc"
fecha=`date +"%d%m%y_%H%M"`
sequence=`sqlplus -s system/xxx @lastArcLog.sql|tr -d "[:blank:]"`
seq=$(($sequence-1))
#+-----------------+
#| FUNCTIONS |
#+-----------------+
#Function DEL_OldLogs: Borrar arc log archivados sin uso.
#Variables externas/globales: sequence, seq,arc
function DEL_OldLogs(){
list=`ls $arc | gawk -F "_" -v sq=$seq -v path=$arc '{ if($2 < sq) print path"/"$1"_"$2"_"$3 }'` for i in $list do if [ -f $i ]; then rm -f $i fi done }
# Se me ocurrio pensar que sucedería si se me rompe el disco que justamente guarda los backup. Asi que guardamos el backup en un almacenamiento
#externo también, con esta función.
function New_Backup(){
rm -f $backup/*.tar.gz
#Copy datafiles and archivelogs to backup.
tar -czvf $backup/$file $ORACLE_BASE/oradata/db10g2 $arc &>/dev/null
chmod +rw $backup/$file
# Almecenando backup a ubicacion remota.
smbclient //STORAGE/backup "" --user=backup%password --workgroup=dominio -c "lcd ${backup};cd Backup_DATA;put ${file};exit"
}
#+------------------------+
#| BEGIN SCRIPT |
#+------------------------+
sqlplus -s '/as sysdba' <<"EOF"
ALTER SYSTEM ARCHIVE LOG CURRENT; --> Forzar el archivado de redologs.
shutdown immediate
exit
EOF
New_Backup #Reemplaza y mejora la funcionalidad de las lineas anteriores ;-)
#Ejecutamos la función.DEL_OldLogs
#Levantamos la base de datos.
sqlplus -s '/as sysdba'<<"EOF"
startup
exit
EOF
#+------+
#| FIN |
#+------+
Por ultimo el pequeño script que uso para ver la ultima secuencia procesada por el proceso ARCx.
lastArcLog.sql
set echo off
set heading off
set flush off
set pause off
set feedback off
set pages 0
select MAX(sequence#) from v$archived_log;
exit
Este script se ejecuta diariamente, con lo que me deja el backup de los datafiles y los arclog generado por esta.