6f429244e498457b8400e72e4af683b0 Alberto Blog: RMAN Backup Strategies - Part 1

lunedì 27 giugno 2011

RMAN Backup Strategies - Part 1

In questo post vorrei trattare, almeno per punti, le varie strategie di backup con RMAN di Oracle, ovvero le operazione quotidiane che ogni DBA dovrebbe fare per verificare se i backup sono stati eseguiti con successo e le relative verifiche di sicurezza.

Ritengo acquisito il perchè dell'utilizzo del recovery catolog di RMAN su un altro server, dove vengono scritte a livello logico tutte le informazioni relative a tutti i backup di RMAN di una o più istanze Oracle, anche di versioni differenti. (9i-10g)

I backup possono esssere possono essere di varie tipologie, quello che prenderò in esame nel mio caso è quello incremental level 0.
I backup incrementali possono essere di livello 0 o livello 1.
Il backup level 0 backup incrementale, copia tutti i blocchi che contengono dati, come un completo set di backup, che è la inoltre la base per i successivi backup incrementali level 1.
Infatti questa è l'unica differenza tra un level 0 di backup incrementale e un full backup, ossia quest'ultimo non può essere mai incluso in una strategia incrementale.

Nel mio caso ho optato proprio per questa strategia ossia un incremental level 0 eseguito 3 volte al giorno,
senza utilizzare ulteriori backup incrementali di level 1.

Queste considerazioni vanno prese dopo un'analisi attenta del DB, basate principalmente sulla dimensione,
sul tempo di esecuzione di backup e sul tempo di restore

Per esempio per un DB molto grande forse non sarà possibile eseguire un level 0 ogni giorno allora si procederà con un level 0 durante in week-end e successivi level 1 durante tutta la settimana.

In un db faccio eseguire questo script di RMAN per il backup:

run {
allocate channel 'dev_0' device type disk;
allocate channel 'dev_1' device type disk;
backup incremental level 0 filesperset 4
format '/DataDomain/****/******_%s_%t_%p.dbf'
database
include current controlfile;
sql 'alter system archive log current';
backup filesperset 1
format '/DataDomain/****/****ARCH_%s_%t_%p.arch'
archivelog all delete input;}
crosscheck backup device type disk;
delete noprompt obsolete;
delete noprompt expired backupset;

allocated channel: dev_0
channel dev_0: sid=142 devtype=DISK

allocated channel: dev_1
channel dev_1: sid=148 devtype=DISK

Starting backup at 27-JUN-11
channel dev_0: starting incremental level 0 datafile backupset
channel dev_0: specifying datafile(s) in backupset
input datafile fno=00046 name=/****/undotbs01.dbf
input datafile fno=00035 name=/****/indici01.dbf
............
channel dev_1: starting piece 1 at 27-JUN-11
channel dev_0: finished piece 1 at 27-JUN-11
piece handle=/DataDomain/****/****_72057_754923606_1.dbf tag=TAG20110627T130004 comment=NONE
..............
channel dev_0: backup set complete, elapsed time: 00:00:35
Finished backup at 27-JUN-11

Starting Control File and SPFILE Autobackup at 27-JUN-11
piece handle=/DataDomain/*****/c-1531569699-20110627-02 comment=NONE
Finished Control File and SPFILE Autobackup at 27-JUN-11

sql statement: alter system archive log current

Starting backup at 27-JUN-11
current log archived
channel dev_0: starting archive log backupset
channel dev_0: specifying archive log(s) in backup set
input archive log thread=1 sequence=69375 recid=61597 stamp=754894912
channel dev_0: starting piece 1 at 27-JUN-11
channel dev_1: starting archive log backupset
channel dev_1: specifying archive log(s) in backup set
input archive log thread=1 sequence=69379 recid=61601 stamp=754894938
channel dev_1: starting piece 1 at 27-JUN-11
channel dev_0: finished piece 1 at 27-JUN-11
piece handle=/DataDomain/*****/*****ARCH_72071_754925704_1.arch tag=TAG20110627T133503 comment=NONE
channel dev_0: backup set complete, elapsed time: 00:00:04
channel dev_0: deleting archive log(s)
..............
Starting Control File and SPFILE Autobackup at 27-JUN-11
piece handle=/DataDomain/******/c-1531569699-20110627-03 comment=NONE
Finished Control File and SPFILE Autobackup at 27-JUN-11
released channel: dev_0
released channel: dev_1

