MrJazsohanisharma

RMAN Backup Script

RMAN (Recovery Manager), Oracle veritabanı yönetim sisteminde veritabanı yedekleme, geri yükleme ve onarım işlemlerini yönetmek için kullanılan bir araçtır. RMAN, Oracle Database'in bir bileşeni olarak sunulan güçlü bir yedekleme ve geri yükleme aracıdır. Veritabanı yöneticileri ve sistem yöneticileri, RMAN aracılığıyla veritabanı işlemlerini otomatikleştirebilir ve veritabanı bütünlüğünü koruyabilir.

RMAN, Oracle veritabanı yöneticilerinin veri bütünlüğünü sağlamak, yedekleme ve geri yükleme süreçlerini otomatikleştirmek ve veritabanı felaket durumlarında hızlı bir şekilde geri dönüş yapmak için önemli bir araçtır. RMAN, güçlü özelliklere sahip olmasıyla birlikte, Oracle veritabanlarının güvenliğini ve sürekli kullanılabilirliğini sağlamak için kritik bir bileşendir.

Günlük yedeklemeler için kullandığım script :


###################################################
###		 RMAN BACKUP SCRIPT		###
###################################################
#!/bin/sh
ScriptFileName=`basename ${0}`
# First Load Linux Oracle Profile for Enviroment Variables
. /home/oracle/.oracle_profile
tarih=`date +%Y_%m_%d`
tarihsaat=`date +%Y_%m_%d_%H%M`

# Change variables below for using
FROM=test@domain.com
TO=dba@domain.com
command_id=$tarihsaat
dizin="/backup/RMAN/"
BackupFolder="$dizin/$tarih"
ControlFilesFolder="$dizin/ControlFiles"
LogFolder="$dizin/logs"
logfile="$LogFolder/rman_$1_$tarihsaat.log"
FormatFull="$BackupFolder/FULL_%d_%T_%s"
FormatIncr="$BackupFolder/incr_%d_%T_%s"
FormatArch="$BackupFolder/arch_%d_%T_%s"


Help()
{
   echo "----------------------------------------"
   echo "         RMAN BACKUP SCRIPT"
   echo "----------------------------------------"
   echo
   echo " Syntax : ./$ScriptFileName Type [Day]" 
   echo
   echo " Type :"
   echo
   echo "  full     		Full Backup"
   echo "  incr     		Incremental Differential Backup"
   echo "  arch     		Archivelog Backup"
   echo "  cros     		Crosscheck And Delete Expired"
   echo "  del [day count]    	Archivelog Delete Until Sysdate - Days"
   echo
   echo "----------------------------------------"
   echo
}

if [ -z "$1" ]; then  # do something if argument is empty
  Help
  exit 1 
else
  Type=$1
fi

if [ -z "$2" ]; then
  Day=0
else
  Day=$2
fi

# Script
mkdir -p {"$BackupFolder","$LogFolder","$ControlFilesFolder"}

FullBackup(){
rman log=$logfile << EOF
connect target /
set echo on;
run
{
sql 'alter system archive log current';
SET COMMAND ID TO '$command_id';
CONFIGURE DEVICE TYPE DISK PARALLELISM 32;
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 32G;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '$FormatFull';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$ControlFilesFolder/cf_%F';
BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG FORMAT '$FormatFull' DELETE INPUT;
}
EOF
}

IncrementalBackup(){
rman log=$logfile << EOF
connect target /
set echo on;
run
{
sql 'alter system archive log current';
SET COMMAND ID TO '$command_id';
CONFIGURE DEVICE TYPE DISK PARALLELISM 16;
CONFIGURE CHANNEL DEVICE TYPE DISK MAXPIECESIZE 32G;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '$FormatIncr';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$ControlFilesFolder/cf_%F'; 
BACKUP AS COMPRESSED BACKUPSET INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG FORMAT '$FormatIncr' DELETE INPUT;
}
EOF
}

ArchiveLogBackup(){
rman log=$logfile << EOF
connect target /
set echo on;
run
{
sql 'alter system archive log current';
SET COMMAND ID TO '$command_id';
CONFIGURE DEVICE TYPE DISK PARALLELISM 2;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '$FormatArch';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '$ControlFilesFolder/cf_%F'; 
BACKUP AS COMPRESSED BACKUPSET ARCHIVELOG ALL FORMAT '$FormatArch';
}
EOF
}

ArchiveLogDelete(){
rman << EOF
connect target /
set echo off;
run
{
sql 'alter system archive log current';
delete noprompt archivelog until time 'sysdate -$Day';
}
EOF
}

CrosschekAndDeleteExpired(){
rman << EOF
connect target /
set echo on;
run
{
CROSSCHECK BACKUP;
CROSSCHECK ARCHIVELOG ALL;
CROSSCHECK BACKUPSET;
DELETE NOPROMPT OBSOLETE;
DELETE NOPROMPT EXPIRED BACKUP;
DELETE NOPROMPT EXPIRED ARCHIVELOG ALL;
DELETE NOPROMPT EXPIRED BACKUPSET;
}
EOF
}

RunSQL(){
sqlplus -s / as sysdba <<EOF
SET LINES 32000 PAGESIZE 0
SET TERMOUT OFF ECHO OFF NEWP 0 SPA 0 PAGES 0 FEED OFF HEAD OFF TRIMS ON TAB OFF
$1
exit
EOF
}

#SQL "begin send_rman_backup_status(''$command_id'',FALSE);end;";
SendRmanBackupStatusAsMail(){
BackupStatusQuery="SELECT STATUS FROM v\$rman_backup_job_details where COMMAND_ID='$command_id';"
BackupTypeQuery="SELECT INPUT_TYPE FROM v\$rman_backup_job_details where COMMAND_ID='$command_id';"
BackupTimeQuery="SELECT TIME_TAKEN_DISPLAY FROM v\$rman_backup_job_details where COMMAND_ID='$command_id';"
BackupSizeQuery="SELECT OUTPUT_BYTES_DISPLAY FROM v\$rman_backup_job_details where COMMAND_ID='$command_id';"
BackupStatus=$(RunSQL "$BackupStatusQuery")
BackupType=$(RunSQL "$BackupTypeQuery")
BackupTime=$(RunSQL "$BackupTimeQuery")
BackupSize=$(RunSQL "$BackupSizeQuery")
MailText="Elapsed Time :\t $BackupTime  \nBackup Size :\t $BackupSize \n\n$BackupType RMAN BACKUP $BackupStatus"

if [ "$BackupStatus" = "COMPLETED" ]; then
    echo -e $MailText | mailx -r $FROM -s "$BackupStatus"  $TO
else
    echo -e $MailText | mailx -a $logfile -r $FROM -s "$BackupStatus"  $TO
fi

}
# Option Backup Type
case "$Type" in
    "full")
	echo "starting full backup  "
	FullBackup
	CrosschekAndDeleteExpired
	SendRmanBackupStatusAsMail
	exit 0
   ;;
    "incr")
	echo "starting incremental backup  "
	IncrementalBackup
	CrosschekAndDeleteExpired
	SendRmanBackupStatusAsMail
	exit 0
   ;;
    "arch") 
	echo "starting archivelog backup  "
	ArchiveLogBackup
	CrosschekAndDeleteExpired
	exit 0
   ;;
    "del") 
	echo "deleting archivelogs until time sysdate - "$Day"  "
	exit 0
   ;;
    "cross") 
	CrosschekAndDeleteExpired
	exit 0
   ;;
   *)
	Help
    	exit 1 # Command to come out of the program with status 1
   ;;
esac

Yorum Gönder

Daha yeni Daha eski