Windows Oracle Standby Veritabanı Arşiv Silme Scripti

Merhabalar,

Önceki yazımda Linux ve Unix işletim sistemleri için Standby veritabanında biriken arşiv dosyalarımızın temizlenmesi için script oluşturmuştuk. O scripte yeralan archiveDelete.sh scriptini windows için uyarladım. Geri kalan dosyalarda herhangi bir değişiklik olmayacak.
archiveDelete.bat

cd %archivePath% -- archivePath yerine arşiv scriptinin bulunduğu klasörü yazın.
del MAXSEQ.tmp
sqlplus -S /nolog < Maxseq.sql 
for /f "tokens=1,2" %%a in ('type MAXSEQ.tmp') do set seq%%a=%%b
set DD=%date:~-4%%date:~4,2%%date:~7,2%%time:~0,2%%time:~3,2%%time:~6,2%
set logfile=STANDBY_ARC_DEL_%DD%.log
(
 echo run{
 echo crosscheck archivelog all;
 echo delete noprompt archivelog until sequence %seq1% thread 1;
 echo delete noprompt archivelog until sequence %seq2% thread 2;
 echo delete noprompt archivelog until sequence %seq3% thread 3;
 echo delete noprompt archivelog until sequence %seq4% thread 4;
 echo }
) | rman target / nocatalog log %logfile%

forfiles /P %archivePath% /D -7 /M STANDBY*.* /C "cmd /c del @file" -- archivePath yerine arşiv scriptinin bulunduğu klasörü yazın.

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