Con questo script mi assicuro che tutto il DB e gli archive log relativi vengano inclusi nel backupset.
Controllando i vari parametri di configuazione di RMAN mi soffermo per due in  particolare;

CONFIGURE RETENTION POLICY TO REDUNDANCY 1;
CONFIGURE BACKUP OPTIMIZATION ON;

Per RETENTION POLICY TO REDUNDANCY 1 specifico che voglio tenere esclusivamente l'ultimo backup effettuato,visto che nell'arco della giornata ne eseguo 3, questo è per una strategia legata allo disk space utilizzatodal backup.
Per BACKUP OPTIMIZATION ON il comando BACKUP salta il backup di alcuni datafiles per esempio quando vede che è già stato eseguito il backup,attraverso questi 3 controlli:
1) RMAN datafiles confronta DBID, SCN checkpoint, SCN creazione e SCN RESETLOGS, quindi se sono identici salta l'esecuzione.
2) Archived redo log RMAN verifica il thread, il sequence number, RESETLOGS SCN e datetime.
3) Per i backupset RMAN verifica recid e stamp.

Andando avanti con lo script di RMAN per il backup troviamo questi 2 comandi,crosscheck e delete noprompt obsolete.
Il crosscheck esegue una verifica tra i backupset presenti nel recovery catalog e quelli presenti fisicamente su disco, se non trova corrispondenza vengono segnati cosa "EXPIRED" all'interno del catalog, se trova invece corrispondenza ma non viene soddisfatta la retention policy vengono segnati come "OBSOLETE".

Con il delete noprompt cancello quelli "OBSOLETE" da disco, quelli che non corrispondono alla retention policy, inoltre rimuove quelli in stato "EXPIRED" dal catalog e quelli che ci sono ancora nel catalog ma che non si trovano fisicamente nel disco.
Con questo comando eseguo una sorta di pulizia del catalog tenendo solo quelli in stato "AVAILABLE".
Nell'esecuzione dello script possiamo trovare:
allocated channel: ORA_DISK_1
channel ORA_DISK_1: sid=142 devtype=DISK
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/DataDomain/****/*_71674_754891210_1.dbf recid=71617 stamp=754891210
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/DataDomain/****/*_71673_754891209_1.dbf recid=71618 stamp=754891210
crosschecked backup piece: found to be 'AVAILABLE'
backup piece handle=/DataDomain/****/*__71676_754891742_1.dbf recid=71619 stamp=754891743
.............
RMAN retention policy will be applied to the command
RMAN retention policy is set to redundancy 1
using channel ORA_DISK_1
Deleting the following obsolete backups and copies:
Type                 Key    Completion Time    Filename/Handle
-------------------- ------ ------------------ --------------------
Backup Set           425324 27-JUN-11      
Backup Piece       425339 27-JUN-11    /DataDomain/****/*_71674_754891210_1.dbf
Backup Set           425325 27-JUN-11      
Backup Piece       425340 27-JUN-11    /DataDomain/******/*_71673_754891209_1.dbf
Backup Set           425326 27-JUN-11      
Backup Piece       425341 27-JUN-11    /DataDomain/*****/*_71676_754891742_1.dbf
Backup Set           425327 27-JUN-11      
Backup Piece       425342 27-JUN-11    /DataDomain/*****/*_71675_754891735_1.dbf
.........
backup piece handle=/DataDomain/******/*ARCH_72126_754925794_1.arch recid=72057 stamp=754925794
deleted backup piece
backup piece handle=/DataDomain/******/*ARCH_72127_754925797_1.arch recid=72058 stamp=754925797
deleted backup piece
backup piece handle=/DataDomain/******/*ARCH_72128_754925797_1.arch recid=72059 stamp=754925797
deleted backup piece
backup piece handle=/DataDomain/******/*ARCH_72129_754925800_1.arch recid=72060 stamp=754925800
deleted backup piece
backup piece handle=/DataDomain/******/*ARCH_72130_754925800_1.arch recid=72061 stamp=754925800
deleted backup piece
.....
Deleted 86 objects

Recovery Manager complete.

Nella seconda parte tratterò altre operazioni sempre con RMAN come, la reportistica e come validare un backup.

Nessun commento:

Posta un commento