29 января 2013 г.

Удаление архивных логов


Настроил несколько standby серверов, после этого появилась проблема с удалением архивных логов Oracle.

По официальной документации делаем так:
- настроить архивирование логов с помощью rman
- настроить  RETENTION POLICY
- включить mandatory для передачи архивных логов
- затем удалять логи с помощью
backup archivelog all delete input;
- на standby сервере можно использовать что-то вроде
delete archivelog all completed before 'sysdate';
или
delete archivelog until time ‘SYSDATE-10';

Этот вариант мне не подошел, пришлось удалять все логи вручную с помощью скриптов:

#!/bin/bash

echo "start ..."

. /home/oracle/scripts/oraenv.sh

export NLS_DATE_FORMAT="DD-MON-RRRR HH24:MI:SS"
export TODAY=`date '+%Y%m%d'`
export TIME=`date '+%H%M%S'`

echo "step 2 ..."


cd /home/oracle/scripts

rm /home/oracle/scripts/1.tmp

sqlplus -s / as sysdba << EOF
set heading off
set pages 0 echo off feedback off
spool /home/oracle/scripts/1.tmp
select max(sequence#)-10 from v\$archived_log where dest_id=5 and thread#=1 and standby_dest='YES' and applied ='YES';
spool off;
exit;
EOF

echo "step 3 ..."

seq1=`cat /home/oracle/scripts/1.tmp | awk 'NR==1{print $1}'`

echo "step 4 ..."
echo "seq1 = $seq1"


echo $seq1
echo "delete noprompt archivelog until sequence $seq1 thread 1;"

rman msglog /home/oracle/scripts/PRIMARY_ARC_DEL.${TODAY}_${TIME}.log << EOF
connect target /
run{
delete noprompt archivelog until sequence $seq1 thread 1;
}
EOF

echo "done ..."


exit


Комментариев нет:

Отправить комментарий