Oracle Standby Veritabanı Arşiv Silme Scripti

Merhabalar,
Bu yazımda standby veritabanında biriken yüklenmiş arşivleri temizlemek için kullanabileceğimiz bir scriptten bahsedeceğim.
Scriptimiz Linux ve Unix işletim sistemlerinde çalışıyor ve 3 dosyadan oluşuyor. Şimdi bunları açıklayalım:

maxThreadNumber.sql

// Aşağıdaki sql komutunda veritabanında bulunan thread'lerin max sequence sayılarını öğrenip, maxThreadNumber.tmp adında bir dosyaya yazıyoruz.
// Select sorgusunda max değerden 10 çıkarıyoruz çünkü her türlü ihtimale karşı standby veritabanında en son 10 arşiv logunu tutuyoruz.
connect / as sysdba 
set heading off pages 0 echo off feedback off; 
spool maxThreadNumber.tmp; 
select thread#, max(sequence#)-10 from v$archived_log where applied ='YES' and REGISTRAR='RFS' group by thread# ; 
spool off; 
exit; 

archiveDelete.sh

#!/bin/bash

export ORACLE_HOME=Bu kısıma Oracle Home tam adresini yazacağız. Ör: /oracle/app/product/11.2.0/dbhome_1
export ORACLE_SID=Bu kısıma Oracle SID i yazacağız
export archivePath=Bu kısıma arsiv silme scriptini koyacağımız klasörün adresini yazacağız. Ör: /home/oracle/archiveDelete

## arsivDelete scriptini her çalıştırdığımızda maxThreadNumber.sql scripti maxThreadNumber.tmp adında bir dosya üretiyor. 
## Yeni dosya oluşturmadan önce eskisini siliyoruz.
 rm -f $archivePath/maxThreadNumber.tmp

 $ORACLE_HOME/bin/sqlplus / as sysdba < $archivePath/maxThreadNumber.sql 

## maxThreadNumber.tmp dosyasında veritabanımızda kaç tane thread olduğu yazmaktadır.
## Bu dosyaya göre aşağıda bulunan seq1,seq2.. gibi satırları çoğaltalım.
## Örneğin veritabanımızda 4 tane thread varsa seq2 ve seq3 teki '#' işaretlerini kaldırıp, seq4 için de bir satır oluşturmamız lazım.
 seq1=`cat $archivePath/maxThreadNumber.tmp | awk 'NR==1{print $2}'`
#seq2=`cat $archivePath/maxThreadNumber.tmp | awk 'NR==2{print $2}'`
#seq3=`cat $archivePath/maxThreadNumber.tmp | awk 'NR==3{print $2}'`

$ORACLE_HOME/bin/rman << EOF
 connect target /
 run{
 crosscheck archivelog all;
## Yukarıdaki thread sayısına göre aşağıdaki satırları düzenlemeyi unutmayın.
 delete noprompt archivelog until sequence $seq1 thread 1;
#delete noprompt archivelog until sequence $seq2 thread 2;
#delete noprompt archivelog until sequence $seq3 thread 3;
 }
 EOF
exit

Arşivleri silmek için sadece archiveDelete.sh scriptini çalıştırmamız gerekiyor.

$./archiveDelete.sh